CommonController.java 5.74 KB
package com.jflyfox.modules;

import com.jfinal.aop.Before;
import com.jflyfox.component.base.BaseProjectController;
import com.jflyfox.component.util.ImageCode;
import com.jflyfox.component.util.JFlyFoxUtils;
import com.jflyfox.jfinal.component.annotation.ControllerBind;
import com.jflyfox.modules.admin.folder.FolderService;
import com.jflyfox.modules.admin.folder.TbFolder;
import com.jflyfox.modules.admin.site.SessionSite;
import com.jflyfox.modules.front.Home;
import com.jflyfox.modules.front.interceptor.FrontInterceptor;
import com.jflyfox.system.dict.DictCache;
import com.jflyfox.system.log.SysLog;
import com.jflyfox.system.user.SysUser;
import com.jflyfox.system.user.UserCache;
import com.jflyfox.util.Config;
import com.jflyfox.util.NumberUtils;
import com.jflyfox.util.StrUtils;

/**
 * CommonController
 */
@ControllerBind(controllerKey = "/")
public class CommonController extends BaseProjectController {

    public static final String loginPage = "/login.html";
    public static final String firstPage = "/home";

    /**
     * 首页,菜单
     * <p>
     * 2015年5月25日 下午11:00:28 flyfox 369191470@qq.com
     */
    @Before(FrontInterceptor.class)
    public void index() {
        // new FrontService().menu(this);
        int folderRoot = TbFolder.ROOT;
        SessionSite site = getSessionSite();
        Integer siteFolderId = site.getModel().getSiteFolderId();
        if (siteFolderId != null && siteFolderId > 0) {
            folderRoot = siteFolderId;
        }

        String folderStr = getPara();
        Integer folderId = folderRoot;

        if (folderStr != null) {
            if (NumberUtils.parseInt(folderStr) > 0) {
                folderId = NumberUtils.parseInt(folderStr);
            } else {
                folderId = NumberUtils.parseInt(FolderService.getMenu(folderStr, site.getSiteId()));
            }
        }

        if (folderId == null || folderId <= 0) {
            folderId = folderRoot;
        }
        // 活动目录
        setAttr("folders_selected", folderId);

        TbFolder folder = new FolderService().getFolder(folderId);
        setAttr("folder", folder);

        setAttr("paginator", getPaginator());

        // seo:title优化
        String folderName = (folder == null ? "" : folder.getStr("name").equals("首页") ? "" : folder.getStr("name") + "-");
        setAttr(JFlyFoxUtils.TITLE_ATTR, folderName + getAttr(JFlyFoxUtils.TITLE_ATTR));
        // 栏目跳转规则
        String jumpUrl = folder.getJumpUrl();
        String path = folder.getPath();
        String urlKey = folder.getKey();
        if (StrUtils.isNotEmpty(jumpUrl)) {
            redirectAuto(jumpUrl);
        } else if (StrUtils.isNotEmpty(path)) {
            renderAuto(path);
        } else {
            renderAuto(Home.PATH + urlKey + ".html");
        }

    }

    /**
     * 登录
     *
     * @author flyfox 2013-11-11
     */
    @Before(FrontInterceptor.class)
    public void login() {
        // 获取验证码
        String imageCode = getSessionAttr(ImageCode.class.getName());
        String checkCode = this.getPara("imageCode");

        if (StrUtils.isEmpty(imageCode) || !imageCode.equalsIgnoreCase(checkCode)) {
            setAttr("msg", "验证码错误!");
            renderAuto(loginPage);
            return;
        }

        // 初始化数据字典Map
        String username = getPara("username");
        String password = getPara("password");

        // 新加入,判断是否有上一个页面
        String prePage = getPara("pre_page");
        String toPage = StrUtils.isEmpty(prePage) || prePage.indexOf("login") >= 0 //
                || prePage.indexOf("trans") >= 0 ? firstPage : prePage;
        setAttr("pre_page", prePage); // 如果密码错误还需要用到

        if (StrUtils.isEmpty(username)) {
            setAttr("msg", "用户名不能为空");
            renderAuto(loginPage);
            return;
        } else if (StrUtils.isEmpty(password)) {
            setAttr("msg", "密码不能为空");
            renderAuto(loginPage);
            return;
        }
        String encryptPassword = JFlyFoxUtils.passwordEncrypt(password); // 加密
        SysUser user = SysUser.dao.findFirstByWhere(" where username = ? and password = ? " //
                        + " and usertype != " + JFlyFoxUtils.USER_TYPE_THIRD // 第三方的只能通过oauth登录
                , username, encryptPassword);

        if (user == null || user.getInt("userid") <= 0) {
            setAttr("msg", "认证失败,请您重新输入。");
            renderAuto(loginPage);
            return;
        } else {
            setSessionUser(user);
        }

        // 添加日志
        user.put("update_id", user.getUserid());
        user.put("update_time", getNow());
        saveLog(user, SysLog.SYSTEM_LOGIN);

        redirect(toPage);
    }

    /**
     * 登出
     *
     * @author flyfox 2013-11-13
     */
    @Before(FrontInterceptor.class)
    public void logout() {
        SysUser user = (SysUser) getSessionUser();
        if (user != null) {
            // 添加日志
            user.put("update_id", user.getUserid());
            user.put("update_time", getNow());
            saveLog(user, SysLog.SYSTEM_LOGOUT);
            // 删除session
            removeSessionUser();
        }

        setAttr("msg", "您已退出");
        renderAuto(loginPage);
    }

    public void update_cache() {
        DictCache.init();
        UserCache.init();
        renderHtml("1");
    }

    public void trans() {
        String redirectPath = getPara();
        if (StrUtils.isEmpty(redirectPath)) {
            redirectPath = Config.getStr("PAGES.TRANS");
        } else if (redirectPath.equals("auth")) {
            redirectPath = "/pages/error/trans_no_auth.html";
        }
        render(redirectPath);
    }
}