新增通知历史列表,在线发送通知功能,处理通知发送逻辑,增加发送状态

This commit is contained in:
wanggeng 2021-10-22 18:16:21 +08:00
parent d1bd705350
commit aaad74eb29
14 changed files with 1105 additions and 90 deletions

View File

@ -1,10 +1,12 @@
package ink.wgink.module.instantmessage.controller.api;
import ink.wgink.annotation.CheckRequestBodyAnnotation;
import ink.wgink.common.base.DefaultBaseController;
import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.module.instantmessage.pojo.bos.NoticeBO;
import ink.wgink.module.instantmessage.pojo.bos.NoticeTargetBO;
import ink.wgink.module.instantmessage.pojo.vos.MessageVO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeSendVO;
import ink.wgink.module.instantmessage.service.IMessageService;
import ink.wgink.pojo.result.ErrorResult;
import ink.wgink.pojo.result.SuccessResult;
@ -27,11 +29,20 @@ import java.util.Arrays;
@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "消息接口")
@RestController
@RequestMapping(ISystemConstant.API_PREFIX + "/websocket/message")
public class WebSocketMessageController {
public class WebSocketMessageController extends DefaultBaseController {
@Autowired
private IMessageService messageService;
@ApiOperation(value = "通知消息", notes = "通知消息接口")
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@PostMapping("notice")
@CheckRequestBodyAnnotation
public SuccessResult notice(@RequestBody NoticeSendVO noticeSendVO) throws Exception {
messageService.notice(noticeSendVO);
return new SuccessResult();
}
@ApiOperation(value = "通知消息", notes = "通知消息接口")
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@PostMapping("notice/{clientName}")

View File

@ -0,0 +1,73 @@
package ink.wgink.module.instantmessage.controller.api;
import ink.wgink.annotation.CheckRequestBodyAnnotation;
import ink.wgink.common.base.DefaultBaseController;
import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.module.instantmessage.pojo.dtos.NoticeDTO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeSendVO;
import ink.wgink.module.instantmessage.service.INoticeService;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.ErrorResult;
import ink.wgink.pojo.result.SuccessResult;
import ink.wgink.pojo.result.SuccessResultList;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: MessageController
* @Description: 消息
* @Author: wanggeng
* @Date: 2021/1/14 3:25 下午
* @Version: 1.0
*/
@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "消息接口")
@RestController
@RequestMapping(ISystemConstant.API_PREFIX + "/websocket/notice")
public class WebSocketNoticeController extends DefaultBaseController {
@Autowired
private INoticeService noticeService;
@ApiOperation(value = "删除通知", notes = "删除通知接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "noticeIds", value = "通知ID列表", paramType = "path"),
})
@DeleteMapping("remove/{noticeIds}")
public SuccessResult delete(@PathVariable("noticeIds") String noticeIds) {
noticeService.remove(Arrays.asList(noticeIds.split("\\_")));
return new SuccessResult();
}
@ApiOperation(value = "通知列表", notes = "通知列表接口")
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("list")
public List<NoticeDTO> list() {
Map<String, Object> params = requestParams();
return noticeService.list(params);
}
@ApiOperation(value = "通知分页列表", notes = "通知分页列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"),
@ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"),
@ApiImplicitParam(name = "keywords", value = "关键字", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("listpage")
public SuccessResultList<List<NoticeDTO>> listPage(ListPage page) {
Map<String, Object> params = requestParams();
page.setParams(params);
return noticeService.listPage(page);
}
}

View File

@ -0,0 +1,33 @@
package ink.wgink.module.instantmessage.controller.route;
import ink.wgink.common.base.DefaultBaseController;
import ink.wgink.interfaces.consts.ISystemConstant;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
/**
* @ClassName: NoticeController
* @Description: 即使消息通知路由
* @Author: CodeFactory
* @Date: 2021-10-22 11:04:57
* @Version: 3.0
**/
@Api(tags = ISystemConstant.ROUTE_TAGS_PREFIX + "即使消息通知路由")
@RestController
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/websocket/notice")
public class WebSocketNoticeRouteController extends DefaultBaseController {
@GetMapping("send")
public ModelAndView send() {
return new ModelAndView("notice/send");
}
@GetMapping("list")
public ModelAndView list() {
return new ModelAndView("notice/list");
}
}

View File

@ -5,6 +5,7 @@ import ink.wgink.exceptions.SaveException;
import ink.wgink.exceptions.SearchException;
import ink.wgink.exceptions.UpdateException;
import ink.wgink.interfaces.init.IInitBaseTable;
import ink.wgink.module.instantmessage.pojo.dtos.NoticeDTO;
import ink.wgink.module.instantmessage.pojo.pos.NoticePO;
import org.springframework.stereotype.Repository;
@ -101,4 +102,21 @@ public interface INoticeDao extends IInitBaseTable {
* @throws RemoveException
*/
void delete(Map<String, Object> params) throws RemoveException;
/**
* 删除
*
* @param params
* @throws RemoveException
*/
void remove(Map<String, Object> params) throws RemoveException;
/**
* 通知列表
*
* @param params
* @return
* @throws SearchException
*/
List<NoticeDTO> list(Map<String, Object> params) throws SearchException;
}

View File

@ -0,0 +1,166 @@
package ink.wgink.module.instantmessage.pojo.dtos;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @ClassName: NoticeDTO
* @Description: 通知
* @Author: wanggeng
* @Date: 2021/10/22 11:18 上午
* @Version: 1.0
*/
@ApiModel
public class NoticeDTO {
@ApiModelProperty(name = "noticeId", value = "通知标题")
private String noticeId;
@ApiModelProperty(name = "noticeTitle", value = "通知内容")
private String noticeTitle;
@ApiModelProperty(name = "noticeMsg", value = "通知内容")
private String noticeMsg;
@ApiModelProperty(name = "noticeTarget", value = "通知触发目标")
private String noticeTarget;
@ApiModelProperty(name = "noticeSystem", value = "通知业务系统")
private String noticeSystem;
@ApiModelProperty(name = "noticeModule", value = "通知业务模块")
private String noticeModule;
@ApiModelProperty(name = "noticeMenu", value = "通知业务菜单")
private String noticeMenu;
@ApiModelProperty(name = "noticeServiceId", value = "通知业务ID")
private String noticeServiceId;
@ApiModelProperty(name = "userId", value = "通知人")
private String userId;
@ApiModelProperty(name = "userName", value = "通知人昵称")
private String userName;
@ApiModelProperty(name = "userUsername", value = "通知人用户名")
private String userUsername;
@ApiModelProperty(name = "isSend", value = "是否发送")
private Integer isSend;
@ApiModelProperty(name = "isHandle", value = "是否处理")
private Integer isHandle;
@ApiModelProperty(name = "gmtCreate", value = "创建时间")
private String gmtCreate;
@ApiModelProperty(name = "gmtModified", value = "修改时间")
private String gmtModified;
public String getNoticeId() {
return noticeId == null ? "" : noticeId.trim();
}
public void setNoticeId(String noticeId) {
this.noticeId = noticeId;
}
public String getNoticeTitle() {
return noticeTitle == null ? "" : noticeTitle.trim();
}
public void setNoticeTitle(String noticeTitle) {
this.noticeTitle = noticeTitle;
}
public String getNoticeMsg() {
return noticeMsg == null ? "" : noticeMsg.trim();
}
public void setNoticeMsg(String noticeMsg) {
this.noticeMsg = noticeMsg;
}
public String getNoticeTarget() {
return noticeTarget == null ? "" : noticeTarget.trim();
}
public void setNoticeTarget(String noticeTarget) {
this.noticeTarget = noticeTarget;
}
public String getNoticeSystem() {
return noticeSystem == null ? "" : noticeSystem.trim();
}
public void setNoticeSystem(String noticeSystem) {
this.noticeSystem = noticeSystem;
}
public String getNoticeModule() {
return noticeModule == null ? "" : noticeModule.trim();
}
public void setNoticeModule(String noticeModule) {
this.noticeModule = noticeModule;
}
public String getNoticeMenu() {
return noticeMenu == null ? "" : noticeMenu.trim();
}
public void setNoticeMenu(String noticeMenu) {
this.noticeMenu = noticeMenu;
}
public String getNoticeServiceId() {
return noticeServiceId == null ? "" : noticeServiceId.trim();
}
public void setNoticeServiceId(String noticeServiceId) {
this.noticeServiceId = noticeServiceId;
}
public String getUserId() {
return userId == null ? "" : userId.trim();
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName == null ? "" : userName.trim();
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserUsername() {
return userUsername == null ? "" : userUsername.trim();
}
public void setUserUsername(String userUsername) {
this.userUsername = userUsername;
}
public Integer getIsSend() {
return isSend == null ? 0 : isSend;
}
public void setIsSend(Integer isSend) {
this.isSend = isSend;
}
public Integer getIsHandle() {
return isHandle == null ? 0 : isHandle;
}
public void setIsHandle(Integer isHandle) {
this.isHandle = isHandle;
}
public String getGmtCreate() {
return gmtCreate == null ? "" : gmtCreate.trim();
}
public void setGmtCreate(String gmtCreate) {
this.gmtCreate = gmtCreate;
}
public String getGmtModified() {
return gmtModified == null ? "" : gmtModified.trim();
}
public void setGmtModified(String gmtModified) {
this.gmtModified = gmtModified;
}
}

View File

@ -1,5 +1,7 @@
package ink.wgink.module.instantmessage.pojo.pos;
import java.io.Serializable;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
@ -10,8 +12,9 @@ package ink.wgink.module.instantmessage.pojo.pos;
* @Date: 2021/3/29 4:39 下午
* @Version: 1.0
*/
public class NoticePO {
public class NoticePO implements Serializable {
private static final long serialVersionUID = -7182904168489429255L;
private Long id;
private String noticeId;
private String noticeTitle;
@ -22,6 +25,9 @@ public class NoticePO {
private String noticeMenu;
private String noticeServiceId;
private String userId;
private String userName;
private String userUsername;
private Integer isSend;
private Integer isHandle;
private String gmtCreate;
private String creator;
@ -109,6 +115,30 @@ public class NoticePO {
this.userId = userId;
}
public String getUserName() {
return userName == null ? "" : userName.trim();
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserUsername() {
return userUsername == null ? "" : userUsername.trim();
}
public void setUserUsername(String userUsername) {
this.userUsername = userUsername;
}
public Integer getIsSend() {
return isSend == null ? 0 : isSend;
}
public void setIsSend(Integer isSend) {
this.isSend = isSend;
}
public Integer getIsHandle() {
return isHandle == null ? 0 : isHandle;
}
@ -157,42 +187,5 @@ public class NoticePO {
this.isDelete = isDelete;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"id\":")
.append(id);
sb.append(",\"noticeId\":\"")
.append(noticeId).append('\"');
sb.append(",\"noticeTitle\":\"")
.append(noticeTitle).append('\"');
sb.append(",\"noticeMsg\":\"")
.append(noticeMsg).append('\"');
sb.append(",\"noticeTarget\":\"")
.append(noticeTarget).append('\"');
sb.append(",\"noticeSystem\":\"")
.append(noticeSystem).append('\"');
sb.append(",\"noticeModule\":\"")
.append(noticeModule).append('\"');
sb.append(",\"noticeMenu\":\"")
.append(noticeMenu).append('\"');
sb.append(",\"noticeServiceId\":\"")
.append(noticeServiceId).append('\"');
sb.append(",\"userId\":\"")
.append(userId).append('\"');
sb.append(",\"isHandle\":")
.append(isHandle);
sb.append(",\"gmtCreate\":\"")
.append(gmtCreate).append('\"');
sb.append(",\"creator\":\"")
.append(creator).append('\"');
sb.append(",\"gmtModified\":\"")
.append(gmtModified).append('\"');
sb.append(",\"modifier\":\"")
.append(modifier).append('\"');
sb.append(",\"isDelete\":")
.append(isDelete);
sb.append('}');
return sb.toString();
}
}

View File

@ -0,0 +1,50 @@
package ink.wgink.module.instantmessage.pojo.vos;
import ink.wgink.annotation.CheckEmptyAnnotation;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @ClassName: NoticeSendVO
* @Description: 通知发送
* @Author: wanggeng
* @Date: 2021/10/22 12:43 下午
* @Version: 1.0
*/
@ApiModel
public class NoticeSendVO {
@ApiModelProperty(name = "noticeTitle", value = "通知标题")
@CheckEmptyAnnotation(name = "通知标题")
private String noticeTitle;
@ApiModelProperty(name = "noticeMsg", value = "通知内容")
@CheckEmptyAnnotation(name = "通知内容")
private String noticeMsg;
@ApiModelProperty(name = "noticeUserIds", value = "通知用户ID列表")
@CheckEmptyAnnotation(name = "通知用户ID列表")
private String noticeUserIds;
public String getNoticeTitle() {
return noticeTitle == null ? "" : noticeTitle.trim();
}
public void setNoticeTitle(String noticeTitle) {
this.noticeTitle = noticeTitle;
}
public String getNoticeMsg() {
return noticeMsg == null ? "" : noticeMsg.trim();
}
public void setNoticeMsg(String noticeMsg) {
this.noticeMsg = noticeMsg;
}
public String getNoticeUserIds() {
return noticeUserIds == null ? "" : noticeUserIds.trim();
}
public void setNoticeUserIds(String noticeUserIds) {
this.noticeUserIds = noticeUserIds;
}
}

View File

@ -2,6 +2,7 @@ package ink.wgink.module.instantmessage.service;
import ink.wgink.module.instantmessage.pojo.bos.NoticeBO;
import ink.wgink.module.instantmessage.pojo.bos.NoticeTargetBO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeSendVO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeVO;
import java.util.List;
@ -18,6 +19,13 @@ import java.util.List;
*/
public interface IMessageService {
/**
* 通知
*
* @param noticeSendVO
*/
void notice(NoticeSendVO noticeSendVO) throws Exception;
/**
* 通知
*
@ -61,4 +69,5 @@ public interface IMessageService {
* @param serviceIds
*/
void delete(List<String> serviceIds);
}

View File

@ -1,10 +1,13 @@
package ink.wgink.module.instantmessage.service;
import ink.wgink.module.instantmessage.pojo.bos.NoticeBO;
import ink.wgink.module.instantmessage.pojo.bos.NoticeTargetBO;
import ink.wgink.module.instantmessage.pojo.dtos.NoticeDTO;
import ink.wgink.module.instantmessage.pojo.pos.NoticePO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeSendVO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeVO;
import ink.wgink.module.instantmessage.websocket.pojo.body.CountNeedToDealWithBody;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.dtos.user.UserDTO;
import ink.wgink.pojo.result.SuccessResultList;
import java.util.List;
import java.util.Map;
@ -24,10 +27,11 @@ public interface INoticeService {
/**
* 保存
*
* @param userId
* @param notice
* @param userDTO
* @param notice 通知内容
* @param isSend 是否发送
*/
void save(String userId, NoticeVO.Notice notice) throws Exception;
void save(UserDTO userDTO, NoticeVO.Notice notice, boolean isSend) throws Exception;
/**
* 更新已办状态
@ -161,6 +165,13 @@ public interface INoticeService {
*/
void deleteByServiceIds(List<String> serviceIds);
/**
* 删除通知
*
* @param noticeIds
*/
void remove(List<String> noticeIds);
/**
* 通知列表
*
@ -169,4 +180,27 @@ public interface INoticeService {
*/
List<NoticePO> listPO(List<String> serviceIds);
/**
* 通知列表
*
* @param params
* @return
*/
List<NoticeDTO> list(Map<String, Object> params);
/**
* 通知分页列表
*
* @param page
* @return
*/
SuccessResultList<List<NoticeDTO>> listPage(ListPage page);
/**
* 发送通知
*
* @param noticeSendVO
* @throws Exception
*/
void notice(NoticeSendVO noticeSendVO) throws Exception;
}

View File

@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.exceptions.SearchException;
import ink.wgink.interfaces.user.IUserBaseService;
import ink.wgink.module.instantmessage.pojo.bos.NoticeBO;
import ink.wgink.module.instantmessage.pojo.bos.NoticeTargetBO;
import ink.wgink.module.instantmessage.pojo.pos.NoticePO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeSendVO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeVO;
import ink.wgink.module.instantmessage.service.IMessageService;
import ink.wgink.module.instantmessage.service.INoticeService;
@ -16,17 +18,16 @@ import ink.wgink.module.instantmessage.websocket.pojo.WebSocketClientMessage;
import ink.wgink.module.instantmessage.websocket.pojo.WebSocketSession;
import ink.wgink.module.instantmessage.websocket.pojo.body.CountNeedToDealWithBody;
import ink.wgink.module.instantmessage.websocket.pojo.body.NoticeBody;
import ink.wgink.pojo.dtos.user.UserDTO;
import ink.wgink.util.BeanPropertyCheckUtil;
import ink.wgink.util.UUIDUtil;
import io.netty.channel.Channel;
import org.apache.commons.compress.utils.Sets;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@ -46,8 +47,27 @@ public class MessageServiceImpl extends DefaultBaseService implements IMessageSe
@Autowired
private INoticeService noticeService;
@Autowired
private IUserBaseService userBaseService;
private ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor(2);
@Override
public void notice(NoticeSendVO noticeSendVO) throws Exception {
NoticeVO.Notice notice = new NoticeVO.Notice();
notice.setTitle(noticeSendVO.getNoticeTitle());
notice.setMsg(noticeSendVO.getNoticeMsg());
notice.setServiceId("IM_NOTICE:" + UUIDUtil.getUUID());
notice.setSystem("IM");
notice.setUserIds(Arrays.asList(noticeSendVO.getNoticeUserIds().split("\\_")));
List<NoticeVO.Notice> notices = new ArrayList<>();
notices.add(notice);
NoticeVO noticeVO = new NoticeVO();
noticeVO.setNotices(notices);
// 发送消息
saveNotice(noticeVO, true);
}
@Override
public void notice(NoticeBO noticeBO) {
notice(null, noticeBO);
@ -99,7 +119,7 @@ public class MessageServiceImpl extends DefaultBaseService implements IMessageSe
scheduledExecutorService.schedule(() -> {
for (WebSocketSession webSocketSession : webSocketSessions) {
NoticeBody noticeBody = new NoticeBody(notice.getTitle(), notice.getMsg(), notice.getTarget());
WebSocketClientMessage webSocketClientMessage = new WebSocketClientMessage(MessageTypeEnum.NOTICE_TARGET_MESSAGE.getValue(),
WebSocketClientMessage webSocketClientMessage = new WebSocketClientMessage(MessageTypeEnum.NOTICE.getValue(),
true,
WebSocketChannelManager.FORM_SYSTEM,
webSocketSession.getUserId(),
@ -107,14 +127,30 @@ public class MessageServiceImpl extends DefaultBaseService implements IMessageSe
// 发送通知
WebSocketChannelManager.getInstance().sendText(webSocketSession.getChannel(), webSocketClientMessage);
}
}, 3, TimeUnit.SECONDS);
if (isSave) {
// 保存通知记录
List<String> userIds = notice.getUserIds();
for (String userId : userIds) {
noticeService.save(userId, notice);
if (isSave) {
try {
// 保存发送记录
List<String> userIds = notice.getUserIds();
List<UserDTO> userDTOs = userBaseService.listByUserIds(userIds);
for (UserDTO userDTO : userDTOs) {
boolean isOnline = false;
for (WebSocketSession webSocketSession : webSocketSessions) {
if (StringUtils.equals(userDTO.getUserId(), webSocketSession.getUserId())) {
isOnline = true;
break;
}
}
if (isOnline) {
noticeService.save(userDTO, notice, true);
} else {
noticeService.save(userDTO, notice, false);
}
}
} catch (Exception e) {
LOG.error(e.getMessage(), e);
}
}
}
}, 2, TimeUnit.SECONDS);
}
}

View File

@ -1,20 +1,26 @@
package ink.wgink.module.instantmessage.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.interfaces.user.IUserBaseService;
import ink.wgink.module.instantmessage.dao.INoticeDao;
import ink.wgink.module.instantmessage.pojo.dtos.NoticeDTO;
import ink.wgink.module.instantmessage.pojo.pos.NoticePO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeSendVO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeVO;
import ink.wgink.module.instantmessage.service.INoticeService;
import ink.wgink.module.instantmessage.websocket.pojo.body.CountNeedToDealWithBody;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.dtos.user.UserDTO;
import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.util.UUIDUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* When you feel like quitting. Think about why you started
@ -31,10 +37,12 @@ public class NoticeServiceImpl extends DefaultBaseService implements INoticeServ
@Autowired
private INoticeDao noticeDao;
@Autowired
private IUserBaseService userBaseService;
@Override
public void save(String userId, NoticeVO.Notice notice) throws Exception {
if (StringUtils.isBlank(userId)) {
public void save(UserDTO userDTO, NoticeVO.Notice notice, boolean isSend) throws Exception {
if (userDTO == null) {
return;
}
if (StringUtils.isBlank(notice.getSystem())) {
@ -43,14 +51,16 @@ public class NoticeServiceImpl extends DefaultBaseService implements INoticeServ
if (StringUtils.isBlank(notice.getServiceId())) {
return;
}
List<NoticePO> noticePOs = listPO(notice.getSystem(), notice.getModule(), notice.getMenu(), notice.getServiceId(), userId);
List<NoticePO> noticePOs = listPO(notice.getSystem(), notice.getModule(), notice.getMenu(), notice.getServiceId(), userDTO.getUserId());
if (!noticePOs.isEmpty()) {
LOG.debug("通知已经存在");
return;
}
Map<String, Object> params = getHashMap(16);
params.put("noticeId", UUIDUtil.getUUID());
params.put("userId", userId);
params.put("userId", userDTO.getUserId());
params.put("userName", userDTO.getUserName());
params.put("userUsername", userDTO.getUserUsername());
params.put("noticeTitle", notice.getTitle());
params.put("noticeMsg", notice.getMsg());
params.put("noticeTarget", notice.getTarget());
@ -58,6 +68,7 @@ public class NoticeServiceImpl extends DefaultBaseService implements INoticeServ
params.put("noticeModule", notice.getModule());
params.put("noticeMenu", notice.getMenu());
params.put("noticeServiceId", notice.getServiceId());
params.put("isSend", isSend ? 1 : 0);
params.put("isHandle", 0);
setSaveInfoByUserId(params, "1");
noticeDao.save(params);
@ -236,6 +247,14 @@ public class NoticeServiceImpl extends DefaultBaseService implements INoticeServ
noticeDao.delete(params);
}
@Override
public void remove(List<String> noticeIds) {
Map<String, Object> params = getHashMap(2);
params.put("noticeIds", noticeIds);
setUpdateInfo(params);
noticeDao.remove(params);
}
@Override
public List<NoticePO> listPO(List<String> serviceIds) {
Map<String, Object> params = getHashMap(2);
@ -243,6 +262,27 @@ public class NoticeServiceImpl extends DefaultBaseService implements INoticeServ
return listPO(params);
}
@Override
public List<NoticeDTO> list(Map<String, Object> params) {
return noticeDao.list(params);
}
@Override
public SuccessResultList<List<NoticeDTO>> listPage(ListPage page) {
PageHelper.startPage(page.getPage(), page.getRows());
List<NoticeDTO> noticeDTOs = list(page.getParams());
PageInfo<NoticeDTO> pageInfo = new PageInfo<>(noticeDTOs);
return new SuccessResultList<>(noticeDTOs, pageInfo.getPageNum(), pageInfo.getTotal());
}
@Override
public void notice(NoticeSendVO noticeSendVO) throws Exception {
String noticeUserIdsString = noticeSendVO.getNoticeUserIds();
List<String> noticeUserIds = Arrays.asList(noticeUserIdsString.split("\\_"));
NoticeVO.Notice notice = new NoticeVO.Notice();
notice.setUserIds(noticeUserIds);
}
/**
* 系统列表
*
@ -282,4 +322,31 @@ public class NoticeServiceImpl extends DefaultBaseService implements INoticeServ
return noticeDao.listMenus(params);
}
/**
* 设置用户
*
* @param noticeDTOs
*/
private void setUser(List<NoticeDTO> noticeDTOs) {
if (noticeDTOs.isEmpty()) {
return;
}
Set<String> userIdSet = new HashSet<>();
for (NoticeDTO noticeDTO : noticeDTOs) {
userIdSet.add(noticeDTO.getUserId());
}
List<UserDTO> userDTOs = userBaseService.listByUserIds(new ArrayList<>(userIdSet));
if (userDTOs.isEmpty()) {
return;
}
for (NoticeDTO noticeDTO : noticeDTOs) {
for (UserDTO userDTO : userDTOs) {
if (StringUtils.equals(noticeDTO.getUserId(), userDTO.getUserId())) {
noticeDTO.setUserName(userDTO.getUserName());
break;
}
}
}
}
}

View File

@ -15,6 +15,9 @@
<result column="notice_menu" property="noticeMenu"/>
<result column="notice_service_id" property="noticeServiceId"/>
<result column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
<result column="user_username" property="userUsername"/>
<result column="is_send" property="isSend"/>
<result column="is_handle" property="isHandle"/>
<result column="gmt_create" property="gmtCreate"/>
<result column="creator" property="creator"/>
@ -23,23 +26,46 @@
<result column="is_delete" property="isDelete"/>
</resultMap>
<resultMap id="noticeDTO" type="ink.wgink.module.instantmessage.pojo.dtos.NoticeDTO">
<id column="id" property="id"/>
<result column="notice_id" property="noticeId"/>
<result column="notice_title" property="noticeTitle"/>
<result column="notice_msg" property="noticeMsg"/>
<result column="notice_target" property="noticeTarget"/>
<result column="notice_system" property="noticeSystem"/>
<result column="notice_module" property="noticeModule"/>
<result column="notice_menu" property="noticeMenu"/>
<result column="notice_service_id" property="noticeServiceId"/>
<result column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
<result column="user_username" property="userUsername"/>
<result column="is_send" property="isSend"/>
<result column="is_handle" property="isHandle"/>
<result column="gmt_create" property="gmtCreate"/>
<result column="gmt_modified" property="gmtModified"/>
</resultMap>
<!-- 建表 -->
<update id="createTable">
CREATE TABLE IF NOT EXISTS `socket_notice` (
CREATE TABLE IF NOT EXISTS `im_notice` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`notice_id` char(36) DEFAULT NULL COMMENT '主键',
`notice_title` varchar(255) DEFAULT NULL COMMENT '通知标题',
`notice_msg` varchar(255) DEFAULT NULL COMMENT '通知内容',
`notice_msg` varchar(500) DEFAULT NULL COMMENT '通知内容',
`notice_target` varchar(255) DEFAULT NULL COMMENT '通知触发目标',
`notice_system` varchar(255) DEFAULT NULL COMMENT '通知业务系统',
`notice_module` varchar(255) DEFAULT NULL COMMENT '通知业务模块',
`notice_menu` varchar(255) DEFAULT NULL COMMENT '通知业务菜单',
`notice_service_id` varchar(255) DEFAULT NULL COMMENT '通知业务ID',
`user_id` char(36) DEFAULT NULL COMMENT '通知人',
`user_username` varchar(255) DEFAULT NULL COMMENT '用户名',
`user_name` varchar(255) DEFAULT NULL COMMENT '用户昵称',
`is_send` int(1) DEFAULT '0' COMMENT '是否发送',
`is_handle` int(1) DEFAULT '0' COMMENT '是否处理',
`gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
`creator` char(36) DEFAULT NULL COMMENT '创建人',
`gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',
`modifier` char(36) DEFAULT NULL COMMENT '修改人',
`gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
`creator` char(36) DEFAULT NULL COMMENT '创建人',
`gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',
`modifier` char(36) DEFAULT NULL COMMENT '修改人',
`is_delete` int(1) DEFAULT '0' COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `notice_id` (`notice_id`) USING BTREE,
@ -50,12 +76,12 @@
KEY `notice_service_id` (`notice_service_id`) USING BTREE,
KEY `user_id` (`user_id`) USING BTREE,
KEY `is_handle` (`is_handle`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='小程序用户';
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='小程序用户';
</update>
<!-- 保存 -->
<insert id="save" parameterType="map">
INSERT INTO socket_notice (
<insert id="save" parameterType="map" flushCache="true">
INSERT INTO im_notice (
notice_id,
notice_title,
notice_msg,
@ -65,6 +91,9 @@
notice_menu,
notice_service_id,
user_id,
user_name,
user_username,
is_send,
is_handle,
gmt_create,
creator,
@ -81,6 +110,9 @@
#{noticeMenu},
#{noticeServiceId},
#{userId},
#{userName},
#{userUsername},
#{isSend},
#{isHandle},
#{gmtCreate},
#{creator},
@ -91,9 +123,9 @@
</insert>
<!-- 更新已办状态 -->
<update id="updateHandle" parameterType="map">
<update id="updateHandle" parameterType="map" flushCache="true">
UPDATE
socket_notice
im_notice
SET
is_handle = #{isHandle},
gmt_modified = #{gmtModified},
@ -105,9 +137,9 @@
</update>
<!-- 删除 -->
<delete id="delete" parameterType="map">
<delete id="delete" parameterType="map" flushCache="true">
DELETE FROM
socket_notice
im_notice
WHERE
<if test="serviceIds != null and serviceIds.size > 0">
notice_service_id IN
@ -117,8 +149,23 @@
</if>
</delete>
<!-- 删除 -->
<update id="remove" parameterType="map" flushCache="true">
UPDATE
im_notice
SET
is_delete = 1,
gmt_modified = #{gmtModified},
modifier = #{modifier}
WHERE
notice_id IN
<foreach collection="noticeIds" index="index" open="(" separator="," close=")">
#{noticeIds[${index}]}
</foreach>
</update>
<!-- 详情 -->
<select id="getPO" parameterType="map" resultMap="noticePO">
<select id="getPO" parameterType="map" resultMap="noticePO" useCache="false">
SELECT
notice_id,
notice_title,
@ -129,6 +176,9 @@
notice_menu,
notice_service_id,
user_id,
user_name,
user_username,
is_send,
is_handle,
gmt_create,
creator,
@ -136,7 +186,7 @@
modifier,
is_delete
FROM
socket_notice
im_notice
WHERE
is_delete = 0
<if test="noticeId != null and noticeId != ''">
@ -166,7 +216,7 @@
</select>
<!-- 列表 -->
<select id="listPO" parameterType="map" resultMap="noticePO">
<select id="listPO" parameterType="map" resultMap="noticePO" useCache="true">
SELECT
notice_id,
notice_title,
@ -177,6 +227,9 @@
notice_menu,
notice_service_id,
user_id,
user_name,
user_username,
is_send,
is_handle,
gmt_create,
creator,
@ -184,7 +237,7 @@
modifier,
is_delete
FROM
socket_notice
im_notice
WHERE
is_delete = 0
<if test="noticeSystem != null and noticeSystem != ''">
@ -224,12 +277,82 @@
</if>
</select>
<!-- 列表 -->
<select id="list" parameterType="map" resultMap="noticeDTO" useCache="true">
SELECT
notice_id,
notice_title,
notice_msg,
notice_target,
notice_system,
notice_module,
notice_menu,
notice_service_id,
user_id,
user_name,
user_username,
is_send,
is_handle,
LEFT(gmt_create, 19) gmt_create,
LEFT(gmt_modified, 19) gmt_modified
FROM
im_notice
WHERE
is_delete = 0
<if test="keywords != null and keywords != ''">
AND (
user_name LIKE CONCAT('%', #{keywords}, '%')
OR
user_username LIKE CONCAT('%', #{keywords}, '%')
OR
notice_title LIKE CONCAT('%', #{keywords}, '%')
OR
notice_msg LIKE CONCAT('%', #{keywords}, '%')
)
</if>
<if test="noticeSystem != null and noticeSystem != ''">
AND
notice_system = #{noticeSystem}
</if>
<if test="noticeModule != null and noticeModule != ''">
AND
notice_module = #{noticeModule}
</if>
<if test="noticeMenu != null and noticeMenu">
AND
notice_menu = #{noticeMenu}
</if>
<if test="noticeServiceId != null and noticeServiceId != ''">
AND
notice_service_id = #{noticeServiceId}
</if>
<if test="userId != null and userId != ''">
AND
user_id = #{userId}
</if>
<if test="isHandle != null">
AND
is_handle = #{isHandle}
</if>
<if test="serviceId != null and serviceId != ''">
AND
notice_service_id = #{serviceId}
</if>
<if test="serviceIds != null and serviceIds.size > 0">
AND
notice_service_id IN
<foreach collection="serviceIds" index="index" open="(" separator="," close=")">
#{serviceIds[${index}]}
</foreach>
</if>
</select>
<!-- 系统列表 -->
<select id="listSystems" parameterType="map" resultType="java.lang.String">
<select id="listSystems" parameterType="map" resultType="java.lang.String" useCache="true">
SELECT
notice_system
FROM
socket_notice
im_notice
WHERE
is_delete = 0
<if test="userId != null and userId != ''">
@ -241,16 +364,16 @@
</select>
<!-- 模块列表 -->
<select id="listModules" parameterType="map" resultType="java.lang.String">
<select id="listModules" parameterType="map" resultType="java.lang.String" useCache="true">
SELECT
notice_module
FROM
socket_notice
im_notice
WHERE
is_delete = 0
<if test="userId != null and userId != ''">
AND
user_id = #{userId}
user_id = #{userId}``
</if>
<if test="noticeSystem != null and noticeSystem != ''">
AND
@ -261,11 +384,11 @@
</select>
<!-- 菜单列表 -->
<select id="listMenus" parameterType="map" resultType="java.lang.String">
<select id="listMenus" parameterType="map" resultType="java.lang.String" useCache="true">
SELECT
notice_menu
FROM
socket_notice
im_notice
WHERE
is_delete = 0
<if test="userId != null and userId != ''">
@ -285,11 +408,11 @@
</select>
<!-- 统计 -->
<select id="count" parameterType="map" resultType="java.lang.Integer">
<select id="count" parameterType="map" resultType="java.lang.Integer" useCache="false">
SELECT
COUNT(*)
FROM
socket_notice
im_notice
WHERE
is_delete = 0
<if test="userId != null and userId != ''">

View File

@ -0,0 +1,273 @@
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<base th:href="${#request.getContextPath() + '/'}">
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
</head>
<body>
<div class="layui-fluid layui-anim layui-anim-fadein">
<div class="layui-row">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body">
<div class="test-table-reload-btn" style="margin-bottom: 10px;">
<div class="layui-inline">
<input type="text" id="keywords" class="layui-input search-item search-item-width-100" placeholder="输入关键字">
</div>
创建时间
<div class="layui-inline">
<input type="text" id="startTime" class="layui-input search-item search-item-width-100" placeholder="开始时间" readonly>
</div>
<div class="layui-inline">
<input type="text" id="endTime" class="layui-input search-item search-item-width-100" placeholder="结束时间" readonly>
</div>
<button type="button" id="search" class="layui-btn layui-btn-sm">
<i class="fa fa-lg fa-search"></i> 搜索
</button>
</div>
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
<!-- 表头按钮组 -->
<script type="text/html" id="headerToolBar">
<div class="layui-btn-group">
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm" lay-event="removeEvent">
<i class="fa fa-lg fa-trash"></i> 删除
</button>
</div>
</script>
</div>
</div>
</div>
</div>
</div>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script src="assets/js/vendor/viewer/viewer.min.js"></script>
<script>
layui.config({
base: 'assets/layuiadmin/'
}).extend({
index: 'lib/index'
}).use(['index', 'table', 'laydate', 'common'], function() {
var $ = layui.$;
var $win = $(window);
var table = layui.table;
var admin = layui.admin;
var laydate = layui.laydate;
var common = layui.common;
var resizeTimeout = null;
var tableUrl = 'api/websocket/notice/listpage';
// 初始化表格
function initTable() {
table.render({
elem: '#dataTable',
id: 'dataTable',
url: top.restAjax.path(tableUrl, []),
width: admin.screen() > 1 ? '100%' : '',
height: $win.height() - 90,
limit: 20,
limits: [20, 40, 60, 80, 100, 200],
toolbar: '#headerToolBar',
request: {
pageName: 'page',
limitName: 'rows'
},
cols: [
[
{type:'checkbox', fixed: 'left'},
{field:'rowNum', width:80, title: '序号', fixed: 'left', align:'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
{field: 'noticeTitle', width: 180, title: '通知标题', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'noticeMsg', width: 180, title: '通知内容', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'noticeTarget', width: 180, title: '通知触发目标', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'noticeSystem', width: 180, title: '通知业务系统', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'noticeModule', width: 180, title: '通知业务模块', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'noticeServiceId', width: 180, title: '通知业务ID', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'userName', width: 180, title: '通知人', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'isSend', width: 180, title: '发送状态', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null) {
return '-';
}
if(rowData == 0) {
return '<span class="layui-btn layui-btn-xs layui-btn-danger">未发送</span>';
}
if(rowData == 1) {
return '<span class="layui-btn layui-btn-xs">已发送</span>';
}
return rowData;
return rowData;
}
},
{field: 'isHandle', width: 100, title: '是否处理', align:'center',
// 处理状态是用户是否查看该通知
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null) {
return '-';
}
if(rowData == 0) {
return '<span class="layui-btn layui-btn-xs layui-btn-danger">未处理</span>';
}
if(rowData == 1) {
return '<span class="layui-btn layui-btn-xs">已处理</span>';
}
return '错误';
}
},
{field: 'gmtCreate', width: 180, title: '创建时间', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'gmtModified', width: 180, title: '修改时间', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
]
],
page: true,
parseData: function(data) {
return {
'code': 0,
'msg': '',
'count': data.total,
'data': data.rows
};
}
});
}
// 重载表格
function reloadTable(currentPage) {
table.reload('dataTable', {
where: {
keywords: $('#keywords').val(),
startTime: $('#startTime').val(),
endTime: $('#endTime').val()
},
page: {
curr: currentPage
},
});
}
// 初始化日期
function initDate() {
// 日期选择
laydate.render({
elem: '#startTime',
format: 'yyyy-MM-dd'
});
laydate.render({
elem: '#endTime',
format: 'yyyy-MM-dd'
});
}
// 删除
function removeData(ids) {
top.dialog.msg(top.dataMessage.delete, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
shade: 0.3,
yes: function (index) {
top.dialog.close(index);
var layIndex;
top.restAjax.delete(top.restAjax.path('api/notice/remove/{ids}', [ids]), {}, null, function (code, data) {
top.dialog.msg(top.dataMessage.deleteSuccess, {time: 1000});
reloadTable();
}, function (code, data) {
top.dialog.msg(data.msg);
}, function () {
layIndex = top.dialog.msg(top.dataMessage.deleting, {icon: 16, time: 0, shade: 0.3});
}, function () {
top.dialog.close(layIndex);
});
}
});
}
initTable();
initDate();
// 事件 - 页面变化
$win.on('resize', function() {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(function() {
reloadTable();
}, 500);
});
// 事件 - 搜索
$(document).on('click', '#search', function() {
reloadTable(1);
});
});
</script>
</body>
</html>

View File

@ -0,0 +1,129 @@
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<base th:href="${#request.getContextPath() + '/'}">
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
</head>
<body>
<div class="layui-fluid layui-anim layui-anim-fadein">
<div class="layui-card">
<blockquote class="layui-elem-quote layui-quote-nm">用户客户端在线的情况下会直接通知,不在线时只保存记录</blockquote>
<div class="layui-card-body" style="padding: 15px;">
<form class="layui-form layui-form-pane" lay-filter="dataForm">
<div class="layui-form-item">
<label class="layui-form-label">通知标题</label>
<div class="layui-input-block">
<input type="text" id="noticeTitle" name="noticeTitle" class="layui-input" value="" placeholder="请输入通知标题" maxlength="255" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">通知人</label>
<div class="layui-input-block">
<input type="hidden" id="noticeUserIds" name="noticeUserIds">
<input type="text" id="noticeUserNames" name="noticeUserNames" class="layui-input" value="" placeholder="请选择通知人" lay-verify="required" readonly style="cursor:pointer;">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">通知内容</label>
<div class="layui-input-block">
<textarea name="noticeMsg" placeholder="请输入通知内容" class="layui-textarea" rows="10" lay-verify="required" maxlength="200"></textarea>
</div>
</div>
<button type="button" class="layui-btn" lay-submit lay-filter="submitForm">发送通知</button>
</form>
</div>
</div>
</div>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script>
layui.config({
base: 'assets/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'form', 'laydate', 'laytpl'], function(){
var $ = layui.$;
var form = layui.form;
var laytpl = layui.laytpl;
var laydate = layui.laydate;
function closeBox() {
parent.layer.close(parent.layer.getFrameIndex(window.name));
}
// 初始化内容
function initData() {
}
initData();
// 提交表单
form.on('submit(submitForm)', function(formData) {
top.dialog.confirm(top.dataMessage.commit, function(index) {
top.dialog.close(index);
var loadLayerIndex;
top.restAjax.post(top.restAjax.path('api/websocket/message/notice', []), formData.field, null, function(code, data) {
var layerIndex = top.dialog.msg(top.dataMessage.commitSuccess, {
time: 0,
btn: [top.dataMessage.button.yes],
shade: 0.3,
yes: function(index) {
top.dialog.close(index);
window.location.reload();
}
});
}, function(code, data) {
top.dialog.msg(data.msg);
}, function() {
loadLayerIndex = top.dialog.msg(top.dataMessage.committing, {icon: 16, time: 0, shade: 0.3});
}, function() {
top.dialog.close(loadLayerIndex);
});
});
return false;
});
$('#noticeUserNames').on('click', function() {
top.dialog.dialogData.selectedUserIds = $('#noticeUserIds').val();
top.dialog.open({
url: top.restAjax.path('route/department/user/select-user', []),
title: '选择用户',
width: '500px',
height: '500px',
closeBtn: 0,
onClose: function() {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers;
// 这里写处理逻辑
var noticeUserIds = '';
var noticeUserNames = '';
if(selectedUsers && selectedUsers.length > 0) {
for(var i = 0, item; item = selectedUsers[i++]; ) {
if(noticeUserIds.length > 0) {
noticeUserIds +='_';
noticeUserNames += ',';
}
noticeUserIds += item.userId;
noticeUserNames += item.userName;
}
}
$('#noticeUserIds').val(noticeUserIds);
$('#noticeUserNames').val(noticeUserNames);
}
})
})
$('.close').on('click', function() {
closeBox();
});
// 校验
form.verify({
});
});
</script>
</body>
</html>