Commit c9bbce78 authored by 竹天卫's avatar 竹天卫

接口优化 websocket消息推送功能

parent 681a2cdd
...@@ -23,6 +23,10 @@ ...@@ -23,6 +23,10 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId> <artifactId>spring-boot-starter</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
......
package cn.wise.sc.cement.business.config;
import org.apache.catalina.session.StandardSessionFacade;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import javax.servlet.http.HttpSession;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;
@Configuration
public class WebSocketConfig extends ServerEndpointConfig.Configurator {
private static final Logger log = LoggerFactory.getLogger(WebSocketConfig.class);
/**
* 修改握手信息
*/
@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
StandardSessionFacade ssf = (StandardSessionFacade) request.getHttpSession();
if (ssf != null) {
HttpSession httpSession = (HttpSession) request.getHttpSession();
//关键操作
sec.getUserProperties().put("sessionId", httpSession.getId());
log.info("获取到的SessionID:" + httpSession.getId());
}
super.modifyHandshake(sec, request, response);
}
/**
* WebSocket的支持
* @return
*/
@Bean
public ServerEndpointExporter serverEndpointExporter() {
//这个对象说一下,貌似只有服务器是tomcat的时候才需要配置,具体我没有研究
return new ServerEndpointExporter();
}
}
...@@ -31,7 +31,6 @@ import java.util.Map; ...@@ -31,7 +31,6 @@ import java.util.Map;
* @since 2020-08-24 * @since 2020-08-24
*/ */
@Api(tags="委托管理") @Api(tags="委托管理")
@Slf4j
@RestController @RestController
@RequestMapping("/business/entrust") @RequestMapping("/business/entrust")
public class EntrustController { public class EntrustController {
......
...@@ -59,6 +59,20 @@ public class EquipmentController { ...@@ -59,6 +59,20 @@ public class EquipmentController {
return BaseResponse.errorMsg("失败!"); return BaseResponse.errorMsg("失败!");
} }
@ApiOperation(value = "设备检定附件分页列表")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "equipmentId", value = "设备表id", paramType = "query", dataType = "Integer")
})
@GetMapping("/getTestPage")
public BaseResponse getTestPage(PageQuery pageQuery, Integer equipmentId) {
try {
return equipmentService.getTestPage(pageQuery, equipmentId);
} catch (Exception e) {
log.debug("设备检定分页列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}
@ApiOperation("设备列表导出") @ApiOperation("设备列表导出")
@PostMapping("/export") @PostMapping("/export")
public void export(String brand, Integer supplierId, String name, String fileName, HttpServletResponse response) { public void export(String brand, Integer supplierId, String name, String fileName, HttpServletResponse response) {
...@@ -149,19 +163,6 @@ public class EquipmentController { ...@@ -149,19 +163,6 @@ public class EquipmentController {
return BaseResponse.errorMsg("失败!"); return BaseResponse.errorMsg("失败!");
} }
/* @ApiOperation(value = "设备检定分页列表")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "equipmentId", value = "设备表id", paramType = "query", dataType = "Integer")
})
@GetMapping("/getTestPage")
public BaseResponse getTestPage(PageQuery pageQuery, Integer equipmentId) {
try {
return equipmentService.getTestPage(pageQuery, equipmentId);
} catch (Exception e) {
log.debug("设备检定分页列表{}", e);
}
return BaseResponse.errorMsg("失败!");
}*/
/* /*
@ApiOperation(value = "设备检定详情") @ApiOperation(value = "设备检定详情")
......
package cn.wise.sc.cement.business.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author ztw
* @since 2020-10-13
*/
@RestController
@RequestMapping("/business/sys-user-message")
public class SysUserMessageController {
}
package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author ztw
* @since 2020-10-13
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SysUserMessage implements Serializable {
private static final long serialVersionUID=1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 接收人id
*/
private Integer userId;
/**
* 接收信息
*/
private String message;
/**
* 相关内容(委托表id)
*/
private Integer appId;
/**
* 是否查看(0:否,1:是)
*/
private Integer isCheck;
/**
* 消息类型(1委托管理)
*/
private Integer messageType;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 是否处理(0:未处理,1:已处理)
*/
private Integer isDeal;
public interface MessageType {
int ENTRUST = 1;
}
}
package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.SysUserMessage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author ztw
* @since 2020-10-13
*/
public interface SysUserMessageMapper extends BaseMapper<SysUserMessage> {
List<SysUserMessage> getNoCheck(@Param(value = "userId") Integer userId,
@Param(value = "appId") Integer appId,
@Param(value = "messageType") Integer messageType);
List<SysUserMessage> getNoDeal(@Param(value = "userId") Integer userId,
@Param(value = "appId") Integer appId,
@Param(value = "messageType") Integer messageType);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wise.sc.cement.business.mapper.SysUserMessageMapper">
<!-- 未查看消息 -->
<select id="getNoCheck" resultType="cn.wise.sc.cement.business.entity.SysUserMessage" >
select *
FROM sys_user_message rum
where rum.is_check=0
<if test="userId != null and userId !=''">
and rum.user_id = #{userId}
</if>
<if test="appId != null and appId !=''">
and rum.app_id = #{appId}
</if>
<if test="messageType != null and messageType !=''">
and rum.message_type = #{messageType}
</if>
</select>
<!-- 未处理消息记录 -->
<select id="getNoDeal" resultType="cn.wise.sc.cement.business.entity.SysUserMessage" >
select *
FROM sys_user_message rum
where rum.is_deal=0
<if test="userId != null and userId !=''">
and rum.user_id = #{userId}
</if>
<if test="appId != null and appId !=''">
and rum.app_id = #{appId}
</if>
<if test="messageType != null and messageType !=''">
and rum.message_type = #{messageType}
</if>
</select>
</mapper>
package cn.wise.sc.cement.business.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Message implements Serializable {
private static final long serialVersionUID = 8508882582940066562L;
@ApiModelProperty("接收人id")
private String userId;
@ApiModelProperty("接收信息")
private String message;
@ApiModelProperty("消息类型: 1个人报销,2对公收付款")
private Integer messageType;
@ApiModelProperty("相关对象表id(个人报销表或对公收付款表)")
private Integer appId;
@ApiModelProperty("发送时间")
private LocalDateTime createTime;
}
package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.SysUserMessage;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.util.WebSocketServer;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.beans.factory.annotation.Autowired;
/**
* <p>
* 服务类
* </p>
*
* @author ztw
* @since 2020-10-13
*/
public interface ISysUserMessageService extends IService<SysUserMessage> {
BaseResponse<String> sendMessage(Integer userId, String message, Integer appId, Integer messageType);
BaseResponse<String> checkMessage(Integer userId, Integer appId, Integer messageType);
BaseResponse<String> dealMessage(Integer userId, Integer appId, Integer messageType);
}
...@@ -105,6 +105,8 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -105,6 +105,8 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
private EquipmentUseMapper equipmentUseMapper; private EquipmentUseMapper equipmentUseMapper;
@Resource @Resource
private ClientMapper clientMapper; private ClientMapper clientMapper;
@Autowired
private ISysUserMessageService userMessageService;
/** /**
* 委托分页 * 委托分页
...@@ -230,8 +232,8 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -230,8 +232,8 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
Entrust entrust = new Entrust(); Entrust entrust = new Entrust();
BeanUtils.copyProperties(query, entrust); BeanUtils.copyProperties(query, entrust);
//生成委托编号 //生成委托编号
String entrustCode = commonService.createNo("WT", entrustMapper.counts()); // String entrustCode = commonService.createNo("WT", entrustMapper.counts());
entrust.setEntrustCode(entrustCode) entrust.setEntrustCode(null)
.setUserId(loginUser.getId()) .setUserId(loginUser.getId())
.setStatus(0) .setStatus(0)
.setIsDelete(1) .setIsDelete(1)
...@@ -265,6 +267,15 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -265,6 +267,15 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
sampleTmpService.saveBatch(sampleTmpList); sampleTmpService.saveBatch(sampleTmpList);
} }
logsService.saveLog(SysLogs.ObjType.ENTRUST_LOG, entrust.getId(), "提交了委托单", null); logsService.saveLog(SysLogs.ObjType.ENTRUST_LOG, entrust.getId(), "提交了委托单", null);
//消息推送
Integer approvalId = sysApprovalMapper.getApprovalId("委托评审");
if (approvalId == null) {
return BaseResponse.errorMsg("委托评审信息错误");
}
BaseResponse wrapper = userMessageService.sendMessage(approvalId, "您有一条新的委托单申请等待评审",entrust.getId(), SysUserMessage.MessageType.ENTRUST);
if(wrapper.getCode() != 200){
return wrapper;
}
return BaseResponse.okData(entrust); return BaseResponse.okData(entrust);
} }
...@@ -358,6 +369,11 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -358,6 +369,11 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
} }
entrustVo.setSampleTmpList(sampleTmpVoList); entrustVo.setSampleTmpList(sampleTmpVoList);
} }
LoginUser loginUser = userService.getLoginUser();
if (loginUser == null) {
return BaseResponse.errorMsg("请登录账号");
}
userMessageService.checkMessage(loginUser.getId(), id, SysUserMessage.MessageType.ENTRUST);
return BaseResponse.okData(entrustVo); return BaseResponse.okData(entrustVo);
} }
...@@ -684,6 +700,9 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -684,6 +700,9 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
redisUtil.setString("maxCementCode", maxCementCode); redisUtil.setString("maxCementCode", maxCementCode);
} }
entrust.setStatus(1).setProjectType(query.getProjectType()); entrust.setStatus(1).setProjectType(query.getProjectType());
//审批后生成委托编号
String entrustCode = entrust.getProjectCode()+"_"+query.getSampleList().get(0).getCementCode();
entrust.setEntrustCode(entrustCode);
logsService.saveLog(SysLogs.ObjType.ENTRUST_LOG, entrust.getId(), "修改评审状态为“通过”", null); logsService.saveLog(SysLogs.ObjType.ENTRUST_LOG, entrust.getId(), "修改评审状态为“通过”", null);
} else if (query.getIsAgree() == 2) { //驳回 } else if (query.getIsAgree() == 2) { //驳回
entrust.setStatus(2); entrust.setStatus(2);
...@@ -701,7 +720,8 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -701,7 +720,8 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
.setRemark(null); .setRemark(null);
approvalMapper.insert(entrustApproval); approvalMapper.insert(entrustApproval);
entrustMapper.updateById(entrust); entrustMapper.updateById(entrust);
//处理消息
userMessageService.dealMessage(loginUser.getId(), entrust.getId(), SysUserMessage.MessageType.ENTRUST);
return BaseResponse.okMsg("审批完成"); return BaseResponse.okMsg("审批完成");
} }
...@@ -764,6 +784,11 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -764,6 +784,11 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
} }
sampleHandleEnclosureService.saveBatch(sampleHandleEnclosureList); sampleHandleEnclosureService.saveBatch(sampleHandleEnclosureList);
} }
//消息推送
BaseResponse wrapper = userMessageService.sendMessage(sampleHandle.getUserId(), "您有一条样品处理信息等待处理",entrust.getId(), SysUserMessage.MessageType.ENTRUST);
if(wrapper.getCode() != 200){
return wrapper;
}
} }
} }
//该委托单下的样品改为已领用状态 //该委托单下的样品改为已领用状态
...@@ -781,6 +806,10 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -781,6 +806,10 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
.setStatus(3); .setStatus(3);
entrustMapper.updateById(entrust); entrustMapper.updateById(entrust);
logsService.saveLog(SysLogs.ObjType.ENTRUST_LOG, entrust.getId(), "发送样品处理任务", null); logsService.saveLog(SysLogs.ObjType.ENTRUST_LOG, entrust.getId(), "发送样品处理任务", null);
return BaseResponse.okMsg("已发送样品处理任务"); return BaseResponse.okMsg("已发送样品处理任务");
} }
...@@ -930,6 +959,8 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -930,6 +959,8 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
return BaseResponse.errorMsg("样品信息错误"); return BaseResponse.errorMsg("样品信息错误");
} }
logsService.saveLog(SysLogs.ObjType.ENTRUST_LOG, sample.getEntrustId(), "接受样品处理任务", null); logsService.saveLog(SysLogs.ObjType.ENTRUST_LOG, sample.getEntrustId(), "接受样品处理任务", null);
//处理消息
userMessageService.dealMessage(loginUser.getId(), sample.getEntrustId(), SysUserMessage.MessageType.ENTRUST);
return BaseResponse.okMsg("已接受样品处理任务"); return BaseResponse.okMsg("已接受样品处理任务");
} }
...@@ -1124,6 +1155,11 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -1124,6 +1155,11 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
.setStatus(0) .setStatus(0)
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
sampleDistributionList.add(sampleDistribution); sampleDistributionList.add(sampleDistribution);
//消息推送
BaseResponse wrapper = userMessageService.sendMessage(distributionTeamQuery.getUserId(), "您有一条样品检测信息等待接受",entrust.getId(), SysUserMessage.MessageType.ENTRUST);
if(wrapper.getCode() != 200){
return wrapper;
}
} }
} }
Sample sample = sampleService.getById(distributionQuery.getSampleId()); Sample sample = sampleService.getById(distributionQuery.getSampleId());
...@@ -1297,6 +1333,8 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl ...@@ -1297,6 +1333,8 @@ public class EntrustServiceImpl extends ServiceImpl<EntrustMapper, Entrust> impl
return BaseResponse.errorMsg("样品信息错误"); return BaseResponse.errorMsg("样品信息错误");
} }
logsService.saveLog(SysLogs.ObjType.ENTRUST_LOG, sample.getEntrustId(), "接受检测项目任务", null); logsService.saveLog(SysLogs.ObjType.ENTRUST_LOG, sample.getEntrustId(), "接受检测项目任务", null);
//处理消息
userMessageService.dealMessage(loginUser.getId(), sample.getEntrustId(), SysUserMessage.MessageType.ENTRUST);
return BaseResponse.okMsg("已接受检测项目任务"); return BaseResponse.okMsg("已接受检测项目任务");
} }
......
...@@ -278,6 +278,9 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment ...@@ -278,6 +278,9 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment
params.put("equipmentId", equipmentId); params.put("equipmentId", equipmentId);
Page<EquipmentTestVo> page = new Page<>(pageQuery.getPageNo(), pageQuery.getPageSize()); Page<EquipmentTestVo> page = new Page<>(pageQuery.getPageNo(), pageQuery.getPageSize());
IPage<EquipmentTestVo> pages = testMapper.getPage(page,params); IPage<EquipmentTestVo> pages = testMapper.getPage(page,params);
List<EquipmentTestVo> list = page.getRecords(); List<EquipmentTestVo> list = page.getRecords();
if(list != null && list.size()>0){ if(list != null && list.size()>0){
for(EquipmentTestVo equipmentTestVo : list){ for(EquipmentTestVo equipmentTestVo : list){
......
package cn.wise.sc.cement.business.service.impl;
import cn.wise.sc.cement.business.entity.SysUser;
import cn.wise.sc.cement.business.entity.SysUserMessage;
import cn.wise.sc.cement.business.mapper.SysUserMessageMapper;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.Message;
import cn.wise.sc.cement.business.service.ISysUserMessageService;
import cn.wise.sc.cement.business.service.ISysUserService;
import cn.wise.sc.cement.business.util.WebSocketServer;
import cn.wise.sc.cement.business.wrapper.WrapMapper;
import cn.wise.sc.cement.business.wrapper.Wrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author ztw
* @since 2020-10-13
*/
@Service
public class SysUserMessageServiceImpl extends ServiceImpl<SysUserMessageMapper, SysUserMessage> implements ISysUserMessageService {
@Resource
private SysUserMessageMapper userMessageMapper;
@Resource
protected HttpServletResponse response;
@Autowired
protected HttpServletRequest request;
@Autowired
WebSocketServer webSocketServer;
/**
* 发送消息
* @param userId
* @param message
* @param appId
* @param messageType
* @return
*/
@Override
public BaseResponse<String> sendMessage(Integer userId, String message, Integer appId, Integer messageType) {
int ret = 0;
SysUserMessage userMessage = new SysUserMessage();
userMessage.setUserId(userId);
userMessage.setMessage(message);
userMessage.setAppId(appId);
userMessage.setIsCheck(0);
userMessage.setMessageType(messageType);
userMessage.setCreateTime(LocalDateTime.now());
userMessage.setUpdateTime(userMessage.getCreateTime());
userMessage.setIsDeal(0);
ret = this.userMessageMapper.insert(userMessage);
if(ret == 0 ){
return BaseResponse.errorMsg("消息推送失败");
}
String dealer = String.valueOf(userId);
Message m =Message.builder().userId(dealer).message(message).messageType(messageType).appId(appId)
.createTime(userMessage.getCreateTime()).build();
webSocketServer.sendTo(m);
/*SysUser sysUser = userService.getById(userId);
if(sysUser != null && StringUtils.isNotBlank(sysUser.getPhone())){
SMSUtil.sendCode(sysUser.getPhone(), message);
}*/
return BaseResponse.okData("成功");
}
/**
* 查看消息
* @param userId
* @param appId
* @param messageType
* @return
*/
@Override
public BaseResponse<String> checkMessage(Integer userId, Integer appId, Integer messageType) {
int ret = 0;
List<SysUserMessage> list = this.userMessageMapper.getNoCheck(userId, appId, messageType);
if(list != null && list.size()>0){
for(SysUserMessage um : list){
um.setIsCheck(1);
ret = this.userMessageMapper.updateById(um);
if (ret == 0) {
return BaseResponse.errorMsg("查看消息记录更新失败");
}
}
}
return BaseResponse.okData("成功");
}
/**
* 处理消息
* @param userId
* @param appId
* @param messageType
* @return
*/
@Override
public BaseResponse<String> dealMessage(Integer userId, Integer appId, Integer messageType) {
int ret = 0;
List<SysUserMessage> list = this.userMessageMapper.getNoDeal(userId, appId, messageType);
if(list != null && list.size()>0){
for(SysUserMessage um : list){
um.setIsCheck(1);
um.setIsDeal(1);
ret = this.userMessageMapper.updateById(um);
if (ret == 0) {
return BaseResponse.errorMsg("处理消息记录更新失败");
}
}
}
return BaseResponse.okData("成功");
}
}
...@@ -113,7 +113,8 @@ public class TeamServiceImpl extends ServiceImpl<TeamMapper, Team> implements IT ...@@ -113,7 +113,8 @@ public class TeamServiceImpl extends ServiceImpl<TeamMapper, Team> implements IT
} }
update.setGroupId(query.getGroupId()) update.setGroupId(query.getGroupId())
.setMethodId(query.getMethodId()) .setMethodId(query.getMethodId())
.setName(query.getName()); .setName(query.getName())
.setIsDisplay(query.getIsDisplay());
teamMapper.updateById(update); teamMapper.updateById(update);
return BaseResponse.okData(update); return BaseResponse.okData(update);
} }
......
package cn.wise.sc.cement.business.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* 序列化对象工具类,用于保存和读取redis数据使用
* Function:
* Date: 2018年9月12日10:18:56
*/
public class SerializeUtil {
private static Logger log = LoggerFactory.getLogger(SerializeUtil.class);
/**
* 序列化对象
* @param object
* @return
*/
public static byte[] serialize(Object object) {
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
byte[] bytes = null;
try {
// 序列化
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
bytes = baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (oos != null) {
oos.close();
}
if (baos != null) {
baos.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return bytes;
}
/**
* 反序列化对象
* @param bytes
* @return
*/
public static Object unserialize(byte[] bytes) {
Object obj = null;
ByteArrayInputStream bais = null;
try {
// 反序列化
bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
obj = ois.readObject();
ois.close();
bais.close();
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
/**
* 关闭的数据源或目标。调用 close()方法可释放对象保存的资源(如打开文件)
* 关闭此流并释放与此流关联的所有系统资源。如果已经关闭该流,则调用此方法无效。
* @param closeable
*/
public static void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (Exception e) {
log.info("Unable to close %s", closeable, e);
}
}
}
/**
* 列表序列化(用于Redis整存整取)
* @param value
* @return
*/
public static <T> byte[] serialize(List<T> value) {
if (value == null) {
throw new NullPointerException("Can't serialize null");
}
byte[] rv=null;
ByteArrayOutputStream bos = null;
ObjectOutputStream os = null;
try {
bos = new ByteArrayOutputStream();
os = new ObjectOutputStream(bos);
for(T obj : value){
os.writeObject(obj);
}
os.writeObject(null);
os.close();
bos.close();
rv = bos.toByteArray();
} catch (IOException e) {
throw new IllegalArgumentException("Non-serializable object", e);
} finally {
close(os);
close(bos);
}
return rv;
}
/**
* 反序列化列表(用于Redis整存整取)
* @param in
* @return
*/
public static <T> List<T> unserializeForList(byte[] in) {
List<T> list = new ArrayList<T>();
ByteArrayInputStream bis = null;
ObjectInputStream is = null;
try {
if(in != null) {
bis=new ByteArrayInputStream(in);
is=new ObjectInputStream(bis);
while (true) {
T obj = (T) is.readObject();
if(obj == null){
break;
}else{
list.add(obj);
}
}
is.close();
bis.close();
}
} catch (IOException e) {
log.warn("Caught IOException decoding %d bytes of data",
in == null ? 0 : in.length, e);
} catch (ClassNotFoundException e) {
log.warn("Caught CNFE decoding %d bytes of data",
in == null ? 0 : in.length, e);
} finally {
close(is);
close(bis);
}
return list;
}
}
package cn.wise.sc.cement.business.util;
import cn.wise.sc.cement.business.model.Message;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@ServerEndpoint("/test-websocket/{sid}")
@Component
@Slf4j
public class WebSocketServer {
/**
* 用于存放所有在线客户端
*/
private static Map<String, Session> clients = new ConcurrentHashMap<>();
// private static Map<String, List<Message>> messages = new ConcurrentHashMap<>();
/*@Value("${websocket.socketKey}")
private String SOCKET_KEY;
@Value("${websocket.host}")
private String host;
@Value("${websocket.port}")
private int port;
@Value("${websocket.timeout}")
private int timeout;
@Value("${websocket.clientDB}")
private long clientDB;
@Value("${websocket.selectDB}")
private int selectDB;
@Value("${websocket.password}")
private String password;*/
private static final String SOCKET_KEY = "socketkey";
private static final String host = "localhost";
private static final int port = 6379;
private static final int timeout = 100000;
private static final long clientDB = 2;
private static final int selectDB = 2;
private static final String password = "Wise_@123456";
@OnOpen
public void onOpen(Session session,@PathParam("sid") String sid) {
log.info("有新的客户端上线: {}", session.getId());
clients.put(sid, session);
Jedis jedis = new Jedis(host, port, timeout);
// jedis.auth(password);
jedis.select(selectDB);
// jedis.getClient().setDb(clientDB);
List<Message> messageList = SerializeUtil.unserializeForList(jedis.get((SOCKET_KEY+sid).getBytes()));
if (session != null) {
for(int i=0; i<messageList.size(); i++){
Message message = messageList.get(i);
try {
JSONObject json = (JSONObject)JSONObject.toJSON(message);
String msg = json.toJSONString();
session.getBasicRemote().sendText(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
jedis.del((SOCKET_KEY+sid).getBytes());
}
}
@OnClose
public void onClose(Session session,@PathParam("sid") String sid) {
String sessionId = session.getId();
log.info("有客户端离线: {}", sessionId);
clients.remove(sid);
}
@OnError
public void onError(Session session, Throwable throwable,@PathParam("sid") String sid) {
throwable.printStackTrace();
if (clients.get(sid) != null) {
clients.remove(sid);
}
}
@OnMessage
public void onMessage(String message) {
log.info("收到客户端发来的消息: {}", message);
this.sendTo(JSON.parseObject(message, Message.class));
}
/**
* 发送消息
*
* @param message 消息对象
*/
public void sendTo(Message message) {
if (clients.get(message.getUserId()) == null) {
Jedis jedis = new Jedis(host, port, timeout);
// jedis.auth(password);
jedis.select(selectDB);
// jedis.getClient().setDb(clientDB);
List<Message> messageList = SerializeUtil.unserializeForList(jedis.get((SOCKET_KEY+message.getUserId()).getBytes()));
messageList.add(message);
jedis.set((SOCKET_KEY+message.getUserId()).getBytes(), SerializeUtil.serialize(messageList));
}else{
Session s = clients.get(message.getUserId());
if (s != null) {
try {
JSONObject json = (JSONObject)JSONObject.toJSON(message);
String msg = json.toJSONString();
s.getBasicRemote().sendText(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment