/*
* 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙,邂逅框架梦]
*
* 知启蒙WEB容器(zhiqim_httpd)在LGPL3.0协议下开源:https://www.zhiqim.com/gitcan/zhiqim/zhiqim_httpd.htm
*
* This file is part of [zhiqim_httpd].
*
* [zhiqim_httpd] is free software: you can redistribute
* it and/or modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* [zhiqim_httpd] is distributed in the hope that it will
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with [zhiqim_httpd].
* If not, see .
*/
package org.zhiqim.announcement.action;
import java.util.List;
import org.zhiqim.announcement.dbo.ZoaAnnouncement;
import org.zhiqim.announcement.dbo.ZoaAnnouncementEx;
import org.zhiqim.announcement.dbo.ZoaAnnouncementReader;
import org.zhiqim.httpd.HttpRequest;
import org.zhiqim.httpd.HttpSessionManager;
import org.zhiqim.httpd.HttpSessionUser;
import org.zhiqim.httpd.HttpWebsocketConnection;
import org.zhiqim.httpd.context.extend.StdSwitchAction;
import org.zhiqim.httpd.validate.ones.IsIntegerValue;
import org.zhiqim.httpd.validate.ones.IsLen;
import org.zhiqim.httpd.validate.ones.IsNotEmpty;
import org.zhiqim.kernel.paging.PageResult;
import org.zhiqim.kernel.util.Ids;
import org.zhiqim.kernel.util.Sqls;
import org.zhiqim.orm.ORM;
import org.zhiqim.orm.dbo.Selector;
import org.zhiqim.orm.dbo.Updater;
/**
* 公告管理,支持公告的增加、修改和删除权限
*
* @version v1.0.0 @author duanxiaohui 2017-11-13 新建与整理
*/
public class AnnouncementAction extends StdSwitchAction
{
@Override
protected void validateId(HttpRequest request)
{
request.addValidate(new IsNotEmpty("announcementId", "请选择一个选项"));
}
@Override
protected void validateForm(HttpRequest request)
{
request.addValidate(new IsLen("announcementTitle", "公告标题不能为空,[1, 60]范围", 1, 60));
request.addValidate(new IsIntegerValue("announcementType", "公告类型请选择一项", 1, 3));
request.addValidate(new IsLen("announcementContent", "公告内容不能为空,[1, 1000]范围", 1, 1000));
}
protected void item(HttpRequest request) throws Exception
{
long announcementId = request.getParameterLong("announcementId");
ZoaAnnouncement item = ORM.table().item(ZoaAnnouncement.class, announcementId);
if (item == null)
{
request.returnHistory("该公告不存在或数据不完整!");
return;
}
if (ORM.table().count(ZoaAnnouncementReader.class, announcementId, request.getSessionName()) == 0)
{//未读的,更新为已读
ZoaAnnouncementReader reader = new ZoaAnnouncementReader();
reader.setAnnouncementId(announcementId);
reader.setOperatorCode(request.getSessionName());
ORM.table().insert(reader);
}
request.setAttribute("item", item);
}
@Override
protected void list(HttpRequest request) throws Exception
{
int pageNo = request.getParameterInt("page", 1);
int pageSize = request.getContextAttributeInt("fmr_page_size", 20);
Selector selector = new Selector();
selector.addJoin(ZoaAnnouncementReader.class, new Selector("operatorCode", request.getSessionName()));
selector.addMaybeLike("announcementTitle", request.getParameter("announcementTitle"));
selector.addMust("announcementStatus", 0);
selector.addOrderbyDesc("announcementTime");
PageResult result = ORM.view().page(ZoaAnnouncementEx.class, pageNo, pageSize, selector);
result.addConditionMap(request.getParameterMap());
request.setAttribute("result", result);
}
@Override
protected void add(HttpRequest request) throws Exception
{
}
@Override
protected void insert(HttpRequest request) throws Exception
{
String announcementTitle = request.getParameter("announcementTitle");
int announcementType = request.getParameterInt("announcementType");
String announcementContent = request.getParameter("announcementContent");
ZoaAnnouncement item = new ZoaAnnouncement();
item.setAnnouncementId(Ids.longId());
item.setAnnouncementTitle(announcementTitle);
item.setAnnouncementType(announcementType);
item.setAnnouncementStatus(0);
item.setAnnouncementContent(announcementContent);
item.setAnnouncementTime(Sqls.nowTimestamp());
item.setAnnouncementPublisher(request.getSessionName());
ORM.table().insert(item);
//对所有连上来的WS进行消息推送
HttpSessionManager manager = request.getContext().getSessionManager();
List list = manager.getSessionUserList();
for (HttpSessionUser sessionUser : list)
{
List connList = request.getContext().getWebsocketManager().get("zoa_announcement", sessionUser.getSessionId());
for (HttpWebsocketConnection conn : connList)
{
conn.send("zoa_announcement_new");
}
}
}
@Override
protected void delete(HttpRequest request) throws Exception
{//实际为修改为已删除状态
Updater updater = new Updater();
updater.addMust("announcementId", request.getParameterLong("announcementId"));
updater.addField("announcementStatus", 1);
ORM.table().update(ZoaAnnouncement.class, updater);
}
/****************************************************************************************/
//不支持修改
/****************************************************************************************/
@Override
protected void modify(HttpRequest request) throws Exception
{
}
@Override
protected void update(HttpRequest request) throws Exception
{
}
}