package com.norteksoft.portal.web.index; import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.apache.struts2.ServletActionContext; 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 com.norteksoft.acs.entity.authorization.BusinessSystem; import com.norteksoft.acs.entity.authorization.Role; import com.norteksoft.acs.entity.organization.User; import com.norteksoft.acs.service.authorization.BusinessSystemManager; import com.norteksoft.acs.service.authorization.StandardRoleManager; import com.norteksoft.product.api.entity.OptionGroup; import com.norteksoft.portal.base.enumeration.StaticVariable; import com.norteksoft.portal.entity.BaseSetting; import com.norteksoft.portal.entity.Theme; import com.norteksoft.portal.entity.Webpage; import com.norteksoft.portal.entity.Widget; import com.norteksoft.portal.entity.WidgetParameter; import com.norteksoft.portal.entity.WidgetRole; import com.norteksoft.portal.service.BaseSettingManager; import com.norteksoft.portal.service.IndexManager; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.enumeration.DataState; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.FtlUtils; import com.norteksoft.product.util.JsTreeUtils; import com.norteksoft.product.util.JsonParser; import com.norteksoft.product.util.PageUtils; import com.norteksoft.product.util.freemarker.TagUtil; import com.norteksoft.product.util.tree.TreeAttr; import com.norteksoft.product.util.tree.TreeNode; import com.norteksoft.product.web.struts2.CrudActionSupport; import com.norteksoft.product.web.struts2.Struts2Utils; @Namespace("/index") @ParentPackage("default") @Results( { @Result(name = CrudActionSupport.RELOAD, location = "index?webpageId=${webpageId}", type = "redirectAction"), @Result(name = "toNewPage", location = "${url}", type = "redirectAction") }) public class IndexAction extends CrudActionSupport<Widget>{ private static final long serialVersionUID = 1L; private Page<User> page = new Page<User>(20, true); private Page<Widget> widgetPage=new Page<Widget>(0,true); private Page<Theme> themePage=new Page<Theme>(0,true); private Long webpageId; //当前页签ID private Long widgetId; //小窗口ID private String webpageName;//页签名称 private int columnSize; //页签栏数 private int position; //窗体位置 private String themeName; private Widget widget; private Webpage webpage; private List<Webpage> webPages ; private List<Widget> widgets; private List<Long> widgetIds; private String widgetIdStrs; private String htm; private String widgetCode; private String positions; private String wpId; private String userName; private String userDepart; private String userSex; private User user; private String userId; private String noteValue; private Date countdownDate; private String countdownName; private String countdownTime; private String skipWindwo; private String widgetPositions; private List<BusinessSystem> businessSystems; private Long systemId; private String registerWidgetIds; private String roleIds; private String roleNames; private Long parameterId;//窗口参数id private Integer pageNo; private String pageCode; private Theme theme; private Long id;//主题id private String code;//主题编号 private String name;//主题名称 private DataState dataState;//主题状态 private String ids;//主题ids private BaseSetting baseSetting;//主题ids private static final String SUCCESS_MESSAGE_LEFT = "<font class=\"onSuccess\"><nobr>"; private static final String MESSAGE_RIGHT = "</nobr></font>"; private static final String ERROR_MESSAGE_LEFT = "<font class=\"onError\"><nobr>"; @Autowired private IndexManager indexManager; @Autowired private BusinessSystemManager businessSystemManager; @Autowired private StandardRoleManager standardRoleManager; @Autowired private BaseSettingManager baseSettingManager; protected void addErrorMessage(String message){ this.addActionMessage(ERROR_MESSAGE_LEFT+message+MESSAGE_RIGHT); } protected void addSuccessMessage(String message){ this.addActionMessage(SUCCESS_MESSAGE_LEFT+message+MESSAGE_RIGHT); } /** * 动态加载页签 */ public String includeWebPage() throws Exception{ webPages = indexManager.getWebpagesByUser(); StringBuilder webpageStr = new StringBuilder(); for(int i=0; i<webPages.size(); i++){ webpageStr.append(webPages.get(i).getId()); webpageStr.append("*-"); webpageStr.append(webPages.get(i).getName()); webpageStr.append("*-"); if(i==webPages.size()-1){ webpageStr.append(webPages.get(i).getUrl()); }else{ webpageStr.append(webPages.get(i).getUrl()); webpageStr.append("-="); } } renderText(webpageStr.toString()); return null; } /** * 更换主题 */ public String openTheme() throws Exception{ return "theme"; } /** * 保存主题 */ public String saveTheme() throws Exception{ indexManager.saveTheme(themeName); ContextUtils.setTheme(themeName); if(StringUtils.isNotEmpty(url)){ if(url.endsWith("#")) url = url.replace("#", ""); if(!url.contains("_r=1")){ if(url.contains("?")){ url = url + "&_r=1"; }else{ url = url + "?_r=1"; } } } Struts2Utils.getResponse().sendRedirect(url); ApiFactory.getBussinessLogService().log("portal管理", "更换主题", ContextUtils.getSystemId("portal")); return null; } /** * 添加小窗体 */ public String addWidget() throws Exception{ widgets = indexManager.getAllWidgets(webpageId); webpage = indexManager.getWebpageById(webpageId); return "widget"; } /** * 添加页签 */ public String addWebpage() throws Exception{ if(webpageId != null) webpage = indexManager.getWebpageById(webpageId); return "webpage"; } /** * 保存页签 */ public String savewebpage() throws Exception{ webpage = indexManager.saveWebpage(webpageName, columnSize, webpageId); renderText(webpage.getId()+""); ApiFactory.getBussinessLogService().log("portal管理", "保存页签", ContextUtils.getSystemId("portal")); return null; } /** * 删除页签 * @return * @throws Exception */ public String deleteWebpage() throws Exception{ indexManager.deleteWebpage(webpageId); webpageId = null; ApiFactory.getBussinessLogService().log("portal管理", "删除页签", ContextUtils.getSystemId("portal")); return RELOAD; } /** * 保存参数设置 */ @Override public String save() throws Exception { indexManager.saveParameterValues(); renderText(widgetId+""); ApiFactory.getBussinessLogService().log("portal管理", "保存参数设置", ContextUtils.getSystemId("portal")); return null; } /** * 进入参数设置 */ public String parameterSet() throws Exception{ List<WidgetParameter> widgetParameterList = indexManager.getParameters(widgetId);//执行所有参数的初始化 if(widgetParameterList.size()>0){ //初始化备选值 indexManager.initializeWidgetParameter(widgetParameterList); String webPath=ServletActionContext.getServletContext().getRealPath("/"); String webapp=ServletActionContext.getServletContext().getContextPath(); String html=FileUtils.readFileToString(new File(webPath+"templet\\widget_parameter_set_templet.ftl"),"utf-8"); Map<String, Object> root = new HashMap<String, Object>(); root.put("widgetParameterList", widgetParameterList); root.put("ctx", webapp); root.put("widgetId", widgetId); root.put("webpageId", webpageId); root.put("userId", ContextUtils.getUserId()); String result = FtlUtils.renderFile(root, html); renderText(result); }else{ renderText("false"); } return null; } /** * 小窗体最大化 * @return * @throws Exception */ public String max() throws Exception{ return "max"; } /** * 得到小窗体的位置 * @return * @throws Exception */ public String getWidgetPosition(){ renderText(indexManager.getWidgetPosition(wpId)); return null; } /** * 关闭页面小窗体 */ @Override public String delete() throws Exception { Webpage page = indexManager.getWebpageById(webpageId); page.setWidgetPosition(positions); indexManager.deleteWidget(page, widgetId); renderText(""); return null; } /** * 向页面添加小窗体 */ public String saveWidgetToPortal() throws Exception{ Webpage page = indexManager.getWebpageById(webpageId); //left=|center=|right= String[] posStrs = positions.split("\\|"); String newPos = positions; if(posStrs.length==1){//1栏 newPos = newPos+"|widget-place-center=|widget-place-right="; }else if(posStrs.length==2){//2栏 newPos = posStrs[0]+"|widget-place-center=|"+posStrs[1]; } page.setWidgetPosition(newPos); indexManager.addWidgets(page, widgetCode, position); return RELOAD; } /** * 小窗体移动后,保存小窗体的位置 */ public String savePositions() throws Exception{ Webpage page = indexManager.getWebpageById(webpageId); String[] posStrs = positions.split("\\|"); String newPos = positions; if(posStrs.length==1){//1栏 newPos = newPos+"|widget-place-center=|widget-place-right="; }else if(posStrs.length==2){//2栏 newPos = posStrs[0]+"|widget-place-center=|"+posStrs[1]; } page.setWidgetPosition(newPos); indexManager.saveWebpage(page); indexManager.refreshWidgetPosition(webpageId); renderText(""); return null; } /** * 获取小窗口的HTML */ @Override public String input() throws Exception { if(webpageId == null){ webPages = indexManager.getWebpagesByUser(); webpageId = webPages.get(0).getId(); } String html = ""; if(StringUtils.isNotEmpty(widgetCode)){ widget = indexManager.getWidgetByCode(widgetCode); html = indexManager.getWidgetHtml(widget.getId(), webpageId,pageNo); html = html+StaticVariable.PAGE_SIGN+widget.getId(); }else{ if(pageNo==null) pageNo = 1; if(StringUtils.isEmpty(widgetIdStrs)){//当切换小窗体时会走判断内部 widgetIdStrs = indexManager.getWidgetIdsByWebpage(webpageId); } html=indexManager.getWidgetHtml(widgetIdStrs, webpageId,pageNo); } renderText(html); return null; } /** * 获取通知的HTML * @return * @throws Exception */ public String getActiveNoticeHtml() throws Exception{ String html = indexManager.getActiveNoticeHtml(); renderText(html); return null; } /** * 显示默认页签所有窗体 */ @Override public String list() throws Exception { baseSetting = baseSettingManager.getBaseSettingByLonginName(); if(pageCode == null){ webPages = indexManager.getWebpagesByUser(); if(webpageId != null){ webpage = indexManager.getCurrentWebpage(webpageId); }else{ if(webPages.size()>0){ webpage = indexManager.getCurrentWebpage(webPages.get(0).getId()); } } }else{ webpage = indexManager.getWebpageByCode(pageCode); } if(webpage!=null &&webpage.getColumns() == 2){ return "two"; }else if(webpage!=null &&webpage.getColumns() == 1){ return "one"; }else{ return SUCCESS; } } /** * 显示OA直通车 * @return * @throws Exception */ public String showOADirectTrain() throws Exception{ if(ContextUtils.getUserId()==null){ htm = StaticVariable.NO_LOGIN; }else{ Widget widget = indexManager.getWidgetByName(StaticVariable.OA_DIRECT_TRAIN); if(widget!=null){ htm = indexManager.getWidgetHtml(widget.getId(), webpageId,pageNo); } } return "oa"; } /** * 显示个人事务 * @return * @throws Exception */ public String showPersonalWork() throws Exception{ if(ContextUtils.getUserId()==null){ htm = StaticVariable.NO_LOGIN; }else{ Widget widget = indexManager.getWidgetByName(StaticVariable.PERSONAL_WORK); if(widget!=null){ htm = indexManager.getWidgetHtml(widget.getId(), webpageId,pageNo); } } return "oa"; } /***********************注册小窗体************************************* /** * 显示注册小窗体页面 * @return * @throws Exception */ @Action("show-register-widget") public String showRegisterWidget() throws Exception{ businessSystems= businessSystemManager.getAllSystems(); if(businessSystems.size()>0)systemId=businessSystems.get(0).getId(); return "index-register-widget"; } /** * 显示系统小窗体列表 * @return * @throws Exception */ @Action("show-system-widget") public String showSystemWidget() throws Exception{ if(systemId==null){ businessSystems= businessSystemManager.getAllSystems(); if(businessSystems.size()>0)systemId=businessSystems.get(0).getId(); } if(widgetPage.getPageSize()>1){ indexManager.getWidgetsBySystemCode(widgetPage,businessSystemManager.getBusiness(systemId).getCode()); this.renderText(PageUtils.pageToJson(widgetPage)); ApiFactory.getBussinessLogService().log("注册小窗体", "查看列表", ContextUtils.getSystemId("portal")); return null; } return "index-register-widget"; } public void prepareRegisterWidgetInput(){ if(widgetId==null){ widget=new Widget(); }else{ widget=indexManager.getWdigetById(widgetId); } widget.setCompanyId(ContextUtils.getCompanyId()); } /** * 注册小窗体表单页面 * @return * @throws Exception */ @Action("register-widget-input") public String registerWidgetInput() throws Exception{ if(widgetId!=null){ List<WidgetRole> wrs= indexManager.getWidgetRoleByWidgetId(widgetId); if(wrs!=null){ for(WidgetRole wr:wrs){ Role role=standardRoleManager.getStandardRole(wr.getRoleId()); if(StringUtils.isEmpty(roleIds)){ roleIds=wr.getRoleId()+""; roleNames=role.getName(); }else{ if(!roleIds.contains(wr.getRoleId()+"")){ roleIds=roleIds+","+wr.getRoleId(); } if(StringUtils.isEmpty(roleNames)){ roleNames=role.getName(); }else{ roleNames=roleNames+","+role.getName(); } } } } } return "register-widget-input"; } @Action("validate-widget") public String validateWidget() throws Exception{ boolean isExist=indexManager.isWidgetExist(widgetCode,widgetId); if(isExist){//存在 this.renderText("true"); }else{ this.renderText("false"); } return null; } public void prepareSaveWidget(){ prepareRegisterWidgetInput(); BusinessSystem system=businessSystemManager.getBusiness(systemId); widget.setSystemCode(system.getCode()); } /** * 保存注册的小窗体 * @return * @throws Exception */ @Action("save-widget") public String saveWidget() throws Exception{ indexManager.saveWidget(widget,roleIds); widgetId=widget.getId(); this.addSuccessMessage("保存成功"); ApiFactory.getBussinessLogService().log("注册小窗体", "保存注册小窗体", ContextUtils.getSystemId("portal")); return registerWidgetInput(); } /** * 选择角色 * @return * @throws Exception */ @Action("select-role") public String selectRoles() throws Exception{ return "select-role"; } /** * 角色树 * @return * @throws Exception */ @Action("role-tree") public String roleTree() throws Exception{ String tree=""; List<Role> roles=standardRoleManager.getAllStandardRole(systemId); if(roles.size()<=0){ TreeNode root = new TreeNode( new TreeAttr("_role",""), "", "角色"); tree=JsonParser.object2Json(root); }else{ TreeNode root = new TreeNode( new TreeAttr("_role",""), "open", "角色"); List<TreeNode> roleNodes = new ArrayList<TreeNode>(); roleNodes= roles(roles); root.setChildren(roleNodes); tree=JsonParser.object2Json(root); } this.renderText(tree); return null; } private List<TreeNode> roles(List<Role> roles){ List<TreeNode> roleNodes = new ArrayList<TreeNode>(); for(Role role:roles){ TreeNode roleNode = new TreeNode( new TreeAttr("role-"+role.getId()+"-"+role.getName(),""), "", role.getName()); roleNodes.add(roleNode); } return roleNodes; } /** * 选项组树 * @return * @throws Exception */ @Action("option-group-tree") public String optionGroupTree() throws Exception{ StringBuilder tree=new StringBuilder(); List<OptionGroup> optionGroups = ApiFactory.getSettingService().getOptionGroups(); if(optionGroups.size()<=0){ tree.append(JsTreeUtils.generateJsTreeNodeNew("_option_group", "", "选项组", "")); }else{ tree.append(JsTreeUtils.generateJsTreeNodeNew("_option_group", "open", "选项组",optionGroupNode(optionGroups) ,"")); } this.renderText(tree.toString()); return null; } private String optionGroupNode(List<OptionGroup> optionGroups){ StringBuilder tree=new StringBuilder(); for(OptionGroup optionGroup:optionGroups){ tree.append(JsTreeUtils.generateJsTreeNodeNew("option-"+optionGroup.getId()+"-"+optionGroup.getName(), "",optionGroup.getName(),"")).append(","); } JsTreeUtils.removeLastComma(tree); return tree.toString(); } /** * 验证删除的小窗体是否被其他实体引用 * @return * @throws Exception */ @Action("validate-delete-widget") public String validateDeleteWidget() throws Exception{ this.renderText(indexManager.validateDeleteWidget(registerWidgetIds)); return null; } /** * 删除小窗体 * @return * @throws Exception */ @Action("delete-widget") public String deleteWidget() throws Exception{ indexManager.deleteWidget(registerWidgetIds); this.addSuccessMessage("删除成功"); ApiFactory.getBussinessLogService().log("注册小窗体", "删除小窗体", ContextUtils.getSystemId("portal")); return "index-register-widget"; } /** * 删除窗口参数 * @return * @throws Exception */ @Action("delete-parameter") public String deleteParameter() throws Exception{ indexManager.deleteParameter(parameterId); String callback=Struts2Utils.getParameter("callback"); this.renderText(callback+"({msg:'删除成功'})"); return null; } /***********************添加主题*************************************/ /** * 显示添加主题页面 * @return * @throws Exception */ @Action("add-theme") public String addTheme() throws Exception{ if(themePage.getPageSize()>1){ indexManager.getThemePage(themePage); this.renderText(PageUtils.pageToJson(themePage)); return null; } return "index-add-theme"; } public void prepareAddThemeSave() throws Exception { if(id==null){ theme=new Theme(); }else{ theme=indexManager.getTheme(id); } } /** * 保存主题 * @return * @throws Exception */ @Action("add-theme-save") public String addThemeSave() throws Exception { theme.setCode(code); theme.setName(name); if(dataState==null){ theme.setDataState(DataState.DRAFT); }else{ theme.setDataState(dataState); } indexManager.saveTheme(theme); this.renderText(JsonParser.getRowValue(theme)); return null; } /** * 删除主题 * @return * @throws Exception */ @Action("add-theme-delete") public String addThemeDelete() throws Exception { String deleteIds=Struts2Utils.getParameter("deleteIds"); String[] ids=deleteIds.split(","); for(String deleteId:ids){ indexManager.deleteTheme(Long.valueOf(deleteId)); } return null; } /** * 获得启用的主题 * @return * @throws Exception */ @Action("start-using-theme") public String getStartUsingTheme() throws Exception { List<Theme> themes=indexManager.getStartUsingTheme(); StringBuilder styles=new StringBuilder(); String callback=Struts2Utils.getParameter("callback"); for(Theme theme:themes){ if(StringUtils.isNotEmpty(styles.toString())){ styles.append(","); } styles.append(theme.getCode()); styles.append(","); styles.append(theme.getName()); } this.renderText(callback+"({msg:\""+styles.toString()+"\"})"); return null; } /** * 改变主题的状态 * @return * @throws Exception */ @Action("change-theme-state") public String changeThemeState() throws Exception { this.renderText(indexManager.changeThemeState(ids)); return null; } @Override public void prepareModel() throws Exception { } public Widget getModel() { return widget; } public List<Webpage> getWebPages() { return webPages; } public Long getWebpageId() { return webpageId; } public void setWebpageId(Long webpageId) { this.webpageId = webpageId; } public List<Widget> getWidgets() { return widgets; } public void setWebpageName(String webpageName) { this.webpageName = webpageName; } public void setColumnSize(int columnSize) { this.columnSize = columnSize; } public Webpage getWebpage() { return webpage; } public void setWebpage(Webpage webpage) { this.webpage = webpage; } public Long getWidgetId() { return widgetId; } public void setWidgetId(Long widgetId) { this.widgetId = widgetId; } public Widget getWidget() { return widget; } public void setWidget(Widget widget) { this.widget = widget; } public String getThemeName() { return themeName; } public void setThemeName(String themeName) { this.themeName = themeName; } public List<Long> getWidgetIds() { return widgetIds; } public void setWidgetIds(List<Long> widgetIds) { this.widgetIds = widgetIds; } public String getHtm() { return htm; } public void setWidgetCode(String widgetCode) { this.widgetCode = widgetCode; } public String getPositions() { return positions; } public void setPositions(String positions) { this.positions = positions; } public String getWpId() { return wpId; } public void setWpId(String wpId) { this.wpId = wpId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserDepart() { return userDepart; } public void setUserDepart(String userDepart) { this.userDepart = userDepart; } public String getUserSex() { return userSex; } public void setUserSex(String userSex) { this.userSex = userSex; } public Page<User> getPage() { return page; } public void setPage(Page<User> page) { this.page = page; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getNoteValue() { return noteValue; } public void setNoteValue(String noteValue) { this.noteValue = noteValue; } public Date getCountdownDate() { return countdownDate; } public void setCountdownDate(Date countdownDate) { this.countdownDate = countdownDate; } public String getCountdownName() { return countdownName; } public void setCountdownName(String countdownName) { this.countdownName = countdownName; } public String getCountdownTime() { return countdownTime; } public void setCountdownTime(String countdownTime) { this.countdownTime = countdownTime; } public String getSkipWindwo() { return skipWindwo; } public void setPosition(int position) { this.position = position; } public void setSkipWindwo(String skipWindwo) { this.skipWindwo = skipWindwo; } public String getWidgetPositions() { return widgetPositions; } public void setWidgetPositions(String widgetPositions) { this.widgetPositions = widgetPositions; } private String url; public void setUrl(String url) { this.url = url; } public String getUrl() { return url; } public List<BusinessSystem> getBusinessSystems() { return businessSystems; } public Long getSystemId() { return systemId; } public void setSystemId(Long systemId) { this.systemId = systemId; } public Page<Widget> getWidgetPage() { return widgetPage; } public void setWidgetPage(Page<Widget> widgetPage) { this.widgetPage = widgetPage; } public void setRegisterWidgetIds(String registerWidgetIds) { this.registerWidgetIds = registerWidgetIds; } public void setRoleIds(String roleIds) { this.roleIds = roleIds; } public String getRoleIds() { return roleIds; } public String getRoleNames() { return roleNames; } public void setParameterId(Long parameterId) { this.parameterId = parameterId; } public Integer getPageNo() { return pageNo; } public void setPageNo(Integer pageNo) { this.pageNo = pageNo; } public void setPageCode(String pageCode) { this.pageCode = pageCode; } public Page<Theme> getThemePage() { return themePage; } public void setThemePage(Page<Theme> themePage) { this.themePage = themePage; } public Theme getTheme() { return theme; } public void setTheme(Theme theme) { this.theme = theme; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } public DataState getDataState() { return dataState; } public void setDataState(DataState dataState) { this.dataState = dataState; } public String getIds() { return ids; } public void setIds(String ids) { this.ids = ids; } public BaseSetting getBaseSetting() { return baseSetting; } public void setBaseSetting(BaseSetting baseSetting) { this.baseSetting = baseSetting; } public void setWidgetIdStrs(String widgetIdStrs) { this.widgetIdStrs = widgetIdStrs; } }