Commit ba3edcd9 LN

新增消息模塊

1 个父辈 6a68d776
package com.neotel.smfcore.core.message.enums;
public enum MessageType {
/**
*0 消息
*/
INFO ,
/**
* 1 警告
*/
WARNING,
/**
* 2 错误
*/
ERROR,
}
package com.neotel.smfcore.core.message.rest;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.message.rest.bean.dto.MessageDto;
import com.neotel.smfcore.core.message.rest.bean.mapstruct.MessageMapper;
import com.neotel.smfcore.core.message.rest.bean.query.MessageCriteria;
import com.neotel.smfcore.core.message.service.manager.IMessageManager;
import com.neotel.smfcore.core.message.service.po.Message;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "日志管理:消息查询")
@RequestMapping("api/message")
public class MessageController {
@Autowired
IMessageManager messageManager;
@Autowired
MessageMapper messageMapper;
@ApiOperation("导出消息列表")
@GetMapping(value = "/download")
public void download(HttpServletResponse response, MessageCriteria criteria, HttpServletRequest request) throws Exception {
Query query = QueryHelp.getQuery(criteria);
List<Message> list = messageManager.findByQuery(query);
//下载
messageManager.download(list, response,request.getLocale());
}
@ApiOperation("查询列表")
@GetMapping
@PreAuthorize("@el.check('message')")
public PageData<MessageDto> query(MessageCriteria criteria, Pageable pageable,HttpServletRequest request){
Query query = QueryHelp.getQuery(criteria);
PageData<Message> messagePageData=messageManager.findByPage(query,pageable);
List<MessageDto> dtos=messageMapper.toDto(messagePageData.getContent());
for (int i=0;i<dtos.size();i++) {
if(ObjectUtil.isNotEmpty(dtos.get(i).getMsgCode())){
dtos.get(i).setMsg(MessageUtils.getText(dtos.get(i).getMsgCode(),dtos.get(i).getMsgParams(),request.getLocale(),dtos.get(i).getMsg()));
}
}
return new PageData(dtos,messagePageData.getTotalElements());
}
@ApiOperation("获取设备列表")
@GetMapping(value = "/deviceList")
@PreAuthorize("@el.check('message')")
public List<String> getTypeList( ) {
List<String> typeList=messageManager.findDeviceNameList();
return typeList;
}
}
package com.neotel.smfcore.core.message.rest.bean.dto;
import com.neotel.smfcore.core.message.service.bean.DataContent;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Data
public class MessageDto implements Serializable {
@ApiModelProperty(value = "ID")
private String id;
@ApiModelProperty(value = "创建时间")
private Date createDate;
@ApiModelProperty(value = "设备名称")
private String deviceName;
@ApiModelProperty(value = "设备ID")
private String deviceId;
@ApiModelProperty(value = "设备模块")
private String module;
@ApiModelProperty(value = "消息类型,info,warning,error")
private String type;
@ApiModelProperty(value = "消息字符串Code")
private String msgCode;
@ApiModelProperty(value = "消息内容")
private String msg;
@ApiModelProperty(value = "参数")
private String[] msgParams;
@ApiModelProperty(value = "数据参数")
private List<DataContent> dataList;
@ApiModelProperty(value = "结束时间")
private Date finishTime;
}
package com.neotel.smfcore.core.message.rest.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.message.rest.bean.dto.MessageDto;
import com.neotel.smfcore.core.message.service.po.Message;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring" ,unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MessageMapper extends BaseMapper<MessageDto, Message> {
}
package com.neotel.smfcore.core.message.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
public class MessageCriteria {
@QueryCondition(blurry = "deviceName,module,msg")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> createDate;
@QueryCondition
@ApiModelProperty("设备")
private String deviceName;
@QueryCondition
@ApiModelProperty("模块")
private String module;
@QueryCondition
@ApiModelProperty("默认内容")
private String msg;
@QueryCondition
@ApiModelProperty("类型")
private String type;
}
package com.neotel.smfcore.core.message.service.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DataContent {
/**
* key
*/
private String key;
/**
* value
*/
private String value;
}
package com.neotel.smfcore.core.message.service.dao;
import com.neotel.smfcore.common.base.IBaseDao;
public interface IMessageDao extends IBaseDao {
}
package com.neotel.smfcore.core.message.service.dao.impl;
import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.core.message.service.dao.IMessageDao;
import com.neotel.smfcore.core.message.service.po.Message;
import org.springframework.stereotype.Service;
@Service
public class MessageDaoImpl extends AbstractBaseDao implements IMessageDao {
@Override
public Class getEntityClass() {
return Message.class;
}
}
package com.neotel.smfcore.core.message.service.manager;
import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.core.message.service.po.Message;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Locale;
public interface IMessageManager extends IBaseManager<Message> {
void download(List<Message> list, HttpServletResponse response, Locale locale);
List<String> findDeviceNameList();
}
package com.neotel.smfcore.core.message.service.manager.impl;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.core.language.service.nanager.impl.LanguageMsgManagerImpl;
import com.neotel.smfcore.core.language.service.po.LanguageMsg;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.message.enums.MessageType;
import com.neotel.smfcore.core.message.service.dao.IMessageDao;
import com.neotel.smfcore.core.message.service.manager.IMessageManager;
import com.neotel.smfcore.core.message.service.po.Message;
import com.neotel.smfcore.security.service.po.User;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@Service
@Slf4j
public class MessageManagerImpl implements IMessageManager {
@Autowired
IMessageDao messageDao;
@Override
public Message get(String id) {
return messageDao.findOneById(id);
}
@Override
public Message save(Message object) throws ValidateException {
return messageDao.save(object);
}
@Override
public void delete(Message object) throws ValidateException {
messageDao.removeOneById(object.getId());
}
@Override
public PageData<Message> findByPage(Query query, Pageable pageable) {
int totalCount=messageDao.countByQuery(query);
List<Message> messages=messageDao.findByQuery(query,pageable);
return new PageData(messages,totalCount);
}
@Override
public List<Message> findByQuery(Query query) {
return messageDao.findByQuery(query);
}
@Override
public void download(List<Message> messages, HttpServletResponse response, Locale locale) {
List<Map<String, Object>> list = new ArrayList<>();
String device = MessageUtils.getText("smfcore.messages.device", locale, "设备");
String module = MessageUtils.getText("smfcore.messages.module", locale, "模块");
String type = MessageUtils.getText("smfcore.messages.type", locale, "类型");
String createDate = MessageUtils.getText("smfcore.messages.createDate", locale, "创建时间");
String msg = MessageUtils.getText("smfcore.messages.msg", locale, "内容");
String info = MessageUtils.getText("smfcorre.message.info", locale, "消息");
String warning = MessageUtils.getText("smfcorre.message.warning", locale, "警告");
String error = MessageUtils.getText("smfcorre.message.error", locale, "错误");
List<String> titles = new ArrayList<>();
titles.add(device);
titles.add(module);
titles.add(type);
titles.add(createDate);
titles.add(msg);
for (Message obj : messages) {
Map<String, Object> map = new LinkedHashMap<>();
map.put(device, obj.getDeviceName());
map.put(module, obj.getModule());
String typeV=info;
if(obj.getType().equals(MessageType.WARNING.name())){
typeV=warning;
}else if(obj.getType().equals(MessageType.ERROR.name())){
typeV=error;
}
map.put(type, typeV);
map.put(createDate, DateUtil.toDateTimeString(obj.getCreateDate()));
String msgV=obj.getMsg();
if(ObjectUtil.isNotEmpty(obj.getMsgCode())){
msgV=MessageUtils.getText(obj.getMsgCode(),obj.getMsgParams(),locale,obj.getMsg());
}
map.put(msg, msgV);
list.add(map);
}
try {
FileUtil.downloadCSV(list, titles, response);
} catch (Exception e) {
log.error("导出失败" + e.getMessage(), e);
}
}
@Override
public List<String> findDeviceNameList() {
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(Criteria.where("deviceName").exists(true)),
Aggregation.group("deviceName").first("deviceName").as("deviceName")
);
AggregationResults<MsgDeviceName> results = messageDao.getMongoTemplate().aggregate(agg, Message.class, MsgDeviceName.class);
List<MsgDeviceName> deviceNames = results.getMappedResults();
List<String> result = new ArrayList<>();
for (MsgDeviceName device :
deviceNames) {
result.add(device.getDeviceName());
}
return result;
}
@Data
private class MsgDeviceName {
private String deviceName;
}
}
package com.neotel.smfcore.core.message.service.po;
import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.core.message.enums.MessageType;
import com.neotel.smfcore.core.message.service.bean.DataContent;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
@Data
@Document
@NoArgsConstructor
@AllArgsConstructor
public class Message extends BasePo implements Serializable {
public static Message newMsg(MessageType type,String deviceName,String deviceId,String module,String msgCode,String msg,String[] msgParams){
Message message=new Message(deviceName,deviceId,module, type.name(),msgCode,msg,msgParams,null,null);
return message;
}
/**
* 设备名称
*/
private String deviceName;
/**
* 设备ID
*/
private String deviceId;
/**
* 设备模块
*/
private String module;
/**
* 消息类型,info,warning,error
*/
private String type;
/**
* 消息字符串Code
*/
private String msgCode;
/**
* 消息内容
*/
private String msg;
/**
* 参数
*/
private String[] msgParams;
/**
* 数据参数
*/
private List<DataContent> dataList;
/**
* 结束时间
*/
private Date finishTime;
public void addData(String key,String value){
if(dataList==null){
dataList=new ArrayList<>();
}
dataList.add(new DataContent(key,value));
}
}
package com.neotel.smfcore.core.message.util;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.message.enums.MessageType;
import com.neotel.smfcore.core.message.service.manager.IMessageManager;
import com.neotel.smfcore.core.message.service.po.Message;
import com.neotel.smfcore.core.storage.service.po.Storage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class DeviceMessageUtil {
private static DataCache dataCache;
private static IMessageManager messageManager;
@Autowired
public void seDataCache(DataCache dataCache) {
this.dataCache = dataCache;
}
@Autowired
public void setMessageManager(IMessageManager messageManager) {
this.messageManager = messageManager;
}
/**
* 流水线提示消息,只保存最后一条
*/
public static String lineMsg="";
public static void updateLineMsg(String lineMsg, String code, String cids,String posName) {
lineMsg = lineMsg;
Message message = Message.newMsg(MessageType.WARNING, "server", "", "", "", lineMsg, null);
if (ObjectUtil.isNotEmpty(code)) {
message.addData("code", code);
}
if (ObjectUtil.isNotEmpty(cids)) {
message.addData("cids", cids);
}
if (ObjectUtil.isNotEmpty(posName)) {
message.addData("posName", posName);
}
messageManager.save(message);
}
public static void addErrorMessage(String cid, String moudle, String msgCode, String msg, String[] msgParam) {
Storage storage = dataCache.getStorage(cid);
if (storage != null) {
Message message=Message.newMsg(MessageType.ERROR ,storage.getName(), storage.getId(), moudle, msgCode,msg,msgParam);
messageManager.save(message);
}
}
public static void addOnlineMessage(String cid, String moudle,String ip) {
Storage storage = dataCache.getStorage(cid);
if (storage != null) {
Message message=Message.newMsg(MessageType.INFO,storage.getName(), storage.getId(), moudle ,"smfcore.messages.online","上线",null);
message.addData("ip",ip);
messageManager.save(message);
}
}
public static void addOfflineMessage(String cid, String moudle) {
Storage storage = dataCache.getStorage(cid);
if (storage != null) {
Message message=Message.newMsg(MessageType.INFO,storage.getName(), storage.getId(), moudle, "smfcore.messages.offline","离线",null);
messageManager.save(message);
}
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!