package com.norteksoft.portal.web.index;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.SimpleDateFormat;
import com.norteksoft.acs.base.web.struts2.Struts2Utils;
import com.norteksoft.acs.entity.organization.User;
import com.norteksoft.acs.service.AcsUtils;
import com.norteksoft.mms.module.entity.Menu;
import com.norteksoft.portal.base.enumeration.MessageType;
import com.norteksoft.portal.entity.BaseSetting;
import com.norteksoft.portal.entity.Message;
import com.norteksoft.portal.entity.Widget;
import com.norteksoft.portal.service.BaseSettingManager;
import com.norteksoft.portal.service.IndexManager;
import com.norteksoft.portal.service.MessageInfoManager;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.util.MemCachedUtils;
import com.norteksoft.product.util.PageUtils;
import com.norteksoft.product.util.PropUtils;
import com.norteksoft.product.util.SystemUrls;
import com.norteksoft.product.util.freemarker.TagUtil;
import com.norteksoft.product.web.struts2.CrudActionSupport;
/**
* 个人消息管理
* @author zzl
*
*/
@Namespace("/index")
@ParentPackage("default")
@Results({@Result(name=CrudActionSupport.RELOAD,location="my-message",type="redirectAction")})
public class MyMessageAction extends CrudActionSupport<Message>{
private static final long serialVersionUID = 1L;
private Long id;
private String ids;
private Page<Message> pages = new Page<Message>(0, true);
private List<Message> messages= new ArrayList<Message>();
private Message message;
private String messageType="SYSTEM_MESSAGE";
private String userNames;
private String loginNames;
private Boolean isOpen=false;//是否是open出来的页面
private Boolean bl;
private Long messageId;
@Autowired
private MessageInfoManager messageManager;
@Autowired
private AcsUtils acsUtils;
@Autowired
private BaseSettingManager baseSettingManager;
@Autowired
private IndexManager indexManager;
/**
* 删除
*/
@Action("my-message-delete")
@Override
public String delete() throws Exception {
int num = messageManager.deleteMessage(ids);
addActionMessage("<font class=\"onSuccess\"><nobr>已成功删除"+num+"条数据!</nobr></font>");
ApiFactory.getBussinessLogService().log("个人消息管理", "删除个人消息", ContextUtils.getSystemId("portal"));
return "my-message";
}
/**
* 标识为读取状态
*/
@Action("my-message-stateAll")
public String stateAll() throws Exception {
int num = messageManager.setMessageState(ids,bl);
addActionMessage("<font class=\"onSuccess\"><nobr>已成功操作"+num+"条数据!</nobr></font>");
ApiFactory.getBussinessLogService().log("个人消息管理", "将消息标识为已读或未读状态", ContextUtils.getSystemId("portal"));
return "my-message";
}
/**
* 清空
* @return
* @throws Exception
*/
@Action("my-message-deleteAll")
public String deleteAll() throws Exception {
int num = 0;
if(messageType.equals("SYSTEM_MESSAGE")){
num = messageManager.deleteMessage(ContextUtils.getLoginName() , ContextUtils.getCompanyId(), MessageType.SYSTEM_MESSAGE);
}else if(messageType.equals("ONLINE_MESSAGE")){
num = messageManager.deleteMessage(ContextUtils.getLoginName() , ContextUtils.getCompanyId(), MessageType.ONLINE_MESSAGE);
}
addActionMessage("<font class=\"onSuccess\"><nobr>已成功删除"+num+"条数据!</nobr></font>");
ApiFactory.getBussinessLogService().log("个人消息管理", "清空个人消息", ContextUtils.getSystemId("portal"));
return "my-message";
}
/**
* 新建页面
*/
@Action("my-message-input")
@Override
public String input() throws Exception {
return "my-message-input";
}
/**
* 主入口
*/
@Override
public String list() throws Exception {
if(pages.getPageSize()>1){
if(messageType.equals("SYSTEM_MESSAGE")){
messageManager.getMessages(pages,ContextUtils.getLoginName() , ContextUtils.getCompanyId(), MessageType.SYSTEM_MESSAGE);//系统
}else if(messageType.equals("ONLINE_MESSAGE")){
messageManager.getMessages(pages,ContextUtils.getLoginName() , ContextUtils.getCompanyId(), MessageType.ONLINE_MESSAGE);//系统
}
this.renderText(PageUtils.pageToJson(pages));
ApiFactory.getBussinessLogService().log("个人消息管理", "查看个人消息列表", ContextUtils.getSystemId("portal"));
return null;
}
return SUCCESS;
}
@Override
protected void prepareModel() throws Exception {
if(id==null){
message = new Message();
}else{
message= messageManager.getMessage(id);
}
}
/**
* 保存
*/
@Action("my-message-save")
@Override
public String save() throws Exception {
message.setCreatedTime(new Date());
if(StringUtils.isNotEmpty(loginNames)){
if("ALLCOMPANYID".equals(loginNames)){
List<User> users = acsUtils.getUsersByCompany(ContextUtils.getCompanyId());
for(User user : users){
messageManager.saveMessageToPortal("portal", ContextUtils.getUserName(),ContextUtils.getLoginName(), user.getLoginName(), "在线消息", message.getContent(), "/index/my-message-view.htm?isOpen=true&id=",MessageType.valueOf(messageType));
}
}else{
String[] logins=loginNames.split(",");
for (int i = 0; i < logins.length; i++) {
messageManager.saveMessageToPortal("portal", ContextUtils.getUserName(),ContextUtils.getLoginName(), logins[i], "在线消息", message.getContent(), "/index/my-message-view.htm?isOpen=true&id=",MessageType.valueOf(messageType));
}
}
}
ApiFactory.getBussinessLogService().log("个人消息管理", "保存个人消息", ContextUtils.getSystemId("portal"));
this.renderText("ok-"+messageType);
return null;
}
/**
* 取信息
* @return
*/
@Action("my-message-getInfor")
public String getInfor()throws Exception{
BaseSetting baseSetting = baseSettingManager.getBaseSettingByLonginName();
if(baseSetting==null || baseSetting.getShowRows()==null){
baseSetting = new BaseSetting();
baseSetting.setShowRows(15);
}
Page<Message> messagePage = new Page<Message>(baseSetting.getShowRows(), true);
messagePage=messageManager.getMessages(messagePage,ContextUtils.getLoginName(), ContextUtils.getCompanyId(),true);
messages=messagePage.getResult();
String callback=Struts2Utils.getParameter("callback");
if(messages!=null&&!messages.isEmpty()){
StringBuffer bu = new StringBuffer();
bu.append("<div style='font-size: 12px;padding:6px 6px 2px 6px;'>");
bu.append("<table style='width: 100%;height:100%;'>");
SimpleDateFormat format = new SimpleDateFormat("MM月dd日 HH:mm");
for (Message mess : messages) {
String title="<td class='remassage-title' >";
bu.append("<tr id='mess"+mess.getId()+"'>");
if(mess.getMessageType()!=null&&mess.getMessageType().equals(MessageType.SYSTEM_MESSAGE)){//为系统消息
title="<td class='remassage-title' >";
}else if(mess.getMessageType()==null||mess.getMessageType().equals(MessageType.ONLINE_MESSAGE)){//为在线个人消息
title="<td class='remassage-title-p' >";
}
bu.append(title);
if(mess.getMessageType()!=null&&mess.getMessageType().equals(MessageType.SYSTEM_MESSAGE)&& !mess.getCategory().equals("系统消息")){//为系统消息
String url=mess.getUrl();
if(StringUtils.isNotEmpty(url)){//是否有url
String werRoot = SystemUrls.getSystemUrl(mess.getSystemCode());
url=werRoot+url;
if(url.indexOf("/message-task.htm")>=0){//如果是待办事宜任务
Widget widget = indexManager.getWidgetByCode("task");//获得待办事宜小窗体id,用于更新小窗体
if(widget!=null){
bu.append("<a href='#' style='text-decoration:underline;color:black;' onclick='setMessageState("+mess.getId()+");taskMessageOpen(\\\""+url.trim()+"\\\","+widget.getId()+");'>");
}else{
bu.append("<a href='#' style='text-decoration:underline;color:black;' onclick='setMessageState("+mess.getId()+");messageOpen(\\\""+url.trim()+"\\\");'>");
}
}else{
bu.append("<a href='#' style='text-decoration:underline;color:black;' onclick='setMessageState("+mess.getId()+");messageOpen(\\\""+url.trim()+"\\\");'>");
}
}else{
bu.append("<a href='#' style='text-decoration:underline;color:black;' onclick='setMessageState("+mess.getId()+")'>");
}
}else if(mess.getCategory().equals("系统消息")&&mess.getMessageType().equals(MessageType.SYSTEM_MESSAGE)){
bu.append("<a href='#' style='text-decoration:underline;color:black;' onclick='openMessageInput("+mess.getId()+")'>");
}else if(mess.getMessageType()==null||mess.getMessageType().equals(MessageType.ONLINE_MESSAGE)){//为在线个人消息
bu.append("<a href='#' style='text-decoration:underline;color:black;' onclick='openMessageInput("+mess.getId()+")'>");
}
String str=mess.getContent();
if(StringUtils.isEmpty(str)){
str="空的消息!";
}else if(StringUtils.isNotEmpty(str)&&str.length()>60){
str=str.replace("\r", "\\n").replace("\n", "\\n").replace("\t", "\\n").replace("\r\n", "\\n").replace("\n", "\\n").replace("\"", "‘").replace("\\\\", "\\\\\\\\");
str=StringUtils.substring(str, 0, 59)+"...";
}else{
str=str.replace("\r", "\\n").replace("\n", "\\n").replace("\t", "\\n").replace("\r\n", "\\n").replace("\n", "\\n").replace("\"", "‘").replace("\\\\", "\\\\\\\\");
}
bu.append(str);
bu.append("</a>");
bu.append("</td>");
bu.append("<td class='remassage-name' >");
bu.append(mess.getSender()+"<br>"+format.format(mess.getCreatedTime()));
bu.append("</td>");
bu.append("</tr>");
}
bu.append("</table>");
bu.append("</div>");
this.renderText(callback+"({msg:\""+bu.toString()+"\"})");
return null;
}else{
this.renderText(callback+"({msg:\"error\"})");
return null;
}
}
public void prepareView() throws Exception{
prepareModel();
}
/**
* 查看
* @return
* @throws Exception
*/
@Action("my-message-view")
public String view()throws Exception{
messageManager.setMessageState(message,false);
return "my-message-view";
}
public void prepareSetState() throws Exception{
prepareModel();
}
/**
* 设置查看状态
* @return
* @throws Exception
*/
@Action("my-message-setState")
public String setState()throws Exception{
messageManager.setMessageState(message,false);
String callback=Struts2Utils.getParameter("callback");
this.renderText(callback+"({msg:'ok'})");
return null;
}
@Action("my-message-error")
public String messageError()throws Exception{
HttpServletResponse response = Struts2Utils.getResponse();
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
writer.print(readScriptTemplet());
return null;
}
private String readScriptTemplet() throws Exception{
String resourceCtx=PropUtils.getProp("host.resources");
Map<String, Object> root=new HashMap<String, Object>();
root.put("resourceCtx",resourceCtx);
root.put("errorInfo",Struts2Utils.getParameter("errorInfo"));
String result =TagUtil.getContent(root, "message-error.ftl");
return result;
}
public Message getModel() {
return message;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Page<Message> getPages() {
return pages;
}
public String getIds() {
return ids;
}
public void setIds(String ids) {
this.ids = ids;
}
public String getLoginNames() {
return loginNames;
}
public void setLoginNames(String loginNames) {
this.loginNames = loginNames;
}
public String getUserNames() {
return userNames;
}
public void setUserNames(String userNames) {
this.userNames = userNames;
}
public List<Message> getMessages() {
return messages;
}
public Boolean getIsOpen() {
return isOpen;
}
public void setIsOpen(Boolean isOpen) {
this.isOpen = isOpen;
}
public Boolean getBl() {
return bl;
}
public void setBl(Boolean bl) {
this.bl = bl;
}
public Long getMessageId() {
return messageId;
}
public void setMessageId(Long messageId) {
this.messageId = messageId;
}
public String getMessageType() {
return messageType;
}
public void setMessageType(String messageType) {
this.messageType = messageType;
}
}