提交 c185a940 编写于 作者: 大白八神's avatar 大白八神

添加站内信推送定时任务

上级 7b5c8585
......@@ -8,25 +8,25 @@ import lombok.experimental.Accessors;
/**
* 站内信息表,发送用
*
* @author LHR
* @author wuyun
*/
@Data
@Accessors(chain = true)
public class MsgPushVO implements Serializable {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private Long id;
/**
* 标题
*/
private String msgTitle;
/**
*
*/
private Integer isTop;
/**
* 主键
*/
private Long id;
/**
* 标题
*/
private String msgTitle;
/**
* 是否置顶
*/
private Integer isTop;
}
......@@ -18,7 +18,6 @@ import com.roncoo.education.system.service.dao.impl.mapper.entity.Msg;
import com.roncoo.education.system.service.dao.impl.mapper.entity.MsgExample;
import com.roncoo.education.system.service.dao.impl.mapper.entity.MsgExample.Criteria;
import com.roncoo.education.system.service.dao.impl.mapper.entity.MsgUser;
import com.roncoo.education.user.common.bean.qo.UserExtQO;
import com.roncoo.education.user.common.bean.vo.UserExtMsgVO;
import com.roncoo.education.user.feign.IBossUserExt;
import com.roncoo.education.util.base.BaseBiz;
......@@ -116,7 +115,7 @@ public class BossMsgBiz extends BaseBiz {
private void pushToUserByMsgPush(MsgPushVO msgPush) {
// 获取缓存的条数
int num = getCacheNum(msgPush);
int num = getCacheNum();
for (int i = 1; i < num + 1; i++) {
List<UserExtMsgVO> list = cacheRedis.list(RedisPreEnum.SYS_MSG_SEND.getCode() + "_" + i, UserExtMsgVO.class);
if (CollectionUtil.isNotEmpty(list)) {
......@@ -129,21 +128,15 @@ public class BossMsgBiz extends BaseBiz {
}
private int getCacheNum(MsgPushVO msgPush) {
private int getCacheNum() {
boolean flag = cacheRedis.hasKey(RedisPreEnum.SYS_MSG_SEND_NUM.getCode());
if (!flag) {// 找不到,去缓存用户信息
cacheUserForMsg(msgPush);
bossUserExt.cachUserForMsg();
}
int num = cacheRedis.get(RedisPreEnum.SYS_MSG_SEND_NUM.getCode(), int.class);
return num;
}
private void cacheUserForMsg(MsgPushVO msgPush) {
UserExtQO userEducationInfoQO = new UserExtQO();
userEducationInfoQO.setStatusId(StatusIdEnum.YES.getCode());
bossUserExt.cachUserForMsg(userEducationInfoQO);
}
private void updateMsg(Long id) {
Msg msgNew = new Msg();
msgNew.setId(id);
......@@ -170,7 +163,7 @@ public class BossMsgBiz extends BaseBiz {
public int push() {
List<Msg> list = dao.listByStatusIdAndIsSendAndIsTimeSendAndSendTime(StatusIdEnum.YES.getCode(), IsSendEnum.NO.getCode(), IsTimeSendEnum.YES.getCode(), new Date());
List<MsgPushVO> msgList = ArrayListUtil.copy(list, MsgPushVO.class);
if (CollectionUtil.isEmpty(msgList)) {
if (CollectionUtil.isNotEmpty(msgList)) {
for (MsgPushVO vo : msgList) {
// 进行推送前,将当前站内信推送状态置为已通知
updateMsg(vo.getId());
......@@ -178,6 +171,7 @@ public class BossMsgBiz extends BaseBiz {
callbackExecutor.execute(new Runnable() {
@Override
public void run() {
System.err.println(vo);
pushToUserByMsgPush(vo);
}
});
......
......@@ -3,6 +3,7 @@ package com.roncoo.education.system.service.controller.biz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.aliyun.oas.utils.StringUtil;
import com.roncoo.education.system.common.bean.qo.MsgUserQO;
import com.roncoo.education.system.common.bean.vo.MsgUserVO;
import com.roncoo.education.system.service.dao.MsgUserDao;
......@@ -14,7 +15,7 @@ import com.roncoo.education.util.base.PageUtil;
import com.roncoo.education.util.tools.BeanUtil;
/**
* 站内信用户记录表
* 站内信用户记录表
*
* @author wuyun
*/
......@@ -25,15 +26,21 @@ public class BossMsgUserBiz {
private MsgUserDao dao;
public Page<MsgUserVO> listForPage(MsgUserQO qo) {
MsgUserExample example = new MsgUserExample();
Criteria c = example.createCriteria();
example.setOrderByClause(" id desc ");
Page<MsgUser> page = dao.listForPage(qo.getPageCurrent(), qo.getPageSize(), example);
return PageUtil.transform(page, MsgUserVO.class);
MsgUserExample example = new MsgUserExample();
Criteria c = example.createCriteria();
if (StringUtil.isNotEmpty(qo.getMsgTitle())) {
c.andMsgTitleLike(PageUtil.rightLike(qo.getMsgTitle()));
}
if (StringUtil.isNotEmpty(qo.getMobile())) {
c.andMobileLike(PageUtil.rightLike(qo.getMobile()));
}
example.setOrderByClause(" status_id desc, id desc ");
Page<MsgUser> page = dao.listForPage(qo.getPageCurrent(), qo.getPageSize(), example);
return PageUtil.transform(page, MsgUserVO.class);
}
public int save(MsgUserQO qo) {
MsgUser record = BeanUtil.copyProperties(qo, MsgUser.class);
MsgUser record = BeanUtil.copyProperties(qo, MsgUser.class);
return dao.save(record);
}
......@@ -42,13 +49,13 @@ public class BossMsgUserBiz {
}
public MsgUserVO getById(Long id) {
MsgUser record = dao.getById(id);
MsgUser record = dao.getById(id);
return BeanUtil.copyProperties(record, MsgUserVO.class);
}
public int updateById(MsgUserQO qo) {
MsgUser record = BeanUtil.copyProperties(qo, MsgUser.class);
MsgUser record = BeanUtil.copyProperties(qo, MsgUser.class);
return dao.updateById(record);
}
}
......@@ -48,7 +48,7 @@ public interface BossUserExt {
* @return
* @author wuyun
*/
@RequestMapping(value = "/boss/user/userEducationInfo/sumByCounts", method = RequestMethod.POST)
@RequestMapping(value = "/boss/user/userExt/sumByCounts", method = RequestMethod.POST)
List<UserEchartsVO> sumByCounts(@RequestBody UserExtEchartsQO userExtEchartsQO);
/**
......@@ -56,6 +56,6 @@ public interface BossUserExt {
*
* @author wuyun
*/
@RequestMapping(value = "/boss/user/userEducationInfo/cachUserForMsg")
void cachUserForMsg(@RequestBody UserExtQO qo);
@RequestMapping(value = "/boss/user/userExt/cachUserForMsg")
void cachUserForMsg();
}
......@@ -64,8 +64,8 @@ public class BossUserExtController extends BaseController implements BossUserExt
}
@Override
public void cachUserForMsg(@RequestBody UserExtQO qo) {
biz.cachUserForMsg(qo);
public void cachUserForMsg() {
biz.cachUserForMsg();
}
}
......@@ -111,7 +111,7 @@ public class BossUserExtBiz extends BaseBiz {
*
* @author wuyun
*/
public void cachUserForMsg(UserExtQO qo) {
public void cachUserForMsg() {
int pageSize = 1000;
Page<UserExtMsgVO> page = userDao.pageByStatusIdForMsg(StatusIdEnum.YES.getCode(), 1, pageSize);
// 缓存key条数
......
......@@ -76,7 +76,7 @@ public class UserDaoImpl extends AbstractBaseJdbc implements UserDao {
@Override
public Page<UserExtMsgVO> pageByStatusIdForMsg(Integer statusId, int pageCurrent, int pageSize) {
StringBuffer sql = new StringBuffer("select user_no as userNo ,mobile from user_ext where 1");
StringBuffer sql = new StringBuffer("select user_no as userNo ,mobile from user_ext where 1=1");
if (statusId != null) {
sql.append(" and status_id =").append(statusId);
}
......
......@@ -31,6 +31,7 @@ import com.roncoo.education.util.enums.IsPayEnum;
import com.roncoo.education.util.enums.IsPutawayEnum;
import com.roncoo.education.util.enums.IsSendEnum;
import com.roncoo.education.util.enums.IsShowServiceEnum;
import com.roncoo.education.util.enums.MsgTypeEnum;
import com.roncoo.education.util.enums.NavEnum;
import com.roncoo.education.util.enums.OrderStatusEnum;
import com.roncoo.education.util.enums.PayTypeEnum;
......@@ -95,6 +96,7 @@ public class BaseController extends Base {
modelMap.put("fileTypeEnums", FileTypeEnum.values());
modelMap.put("isDefaultEnums", IsDefaultEnum.values());
modelMap.put("isSendEnums", IsSendEnum.values());
modelMap.put("msgTypeEnums", MsgTypeEnum.values());
}
/**
......
/**
* Copyright 2015-2017 广州市领课网络科技有限公司
*/
package com.roncoo.education.util.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 短信类型
*
* @author wuyun
*
*/
@Getter
@AllArgsConstructor
public enum MsgTypeEnum {
SYSTEM(1, "系统消息"), OTHER(2, "其他");
private Integer code;
private String desc;
}
<#assign base=request.contextPath />
<div class="bjui-pageContent">
<form action="${base}/system/msg/save" data-toggle="validate" method="post">
<input type="hidden" name="msgType" value="1">
<div class="form-group dssj" style="display:none; z-index:100">
<label class="control-label x85">提醒时间:</label>
<input type="text" name="sendTimeString" data-toggle="datepicker" data-pattern="yyyy-MM-dd HH:mm:ss" size="20">
<div class="form-group">
<label class="control-label x85">标题:</label>
<input type="text" name="msgTitle" value="" placeholder="短信标题" size="20">
</div>
</br>
</br>
<div class="form-group">
<label class="control-label x85">定时发送:</label>
<input type="radio" name="isTimeSend" class="dsfs" value=1 data-toggle="icheck" data-label="开启"/>
<input type="radio" name="isTimeSend" class="dsfs" value=0 data-toggle="icheck" data-label="关闭" checked="true" />
&nbsp;&nbsp;&nbsp;<span class="fa fa-info-circle red"> 是否开启定时发送</span>
</div>
</br>
<div class="form-group dssj" style="display:none; z-index:100">
<label class="control-label x85">提醒时间:</label>
<input type="text" name="sendTimeString" data-toggle="datepicker" data-pattern="yyyy-MM-dd HH:mm:ss" size="20">
</div>
</br>
<div class="form-group">
<label for="statusId" class="control-label x85">是否置顶:</label>
<input type="radio" name="isTop" class="actCouponAdd" value=1 data-toggle="icheck" data-label="是"/>
<input type="radio" name="isTop" class="actCouponAdd" value=0 data-toggle="icheck" data-label="否" checked="true" />
</div>
</br>
<div class="form-group">
<label class="control-label x85">标题:</label>
<input type="text" name="msgTitle" value="" placeholder="短信标题" size="20">
</div>
</br>
<div class="form-group">
<label class="control-label x85">内容:</label>
......
......@@ -5,13 +5,6 @@
<div class="bjui-searchBar">
<label>活动标题:<label>
<input size="15" name="msgTitle" value="${bean.msgTitle!}"/>&nbsp;
<label>状态:</label>
<select name="statusId" data-toggle="selectpicker" data-width="75">
<option value="">全部</option>
<#list statusIdEnums as b>
<option value="${b.code}"<#if bean.statusId?? && bean.statusId == b.code>selected="selected"</#if>>${b.desc!}</option>
</#list>
</select>
<button type="submit" class="btn-default" data-icon="search">查询</button>&nbsp;
<a class="btn btn-orange" href="javascript:;" data-toggle="reloadsearch" data-clear-query="true" data-icon="undo">清空查询</a>
......
<div class="bjui-pageContent">
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">创建时间:</label>${bean.gmtCreate!}
</div>
</div>
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">修改时间:</label>${bean.gmtModified!}
</div>
</div>
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">状态(1有效, 0无效):</label>${bean.statusId!}
</div>
</div>
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">短信类型:</label>${bean.msgType!}
</div>
</div>
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">短信标题:</label>${bean.msgTitle!}
</div>
</div>
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">短信内容:</label>${bean.msgText!}
</div>
</div>
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">是否定时发送(1是,0否):</label>${bean.isTimeSend!}
</div>
</div>
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">发送时间:</label>${bean.sendTime!}
</div>
</div>
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">是否已发送(1是;0否):</label>${bean.isSend!}
</div>
</div>
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">是否置顶(1是;0否):</label>${bean.isTop!}
</div>
</div>
<div class="form-group">
<div class="col-lg-6">
<label class="control-label">后台备注:</label>${bean.backRemark!}
</div>
</div>
<fieldset>
<legend>${bean.msgTitle!}</legend>
${bean.msgText!}
</fieldset>
</div>
<div class="bjui-pageFooter">
<ul>
......
......@@ -7,17 +7,9 @@
<input size="15" name="msgTitle" value="${bean.msgTitle!}"/>&nbsp;
<label>用户手机:<label>
<input size="15" name="mobile" value="${bean.mobile!}"/>&nbsp;
<label>状态:</label>
<select name="statusId" data-toggle="selectpicker" data-width="75">
<option value="">全部</option>
<#list statusIdEnums as b>
<option value="${b.code}"<#if bean.statusId?? && bean.statusId == b.code>selected="selected"</#if>>${b.desc!}</option>
</#list>
</select>
<button type="submit" class="btn-default" data-icon="search">查询</button>&nbsp;
<a class="btn btn-orange" href="javascript:;" data-toggle="reloadsearch" data-clear-query="true" data-icon="undo">清空查询</a>
<a href="${base}/system/msgUser/add" class="btn btn-default" data-toggle="dialog" data-icon="plus" data-id="msgUser-add" data-options="{title:'添加', height:500}">添加 </a>
</div>
</form>
</div>
......@@ -41,7 +33,7 @@
<td>${bean.mobile!}</td>
<td><#list msgTypeEnums as mm><#if bean.msgType?? && bean.msgType==mm.code>${mm.desc}</#if></#list></td>
<td>${bean.msgTitle!}</td>
<td><#list isDefaultEnum as em><#if bean.isRead?? && bean.isRead==em.code>${em.desc}</#if></#list></td>
<td><#list isDefaultEnums as em><#if bean.isRead?? && bean.isRead==em.code>${em.desc}</#if></#list></td>
<td>
<a href="${base}/system/msgUser/delete?id=${bean.id}" class="btn btn-red" data-toggle="doajax" data-id="msgUser-delete" data-confirm-msg="确定要删除吗?">删除</a>
<@shiro.hasPermission name="/system/msg/view">
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册