Conception et développement d'un système de gestion de dortoirs universitaires basé sur SpringBoot

1. Introduction

Le dortoir est l'un des principaux lieux d'études et de vie des étudiants, et la gestion des dortoirs est un élément particulièrement important dans les affaires de gestion des étudiants et des travailleurs. Avec la poursuite de l'expansion de l'échelle d'inscription des collèges et universités de notre pays, le nombre total d'étudiants continue d'augmenter et le travail de gestion des dortoirs est devenu de plus en plus lourd et trivial.La collecte, le résumé, les statistiques et l'analyse des dortoirs étudiants La gestion traditionnelle Le modèle a longtemps été incapable de répondre aux besoins actuels de gestion des collèges et universités de notre pays. Par conséquent, il est urgent d'étudier, de concevoir et de développer un nouveau type de système de gestion des dortoirs universitaires afin de mieux répondre aux besoins réels de la gestion des dortoirs universitaires, de faciliter la gestion du personnel des dortoirs, d'améliorer les niveaux de gestion, d'améliorer l'efficacité du travail, d'économiser ressources humaines et matérielles, Fournir des services meilleurs et plus efficaces pour la majorité des étudiants. Sur la base du contexte ci-dessus, cet article conçoit et développe un système de gestion de dortoirs universitaires. Le système adopte l'architecture B/S, le back-end est développé sur la base du langage Java et du framework SpringBoot, le front-end est développé à l'aide du framework Layui, combiné avec HTML, JQuery, Ajax et d'autres technologies, et utilise la base de données MySQL pour stocker toutes les informations pertinentes stockage. Le système comprend principalement cinq modules fonctionnels, y compris la gestion des informations de base, la gestion des départs et des retours à l'école, la gestion de l'allocation des dortoirs, la gestion quotidienne des dortoirs et la gestion complète des requêtes. Ces fonctions sont affinées et réalisées en fonction des besoins des étudiants, des conseillers et des dortoirs. administrateurs. . Grâce à ce système, les informations pertinentes peuvent être facilement et rapidement collectées, visualisées et comptées, et affichées dans une interface graphique, qui répond mieux aux besoins des utilisateurs cibles, améliore le niveau de gestion des dortoirs et est propice à la promotion des collèges et universités de mon pays. Il s'agit d'un processus historique de réalisation de l'informatisation, de la science et de la standardisation de la gestion industrielle.

2. Technologie de développement

2.1 Cadre de démarrage de printemps 

Spring Boot est un framework open source permettant de créer rapidement des applications Spring configurables, autonomes et de qualité production. Il est basé sur le framework Spring et vise à simplifier le développement et le déploiement d'applications Spring en vertu du principe de convention sur la configuration.

Voici quelques fonctionnalités et descriptions clés du framework Spring Boot :

(1) Configuration simplifiée : Spring Boot configure les applications par convention plutôt que par configuration, permettant aux développeurs de démarrer et de développer des projets plus rapidement. Il configure automatiquement de nombreuses fonctionnalités couramment utilisées et des bibliothèques tierces, telles que les connexions aux bases de données, le développement Web, la sécurité, etc., par défaut en suivant les meilleures pratiques.

(2) Conteneur de servlet intégré : Spring Boot intègre des conteneurs de servlet intégrés (tels que Tomcat, Jetty), permettant aux développeurs de regrouper des applications Web dans des fichiers JAR exécutables indépendants sans déploiement ni configuration de serveurs externes.

(3) Gestion automatisée des dépendances : Spring Boot simplifie la gestion des dépendances du projet. Il fournit un concept appelé "Starter", un ensemble de dépendances prédéfinies pour intégrer rapidement les bibliothèques et fonctionnalités associées. Les développeurs ajoutent simplement les dépendances Starter appropriées, et Spring Boot résout et configure automatiquement les dépendances requises.

(4) Surveillance et gestion : Spring Boot fournit une multitude de fonctions de surveillance et de gestion, permettant aux développeurs de mieux comprendre les indicateurs de santé et de performance de l'application. Il intègre plusieurs outils de surveillance enfichables, tels que les vérifications de l'état, les mesures, la journalisation, etc., pour le dépannage et l'optimisation des performances.

(5) Prise en charge de l'écosystème : en tant que version dérivée du framework Spring, Spring Boot peut tirer pleinement parti de tous les aspects de l'écosystème Spring. Les développeurs peuvent facilement intégrer d'autres modules et extensions du framework Spring, tels que Spring Data, Spring Security, etc., pour fournir des fonctions plus riches et plus complètes à l'application.

En résumé, Spring Boot est un framework qui simplifie le développement d'applications Spring. Il fournit un moyen rapide et efficace de créer des applications Java grâce à des fonctionnalités telles que la convention sur la configuration, la gestion automatisée des dépendances et un conteneur de servlet intégré. Le framework Spring Boot présente de grands avantages en termes d'efficacité de développement, de maintenabilité et d'évolutivité, et est largement utilisé dans divers types de projets et d'applications.

2.2Framework MyBatis

MyBatis est un framework de couche de persistance open source utilisé pour simplifier le développement de l'accès à la base de données. Il est étroitement intégré aux applications Java et permet aux développeurs d'accéder à des bases de données relationnelles et de les exploiter grâce à une configuration simple et un mappage SQL flexible.

Voici quelques fonctionnalités et descriptions clés du framework MyBatis :

(1) Mappage SQL : MyBatis utilise XML ou des annotations pour définir le mappage SQL et mappe les objets Java aux tables de la base de données. Les développeurs peuvent écrire des instructions SQL selon leurs besoins et les lier avec des méthodes Java. Cela permet un accès et une manipulation flexibles des données.

(2) Accès simplifié aux données : MyBatis fournit une API simple et intuitive, permettant aux développeurs d'effectuer facilement diverses opérations de base de données, telles que l'insertion, la mise à jour, la suppression et la requête. Il encapsule la connexion à la base de données sous-jacente et les détails de traitement de l'ensemble de résultats, et fournit aux développeurs une interface d'opération de données pratique.

(3) SQL dynamique : MyBatis prend en charge le SQL dynamique, de sorte que les instructions SQL peuvent être combinées et épissées de manière flexible en fonction de différentes conditions. Les développeurs peuvent modifier la logique des instructions SQL en fonction des conditions d'exécution, permettant un accès et un traitement des données de niveau supérieur.

(4) Mécanisme de mise en cache : MyBatis dispose d'un mécanisme de mise en cache intégré qui peut fournir une optimisation des performances lors de l'interrogation des mêmes données plusieurs fois. Les développeurs peuvent configurer différents niveaux de mise en cache, tels que la mise en cache au niveau de la session, la mise en cache au niveau de la requête, etc., pour améliorer l'efficacité de l'accès aux données.

(5) Évolutivité : MyBatis est un framework extensible. Les développeurs peuvent étendre et personnaliser les fonctionnalités de MyBatis à l'aide du mécanisme de plug-in. Les plugins peuvent intercepter et modifier le comportement de base de MyBatis en ajoutant des intercepteurs supplémentaires pour répondre à des besoins spécifiques.

(6) Support de l'écosystème : MyBatis dispose d'un écosystème étendu et d'un support communautaire actif. Les développeurs peuvent apprendre et résoudre des problèmes grâce à des ressources telles que la documentation officielle, des exemples de code et des forums communautaires. De plus, MyBatis a également une bonne intégration avec d'autres technologies et outils tels que le framework Spring.

Dans l'ensemble, MyBatis est un cadre de couche de persistance qui simplifie l'accès à la base de données. Avec un mappage SQL flexible, une API d'accès aux données simple et un support SQL dynamique, MyBatis permet aux développeurs d'effectuer facilement des opérations de base de données. Son mécanisme de mise en cache et son évolutivité facilitent également l'optimisation et la personnalisation des performances. MyBatis est largement utilisé dans de nombreuses applications Java, en particulier dans les scénarios nécessitant des opérations SQL flexibles et un accès aux données personnalisé.

2.3 Base de données MySQL

MySQL est un système de gestion de base de données relationnelle (RDBMS) open source. C'est l'une des bases de données les plus populaires et les plus utilisées, utilisée par de nombreuses applications et sites Web pour stocker et gérer des données.

Voici quelques fonctionnalités et descriptions clés de la base de données MySQL :

(1) Base de données relationnelle : MySQL est un système de gestion de base de données relationnelle qui organise et stocke les données en fonction des concepts de tables et de relations. Les données sont stockées de manière structurée et peuvent être interrogées et gérées via SQL (Structured Query Language).

(2) Fiable et stable : MySQL est célèbre pour sa fiabilité et sa stabilité, et est largement utilisé pour traiter des données importantes. Il est hautement disponible, tolérant aux pannes et intègre les données pour les applications de toutes tailles.

(3) Multiplateforme : MySQL peut s'exécuter sur plusieurs systèmes d'exploitation, notamment Windows, Linux, Mac et UNIX. Les développeurs peuvent utiliser la même base de données MySQL sur différentes plates-formes sans modifier le code et le modèle de données.

(4) Haute performance : MySQL fonctionne bien dans le traitement de grandes quantités de données et a des vitesses de lecture et d'écriture efficaces. Il utilise des technologies telles que l'indexation, l'optimisation des requêtes et les mécanismes de mise en cache pour améliorer les performances des requêtes afin de répondre aux besoins de diverses conditions de charge.

(5) Évolutivité : MySQL a une bonne évolutivité et peut gérer de grandes quantités de données et un accès simultané élevé. Il prend en charge l'expansion verticale et l'expansion horizontale, et peut améliorer les performances et la capacité en ajoutant plus de serveurs, de partitionnement et de réplication.

(6) Sécurité : MySQL fournit une variété de fonctionnalités de sécurité pour protéger la sécurité des données. Il prend en charge des fonctions telles que l'authentification des utilisateurs, le contrôle d'accès, la transmission cryptée et l'audit des données pour empêcher les accès non autorisés et les attaques malveillantes.

(7) Fonctions riches : MySQL fournit des fonctions et des fonctionnalités riches, telles que des procédures stockées, des déclencheurs, des vues, des sauvegardes et des restaurations, etc. Il fournit également une variété de moteurs de stockage, tels que InnoDB, MyISAM, etc., et vous pouvez choisir le moteur approprié en fonction de vos besoins.

En résumé, MySQL est un système de gestion de bases de données relationnelles puissant, fiable et performant. Il est multiplateforme, extensible et riche en fonctions, et est largement utilisé dans divers types d'applications et de sites Web. MySQL dispose d'une vaste communauté d'utilisateurs et de ressources riches, fournissant un grand nombre de documents, d'exemples et de support pour permettre aux développeurs de mieux gérer et exploiter la base de données.

3. Conception fonctionnelle

Grâce à l'enquête et à l'analyse des processus opérationnels pertinents dans le travail de gestion des dortoirs, il est déterminé que les principales fonctions du système sont :
(1) Gestion des informations de base Les informations de base sont divisées en informations sur les étudiants et les informations sur les dortoirs.Sa fonction est de maintenir ces informations, de les ajouter, de les supprimer, de les vérifier et de les modifier.
(2) Gestion de l'attribution des dortoirs Selon les informations sur les dortoirs et les informations sur les étudiants, les dortoirs sont automatiquement attribués aux étudiants qui n'ont pas reçu de dortoirs selon certaines règles. Les étudiants peuvent choisir leurs propres lits dans le dortoir et les informations finales sur l'attribution des dortoirs peuvent être sous forme de fichiers (tels que tableau Excel) d'exportation.
(3) La gestion quotidienne du dortoir comprend principalement la gestion de l'assainissement, la gestion des rapports de réparation, la gestion des messages, etc. Gestion de l'assainissement : enregistrer et conserver les informations d'inspection de l'assainissement. Gestion des rapports de réparation : ajoutez, affichez et modifiez les informations du rapport de réparation. Gestion des messages : y compris la publication d'annonces, les messages perdus et trouvés, les messages généraux et la maintenance de ces messages.
(4) Gestion du départ et du retour à l'école. Des statistiques et une gestion sont effectuées sur la localisation des élèves pendant les vacances, les élèves restant à l'école pendant les vacances d'hiver et d'été, et les informations d'inscription pour le retour à l'école, et présentent des informations statistiques sous forme de graphiques .
(5) La gestion complète des requêtes comprend la recherche d'informations sur les étudiants, l'attribution de dortoirs d'étudiants pour chaque bâtiment / majeur, l'état de l'inspection sanitaire, des informations sur les étudiants quittant et retournant à l'école et restant à l'école, laisser des messages de types spécifiés, vérifier les membres du dortoir, etc. .
La clientèle de ce système est principalement divisée en trois types d'utilisateurs : les étudiants, les conseillers et les administrateurs de dortoir. Différents types d'utilisateurs ont des exigences différentes pour les fonctions du système.
(1) Les étudiants peuvent choisir un lit, vérifier leur dortoir et les informations de leur personnel de dortoir ; remplir, vérifier et modifier leur rapport de réparation de dortoir ; vérifier la situation de l'inspection sanitaire hebdomadaire ; remplir les informations d'inscription à la sortie de l'école pendant les vacances et soumettre pendant les vacances d'hiver et d'été Faites une demande pour rester à l'école et remplissez les informations d'inscription pour la rentrée scolaire ; consultez les annonces sur le babillard électronique, les informations perdues et trouvées, publiez des messages, etc. ; modifiez vos informations de base et le mot de passe de votre compte.

(2) conseiller

Responsable du maintien des informations de base sur les étudiants ; vérification des informations sur l'attribution des dortoirs des étudiants ; vérification de la localisation des étudiants pendant les vacances et des informations sur le retour à l'école ; vérification et approbation des demandes des étudiants pour rester à l'école pendant les vacances d'hiver et d'été ; vérification de l'état de l'inspection sanitaire des étudiants. 

(3) Administrateur de dortoir

Responsable de la mise à jour des informations sur les dortoirs ; attribuer des dortoirs aux nouveaux étudiants ; gérer les demandes de réparation des étudiants ; publier des annonces, des informations perdues et trouvées sur les babillards électroniques ; vérifier les informations sur les étudiants qui restent à l'école pendant les vacances d'hiver et d'été ; effectuer des inspections sanitaires hebdomadaires et enregistrer les résultats des inspections dans le système.

4. Réalisez l'affichage de l'effet

(1) Se connecter

Afin d'assurer la sécurité du système, les utilisateurs doivent se connecter avant d'entrer dans le système et ne peuvent entrer dans le système qu'après avoir passé le contrôle de légalité du compte. L'interface de connexion est illustrée à la figure 4.1. L'utilisateur saisit les informations de compte et clique sur le bouton "Connexion" pour soumettre les données du formulaire au backend. S'il existe des informations utilisateur correspondantes, le système passera à la page avec l'autorité correspondante ; sinon, la vérification échoue et le système affichera une invite d'erreur.

(2) Côté étudiant

La page principale du terminal étudiant est illustrée à la figure 4.2. Ses fonctions comprennent principalement mon dortoir, l'enregistrement pour le départ et le retour à l'école, le babillard électronique, la gestion des informations de base, etc.

 Mon dortoir

Les étudiants peuvent afficher des informations sur leur dortoir et leurs colocataires. Si c'est la première fois qu'ils entrent dans le système, le système invitera les étudiants à choisir un lit. L'interface de sélection des lits est illustrée à la figure 4.3. Les étudiants peuvent choisir le lit qu'ils souhaitent parmi les lits non sélectionnés en fonction de la disposition du dortoir fournie par le système.
Mon rapport de réparation

 Les étudiants peuvent afficher les informations du rapport de réparation du dortoir (y compris celles soumises par eux-mêmes et d'autres), remplir et modifier les informations du rapport de réparation, mais seul le rapport de réparation soumis par eux-mêmes peut être modifié, et seuls les rapports non traités, en cours et celles traitées peuvent être modifiées. Les informations de réparation ne peuvent pas être modifiées.

 Dossiers d'inspection sanitaire

Les étudiants peuvent vérifier l'état de l'inspection sanitaire de leur propre dortoir, et le système donnera la priorité à l'affichage des enregistrements récents, et le système mettra en évidence les enregistrements non qualifiés (moins de 60 points) pour rappeler aux étudiants.

  Inscription aux congés scolaires

 Le système affichera toutes les informations d'inscription de fin d'études de l'élève, et les étudiants peuvent également soumettre et modifier les informations d'inscription sous cette page. Lors du remplissage, les élèves doivent choisir le type de destination. S'ils rentrent chez eux ou sortent, ils doivent remplir la destination, l'heure de retour et le contact d'urgence. S'ils restent à l'école, les trois informations ci-dessus n'ont pas besoin être rempli.

Demande de rester à l'école

 Les étudiants qui doivent rester à l'école pendant les vacances d'hiver et d'été doivent soumettre une demande de séjour à l'école au collège. La page de remplissage de la demande est illustrée à la figure 4.8.Les élèves doivent expliquer la raison de leur séjour à l'école, la date limite pour rester à l'école et fournir une image de l'accord manuscrit du parent pour rester à l'école et un engagement de garantie de sécurité.

 Retour à l'inscription à l'école

 Lorsque l'école commence, les élèves doivent remplir les informations de retour.Le contenu principal comprend s'il faut retarder le retour à l'école, l'heure du retour, la raison du retard, le mode de transport et le nombre de trains.

(3) babillard

 Ici, les étudiants peuvent vérifier les informations de message pertinentes du bâtiment dans lequel ils se trouvent, y compris les annonces, les messages perdus et trouvés et les messages généraux ; ils peuvent également publier des messages pour communiquer avec les autres, modifier et afficher leurs propres messages, etc. Les informations de message sont affichées sous la forme d'un signe et différents types de messages utilisent différentes couleurs d'arrière-plan pour les distinguer.

(4) Borne du conseiller 

La page principale du terminal du conseiller est illustrée à la figure 4.11. Elle implémente principalement la gestion des affaires étudiantes et la visualisation des affaires liées aux dortoirs, y compris trois modules : la gestion des étudiants, la gestion de la rentrée scolaire et la gestion de la santé.
​​​

  Gestion des étudiants

Il effectue principalement des opérations telles que l'ajout, la suppression, la vérification et la modification des informations sur les étudiants. L'ajout est divisé en ajout d'informations uniques et en ajout par lots. La page d'ajout d'un seul élément d'information est illustrée à la figure 4. 12. Le conseiller doit entrer les informations sur le collège, la majeure, la classe, le nom et l'identité de l'étudiant. L'ajout par lots est réalisé en important des tableaux Excel. Le tuteur remplit les informations sur l'étudiant dans le modèle Excel donné, clique sur le bouton "Importer" pour télécharger le fichier, et le backend analyse chaque ligne du tableau dans une information sur l'étudiant et insère par lots dans la base de données.

 

 Gestion des dortoirs

 Les conseillers peuvent afficher les informations d'attribution des dortoirs des étudiants par majeure et par classe, et peuvent également exporter les informations d'attribution dans un fichier Excel.

 Gestion des sorties scolaires - gestion des destinations de vacances

 Il est utilisé pour afficher les informations de localisation des étudiants pendant les vacances, qui peuvent être visualisées par type de localisation (rester à l'école, rentrer à la maison, sortir).Le système compte également le nombre et la proportion de chaque type d'étudiants et les affiche. sous forme de camemberts.

  Gestion des sorties scolaires - gestion des séjours de vacances

Il est principalement utilisé pour afficher et approuver les informations de candidature des étudiants séjournant à l'école pendant les vacances. Le système prend également en charge l'exportation de ces informations et compte également le nombre d'étudiants séjournant à l'école dans chaque zone de dortoir et l'affiche dans un graphique à secteurs. .

   Gestion de la sortie de l'école - retour à la gestion de l'école

Il est utilisé pour afficher et exporter le statut de retour à l'école de chaque élève, et réalise également les statistiques d'information sur le retour à l'école à temps et le retour à l'école retardé.

(5) Dortoir côté administrateur

L'interface de l'administrateur du dortoir est illustrée à la figure 4.19 ci-dessous. Elle comprend principalement quatre fonctions : la gestion du dortoir, la gestion du séjour, la gestion du dortoir et la gestion quotidienne, et est utilisée pour gérer les affaires du dortoir.

 

  Gestion des dortoirs

Réalisé la maintenance des informations du dortoir. Le système prend en charge l'ajout d'informations sur les dortoirs individuels et l'ajout de lots, et l'ajout de lots est réalisé via l'importation d'Excel. Vous pouvez rechercher des informations sur le dortoir en spécifiant la zone du dortoir, le bâtiment, le dortoir et le statut d'occupation (plein/pas plein).

  Gestion des hébergements - gestion des pré-attributions

Le système attribue des dortoirs aux étudiants qui n'ont pas reçu de dortoirs, principalement pour les étudiants de première année. Le système trouve la liste des étudiants qui n'ont pas reçu de dortoirs et la liste des dortoirs avec des lits vacants à partir des données, et organise les étudiants dans les dortoirs vacants par ordre de nombre d'étudiants de petit à grand selon le principe de donner la priorité aux même sexe, même collège, même majeure et même classe moyenne. Chaque fois qu'un étudiant est affecté, le numéro de vacance du dortoir sera réduit de 1. Lorsque le numéro de vacance du dortoir est 0, les étudiants de suivi seront placés dans le dortoir suivant jusqu'à ce que tous les étudiants soient affectés.

5. Code de base

@Controller
@RequestMapping("/dm")
public class DorMController {

    @Resource
    private DorMService dormService;

    /**
     * 卫生检查列表
     *
     * @return
     */
    @RequestMapping(value = "/cleanList")
    public String cleanList() {
        return "/dm/clean-list";
    }

    /**
     * 查看卫生检查情况
     *
     * @param ciVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/clean/list")
    public DataGridViewResult findCleanInfoList(CleanInfoVo ciVo, HttpServletRequest request) {
        // 获取宿管员管理的宿舍区和楼栋号,拼接成brcode
        String brarea = (String) request.getSession().getAttribute("brarea");
        String brbid = (String) request.getSession().getAttribute("brbid");
        String brcode = MyStringUtil.getBrcode(brarea, brbid, "");
        if (StringUtils.isNotBlank(brcode)) {
            ciVo.setBrcode(brcode);
        }
        System.out.println(ciVo);

        // 设置分页信息
        PageHelper.startPage(ciVo.getPage(), ciVo.getLimit());
        // 查询
        List<CleanInfo> list = dormService.findCleanInfoListByPage(ciVo);
        // 创建分页对象
        PageInfo<CleanInfo> pageInfo = new PageInfo<CleanInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 更改卫生检查信息
     *
     * @param ci
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/clean/update")
    public String updateCleanInfo(CleanInfo ci) {
        System.out.println(ci);
        HashMap<String, Object> map = new HashMap<>();
        int result = dormService.updateCleanInfo(ci);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "更改成功!");
        } else {
            map.put("success", false);
            map.put("msg", "更改失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 删除卫生检查记录
     *
     * @param id
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/clean/delete")
    public String deleteCleanInfo(String id) {
        System.out.println(id);
        HashMap<String, Object> map = new HashMap<>();
        int result = dormService.deleteCleanInfo(id);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "删除成功!");
        } else {
            map.put("success", false);
            map.put("msg", "删除失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 返回添加卫生检查记录页面
     *
     * @return
     */
    @RequestMapping(value = "/clean/add.html")
    public String addCleanInfo() {
        return "/dm/clean-add";
    }

    /**
     * 批量添加卫生检查记录
     *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/clean/add")
    public String batchAddCleanInfo(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String params = request.getParameter("params");
        String checker = (String) request.getSession().getAttribute("uname");
        try {
            boolean result = dormService.batchInsertCleanInfo(params, checker);
            if (result) {
                map.put("success", true);
                map.put("msg", "添加成功!");
            } else {
                map.put("success", false);
                map.put("msg", "添加失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("success", false);
            map.put("msg", "添加失败!");
        }
        return JSON.toJSONString(map);
    }


    /**
     * 学生报修列表
     *
     * @return
     */
    @RequestMapping(value = "/repairList")
    public String viewRepairList() {
        return "/dm/repair-list";
    }

    /**
     * 查找该宿管员负责的楼栋下的报修信息
     *
     * @param riVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/repair/list")
    public DataGridViewResult findRepairInfoList(RepairInfoVo riVo, HttpServletRequest request) {
        // 拼接brcode
        String brarea = (String) request.getSession().getAttribute("brarea");
        String brbid = (String) request.getSession().getAttribute("brbid");
        if (StringUtils.isBlank(brarea)) {
            brarea = riVo.getBrarea();
        }
        if (StringUtils.isBlank(brbid)) {
            brbid = riVo.getBrbid();
        }
        String brcode = MyStringUtil.getBrcode(brarea, brbid, "");
        if (StringUtils.isNotBlank(brcode)) {
            riVo.setBrcode(brcode);
        }
        System.out.println(riVo);

        // 设置分页信息
        PageHelper.startPage(riVo.getPage(), riVo.getLimit());
        // 查询
        List<RepairInfo> list = dormService.findRepairInfoListByPage(riVo);
        // 创建分页对象
        PageInfo<RepairInfo> pageInfo = new PageInfo<RepairInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 查看报修详情
     *
     * @return
     */
    @RequestMapping(value = "/repair/detail.html")
    public String repairDetail() {
        return "/dm/repair-detail";
    }


    /**
     * 导出报修数据
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @RequestMapping(value = "/repair/export.action")
    public void exportToExcel(HttpServletRequest request, HttpServletResponse response) {
        HashMap<String, Object> map = new HashMap<>();
        response.reset();// 清除缓存

        // 获取宿管员管理的宿舍区和楼栋号,拼接成brcode
        String brarea = (String) request.getSession().getAttribute("brarea");
        String brbid = (String) request.getSession().getAttribute("brbid");
        String brcode = MyStringUtil.getBrcode(brarea, brbid, "");
        String status = request.getParameter("status");

        System.out.println("status" + status);
        System.out.println("brcode" + brcode);
        // 根据条件查找报修列表
        List<RepairInfo> list = dormService.exportRepairInfo(brcode, status);

        // 拼接excel表名
        StringBuffer filenamebuffer = new StringBuffer();
        if (StringUtils.isNotBlank(brcode)) {
            filenamebuffer.append(brcode);
            filenamebuffer.append("-");
        }
        filenamebuffer.append("报修表");
        String filename = filenamebuffer.toString();
        try {
            ExcelUtils.writeExcel(filename, response, list, RepairInfo.class);
            map.put("success", true);
            map.put("msg", "导出成功!");
            System.out.println(JSON.toJSONString(map));
        } catch (Exception e) {
            e.printStackTrace();
            map.put("success", false);
            map.put("msg", "导出失败!");
        }
//        return JSON.toJSONString(map);
    }

    /**
     * 批量更改报修状态
     *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/repair/edit")
    public String editRepairStatus(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String params = request.getParameter("params");
        if (StringUtils.isNotBlank(params)) {
            boolean result = dormService.batchEditRepairStatus(params);
            if (result) {
                map.put("success", true);
                map.put("msg", "更改成功!");
                return JSON.toJSONString(map);
            } else {
                map.put("success", false);
                map.put("msg", "更改失败!");
                return JSON.toJSONString(map);
            }
        }
        map.put("success", false);
        map.put("msg", "更改失败!请选择要更改的行。");
        return JSON.toJSONString(map);
    }

    /**
     * 学生报修列表
     *
     * @return
     */
    @RequestMapping(value = "/buildroomList")
    public String viewBuildRoomList() {
        return "/dm/buildroom-list";
    }

    /**
     * 查看宿舍信息
     *
     * @param biVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/buildroom/list")
    public DataGridViewResult findBuildRoomInfo(BuildRoomInfoVo biVo, HttpServletRequest request) {
        // 拼接brcode
        String brarea = (String) request.getSession().getAttribute("brarea");
        if (StringUtils.isBlank(brarea)) {
            brarea = biVo.getBrarea();
        }
        /*
         * 如果管理员负责具体的一栋楼,则只能查询本栋楼有关的宿舍信息;
         * 如果是负责一个区,则可以查询这个区下所有楼的宿舍信息
         * session中没有brbid说明是负责一个区的,此时按照用户输入的楼栋数来进行查询
         */
        String brbid = (String) request.getSession().getAttribute("brbid");
        if (StringUtils.isBlank(brbid)) {
            brbid = biVo.getBrbid();
        }
        String brrid = biVo.getBrrid();
        String brcode = MyStringUtil.getBrcode(brarea, brbid, brrid);
        if (StringUtils.isNotBlank(brcode)) {
            biVo.setBrcode(brcode);
        }
        System.out.println(biVo);

        // 设置分页信息
        PageHelper.startPage(biVo.getPage(), biVo.getLimit());
        // 查询
        List<RepairInfo> list = dormService.findBuildRoomInfoListByPage(biVo);
        // 创建分页对象
        PageInfo<RepairInfo> pageInfo = new PageInfo<RepairInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 单个添加宿舍信息
     *
     * @param bi
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/buildroom/add")
    public String addBuildRoomInfo(BuildRoomInfo bi) {
        HashMap<String, Object> map = new HashMap<>();
        // 拼接brcode,如果brcode是空,说明宿舍信息错误了
        String brarea = bi.getBrarea();
        String brbid = bi.getBrbid();
        String brrid = bi.getBrrid();
        String brcode = MyStringUtil.getBrcode(brarea, brbid, brrid);
        if (StringUtils.isBlank(brcode)) {
            map.put("success", false);
            map.put("msg", "添加失败!宿舍信息错误!");
            return JSON.toJSONString(map);
        }

        // 计算空余数
        Integer free = bi.getVolume() - bi.getPeople();
        if (free < 0) {
            map.put("success", false);
            map.put("msg", "添加失败!入住数不能大于床位数!");
            return JSON.toJSONString(map);
        }

        bi.setBrcode(brcode);
        bi.setFree(free);
        System.out.println(bi);
        List<BuildRoomInfo> list = new ArrayList<>();
        list.add(bi);

        boolean result = dormService.addBuildRoomInfo(list);
        if (result) {
            map.put("success", true);
            map.put("msg", "添加成功!");
        } else {
            map.put("success", false);
            map.put("msg", "添加失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 导入宿舍信息
     *
     * @param file excel表格
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/buildroom/import.action")
    public String importExcel(@RequestParam("file") MultipartFile file) {
        HashMap<String, Object> map = new HashMap<>();
        try {
            List<BuildRoomInfo> list = ExcelUtils.readExcel("", BuildRoomInfo.class, file);
            // 拼接brcode和计算空余数
            for (int i = 0; i < list.size(); i++) {
                String brarea = list.get(i).getBrarea();
                String brbid = list.get(i).getBrbid();
                String brrid = list.get(i).getBrrid();
                String brcode = MyStringUtil.getBrcode(brarea, brbid, brrid);
                Integer free = list.get(i).getVolume() - list.get(i).getPeople();
                list.get(i).setBrcode(brcode);
                list.get(i).setFree(free);
            }
            boolean result = dormService.addBuildRoomInfo(list);
            if (result) {
                map.put("code", 200);
                map.put("msg", "导入成功!");
                map.put("data", null);
            } else {
                map.put("code", 500);
                map.put("msg", "导入失败!");
                map.put("data", null);
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("code", 500);
            map.put("msg", "导入失败!");
            map.put("data", null);
        }
        return JSON.toJSONString(map);
    }

    /**
     * 更改宿舍信息
     *
     * @param bi
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/buildroom/update")
    public String updateBuildRoomInfo(BuildRoomInfo bi) {
        HashMap<String, Object> map = new HashMap<>();
        try {
            // 如果入住数小于等于床位数,则执行更新操作,否则返回提示
            Integer free = bi.getVolume() - bi.getPeople();
            if (free >= 0) {
                bi.setFree(free);
                System.out.println(bi);
                int result = dormService.updateBuildRoomInfo(bi);
                // 返回值大于0表示成功执行了更改操作,小于0表示发生了异常
                if (result > 0) {
                    map.put("success", true);
                    map.put("msg", "更改成功!");
                    return JSON.toJSONString(map);
                } else {
                    map.put("success", false);
                    map.put("msg", "更改失败!");
                    return JSON.toJSONString(map);
                }
            } else {
                map.put("success", false);
                map.put("msg", "更改失败!入住数不能大于床位数!");
                return JSON.toJSONString(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("success", false);
            map.put("msg", "更改失败!");
            return JSON.toJSONString(map);
        }
    }

    /**
     * 删除宿舍信息
     *
     * @param brcode
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/buildroom/delete")
    public String deleteBuildRoomInfo(String brcode) {
        System.out.println(brcode);
        HashMap<String, Object> map = new HashMap<>();
        int result = dormService.deleteBuildRoomInfo(brcode);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "删除成功!");
        } else {
            map.put("success", false);
            map.put("msg", "删除失败!");
        }
        return JSON.toJSONString(map);
    }

    @RequestMapping(value = "/messageList")
    public String viewMessageBoard() {
        return "/dm/message-list";
    }


    /**
     * 公告管理、失物招领
     *
     * @param mbVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/message/list")
    public DataGridViewResult findMessageList(MessageBoardVo mbVo, HttpServletRequest request) {
        // 获取当前管理员的管理区域
        // 如果管理员负责众多楼栋,则按查询条件的宿舍区和楼栋来查,否则只能查他所负责的楼栋的公告信息
        String brarea = (String) request.getSession().getAttribute("brarea");
        String brbid = (String) request.getSession().getAttribute("brbid");
        if (StringUtils.isBlank(brarea)) {
            brarea = mbVo.getBrarea();
        }
        if (StringUtils.isBlank(brbid)) {
            brbid = mbVo.getBrbid();
        }
        String brcode = MyStringUtil.getBrcode(brarea, brbid, "");
        mbVo.setBrcode(brcode);
        System.out.println(mbVo);

        // 设置分页信息
        PageHelper.startPage(mbVo.getPage(), mbVo.getLimit());
        // 查询
        List<MessageBoard> list = dormService.findMessageListByPage(mbVo);
        // 创建分页对象
        PageInfo<MessageBoard> pageInfo = new PageInfo<MessageBoard>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 添加公告/失物招领信息
     *
     * @param mb
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/message/add")
    public String addMessage(MessageBoard mb, HttpServletRequest request) {
        // announcer是管理员的uname
        String uname = (String) request.getSession().getAttribute("uname");
        mb.setAnnouncer(uname);

        HashMap<String, Object> map = new HashMap<>();
        int result = dormService.addMessage(mb);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "添加成功!");
        } else {
            map.put("success", false);
            map.put("msg", "添加失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 更新公告/失物招领
     *
     * @param mb
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/message/update")
    public String updateMessage(MessageBoard mb) {
        // 拼接brcode
        String brcode = MyStringUtil.getBrcode(mb.getBrarea(), mb.getBrbid(), "");
        mb.setBrcode(brcode);

        System.out.println(mb);

        HashMap<String, Object> map = new HashMap<>();
        int result = dormService.updateMessage(mb);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "更改成功!");
        } else {
            map.put("success", false);
            map.put("msg", "更改失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 批量删除公告/失物招领信息
     *
     * @param request 获取前端传来的id数组
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/message/delete")
    public String deleteMessage(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String params = request.getParameter("params");
        System.out.println(params);
        try {
            if (StringUtils.isNotBlank(params)) {
                // 获取id数组
                JSONArray jsonArray = JSONArray.parseArray(params);
                List<Integer> list = new ArrayList<>();
                for (int i = 0; i < jsonArray.size(); i++) {
                    JSONObject obj = jsonArray.getJSONObject(i);
                    Integer id = (Integer) obj.get("id");
                    System.out.println(id);
                    list.add(id);
                }
                boolean result = dormService.deleteMessage(list);
                if (result) {
                    map.put("success", true);
                    map.put("msg", "删除成功!");
                } else {
                    map.put("success", false);
                    map.put("msg", "删除失败!");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("success", false);
            map.put("msg", "删除失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 留校信息列表
     *
     * @return
     */
    @RequestMapping(value = "/stayinList")
    public String viewStayInfoList() {
        return "/dm/stayin-list";
    }

    /**
     * 查找留校信息列表
     *
     * @param stVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/list")
    public DataGridViewResult findStayInfoListByPage(StayInfoVo stVo, HttpServletRequest request) {
        String brarea = (String) request.getSession().getAttribute("brarea");
        String brbid = (String) request.getSession().getAttribute("brbid");
        if (StringUtils.isNotBlank(brarea)) {
            stVo.setBrarea(brarea);
        }
        if (StringUtils.isNotBlank(brbid)) {
            stVo.setBrbid(brbid);
        }
        System.out.println(stVo);
        // 设置分页信息
        PageHelper.startPage(stVo.getPage(), stVo.getLimit());
        // 查询
        List<StayInfo> list = dormService.findStayInfoListByPage(stVo);
        // 创建分页对象
        PageInfo<StayInfo> pageInfo = new PageInfo<StayInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 导出学生留校信息
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/export.action")
    public void exportStayInfoToExcel(HttpServletRequest request, HttpServletResponse response) {
        response.reset();// 清除缓存
        String brarea = (String) request.getSession().getAttribute("brarea");
        String brbid = (String) request.getSession().getAttribute("brbid");
        // 查找学生登记信息
        List<StayInfo> list = dormService.exportStayInfo(brarea, brbid);

        // 拼接excel表名
        StringBuffer filenamebuffer = new StringBuffer();
        if (StringUtils.isNotBlank(brarea)) {
            filenamebuffer.append(brarea);
            filenamebuffer.append("-");
        }
        if (StringUtils.isNotBlank(brbid)) {
            filenamebuffer.append(brbid);
            filenamebuffer.append("栋-");
        }
        filenamebuffer.append("学生留校信息");
        String filename = filenamebuffer.toString();
        try {
            ExcelUtils.writeExcel(filename, response, list, StayInfo.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取留校申请中的统计数据
     *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/echartsData")
    public String getStayInfoEchartsData(HttpServletRequest request) {
        String brarea = (String) request.getSession().getAttribute("brarea");
        String brbid = (String) request.getSession().getAttribute("brbid");
        JSONObject data = dormService.getStayInfoEchartsData(brarea, brbid);
        System.out.println(JSON.toJSONString(data));
        return JSON.toJSONString(data);
    }

    /**
     * 预分配宿舍界面
     *
     * @return
     */
    @RequestMapping(value = "/allocation/pre")
    public String preAllocateDorm() {
        return "/dm/pre-allocate";
    }

    /**
     * 查找空余寝室
     *
     * @param biVo
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/room/list")
    public DataGridViewResult getFreeRoomList(BuildRoomInfoVo biVo) {
        System.out.println(biVo);
        // 设置分页信息
        PageHelper.startPage(biVo.getPage(), biVo.getLimit());
        // 查询
        List<BuildRoomInfo> list = dormService.findFreeRoomListByPage(biVo);
        // 创建分页对象
        PageInfo<BuildRoomInfo> pageInfo = new PageInfo<BuildRoomInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 查找未分配寝室的学生
     *
     * @param siVo
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/student/list")
    public DataGridViewResult getNotAllocateStudentList(StudentInfoVo siVo) {
        System.out.println(siVo);
        // 设置分页信息
        PageHelper.startPage(siVo.getPage(), siVo.getLimit());
        // 查询
        List<StudentInfo> list = dormService.findNotAllocateStudentListByPage(siVo);
        // 创建分页对象
        PageInfo<StudentInfo> pageInfo = new PageInfo<StudentInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    @ResponseBody
    @RequestMapping(value = "/allocation/doAllocate")
    public String doAllocate(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String room = request.getParameter("room");
        String student = request.getParameter("student");
        System.out.println(room);
        System.out.println(student);
        map.put("msg", "接受到数据");
        return JSON.toJSONString(map);
    }

    /**
     * 判断床位数够不够
     *
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/allocation/isEnough")
    public String judgeIsEnough() {
        HashMap<String, Object> map = new HashMap<>();
        boolean enough = dormService.judgeIsEnough();
        if (enough) {
            map.put("success", true);
        } else {
            map.put("success", false);
            map.put("msg", "床位数不够,请先添加空余宿舍信息!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 全部分配
     *
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/allocation/assignAll")
    public String assignAll() {
        HashMap<String, Object> map = new HashMap<>();
        boolean success = dormService.doAssignAll();
        if (success) {
            map.put("success", true);
            map.put("msg", "分配完毕,分配结果显示在当前页面下方。");
        } else {
            map.put("success", false);
            map.put("msg", "分配失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 显示分配结果
     *
     * @param aiVo
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/allocation/result")
    public DataGridViewResult viewAllocateResult(AllocationInfoVo aiVo) {
        // 设置分页信息
        PageHelper.startPage(aiVo.getPage(), aiVo.getLimit());
        // 查询
        List<AllocationInfo> list = dormService.viewAllocateResult(aiVo);
        // 创建分页对象
        PageInfo<AllocationInfo> pageInfo = new PageInfo<AllocationInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }


    /**
     * 宿舍分配列表
     *
     * @return
     */
    @RequestMapping(value = "/allocation/list")
    public String allocationList() {
        return "/dm/allocation-list";
    }


    /**
     * 查询宿舍分配信息
     * 查询条件:专业/年级
     *
     * @param aiVo
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/allocation/info")
    public DataGridViewResult findAllocationInfoList(AllocationInfoVo aiVo, HttpServletRequest request) {
        String brarea = (String) request.getSession().getAttribute("brarea");
        String brbid = (String) request.getSession().getAttribute("brbid");
        if (StringUtils.isNotBlank(brarea)) {
            aiVo.setBrarea(brarea);
        }
        if (StringUtils.isNotBlank(brbid)) {
            aiVo.setBrbid(brbid);
        }
        System.out.println(aiVo);
        // 设置分页信息
        PageHelper.startPage(aiVo.getPage(), aiVo.getLimit());
        // 查询
        List<AllocationInfo> list = dormService.findAllocationInfoListByPage(aiVo);
        // 创建分页对象
        PageInfo<AllocationInfo> pageInfo = new PageInfo<AllocationInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }


    /**
     * 导出学生宿舍分配信息
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @RequestMapping(value = "/allocation/export.action")
    public void exportAllocationInfoToExcel(HttpServletRequest request, HttpServletResponse response) {
        response.reset();// 清除缓存
        String brarea = (String) request.getSession().getAttribute("brarea");
        String brbid = (String) request.getSession().getAttribute("brbid");
        // 查找宿舍分配信息
        List<AllocationInfo> list = dormService.exportAllocationInfo(brarea, brbid);

        // 拼接excel表名
        StringBuffer filenamebuffer = new StringBuffer();
        if (StringUtils.isNotBlank(brarea)) {
            filenamebuffer.append(brarea);
            filenamebuffer.append("-");
        }
        if (StringUtils.isNotBlank(brbid)) {
            filenamebuffer.append(brbid);
            filenamebuffer.append("栋-");
        }
        filenamebuffer.append("学生宿舍分配名单");
        String filename = filenamebuffer.toString();
        try {
            ExcelUtils.writeExcel(filename, response, list, AllocationInfo.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
@Controller
@RequestMapping("/")
public class IndexController {
    @Resource
    private IndexService indexService;
    @Resource
    private MenuService menuService;

    public String index() {
        return "index";
    }

    @RequestMapping(value = "/login.html")
    public String toLogin() {
        return "/login";
    }

    @RequestMapping(value = "/home.html")
    public String home() {
        return "/home";
    }


    /**
     * 验证登录
     *
     * @param re      前端返回的参数
     * @param session 将用户信息添加到session中
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/login.action")
    public String loginAction(@RequestBody Map<String, String> re, HttpSession session) {
        String uid = re.get("username");
        String upwd = re.get("password");
        Integer utype = Integer.parseInt(re.get("type"));
        System.out.println(utype);
        Users user = indexService.findUserByuId(uid, upwd, utype);
        Map<String, Object> map = new HashMap<>();
        if (user != null) {
            session.setAttribute("uid", uid);
            session.setAttribute("uname", user.getUname());
            session.setAttribute("utype", utype);
            // 如果是教师或宿管员,还要把他们负责的部门(专业年级/宿舍楼)记下
            if (utype == 1) {
                session.setAttribute("dept", user.getDept());
                session.setAttribute("grade", user.getGrade());
            } else if (utype == 2) {
                session.setAttribute("brarea", user.getBrarea());
                session.setAttribute("brbid", user.getBrbid());
            }
            map.put("type", "success");
        } else {
            map.put("type", "error");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 退出登录
     *
     * @param session
     * @return 返回到登录界面
     */
    @RequestMapping(value = "/logout.action")
    public String logout(HttpSession session) {
        // 清空session中的属性
        session.removeAttribute("uid");
        session.removeAttribute("uname");
        session.removeAttribute("utype");
        //让session无效
        session.invalidate();
        return "redirect:/login";
    }

    @ResponseBody
    @RequestMapping(value = "/api/loadMenuList")
    public String loadMenuList(HttpSession session) {
        Integer utype = (Integer) session.getAttribute("utype");
        String initJson = menuService.loadMenuList(utype);
        System.out.println(initJson);
        return initJson;
    }

    /**
     * 基本资料
     *
     * @param session
     * @return
     */
    @RequestMapping(value = "/basic-info.html")
    public String setBasicInfo(HttpSession session) {
        Integer utype = (Integer) session.getAttribute("utype");
        // 是学生则返回学生的界面
        if (utype == 0) {
            return "/student/basic-info";
        } else {
            return "/basic-info";
        }
    }


    /**
     * 修改密码
     *
     * @return
     */
    @RequestMapping(value = "/password-setting.html")
    public String setPassword() {
        return "/password-setting";
    }

    @ResponseBody
    @RequestMapping(value = "/updatePassword.action")
    public String updatePassword(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();

        String uid = (String) request.getSession().getAttribute("uid");
        Integer utype = (Integer) request.getSession().getAttribute("utype");
        String param = request.getParameter("param");
        System.out.println(param);
        try {
            if (StringUtils.isNotBlank(param)) {
                JSONObject obj = JSONObject.parseObject(param);
                String old_password = (String) obj.get("old_password");
                String new_password = (String) obj.get("new_password");
                int result = indexService.updatePassword(uid, utype, old_password, new_password);
                switch (result) {
                    case -1:
                        map.put("success", false);
                        map.put("msg", "系统出错,修改失败!");
                        break;
                    case 0:
                        map.put("success", false);
                        map.put("msg", "旧密码不正确!");
                        break;
                    case 1:
                        map.put("success", true);
                        map.put("msg", "修改成功!");
                }
                return JSON.toJSONString(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("success", false);
            map.put("msg", "系统出错,修改失败!");
        }
        return JSON.toJSONString(map);
    }
}
@Controller
@RequestMapping
public class MenuController {

    @Resource
    private MenuService menuService;


}
@Controller
@RequestMapping("/student")
public class StudentController {
    @Resource
    private StudentService studentService;

    /**
     * 我的卫生检查记录界面
     *
     * @return
     */
    @RequestMapping(value = "/viewMyCleanInfo")
    public String viewMyCleanInfo() {
        return "/student/clean-list";
    }

    /**
     * 查询我的宿舍卫生检查记录
     *
     * @param ciVo    分页信息
     * @param request 用于获取session中的uid
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/clean/list")
    public DataGridViewResult findMyCleanInfoListByPage(CleanInfoVo ciVo, HttpServletRequest request) {
        // 获取学号
        String uid = (String) request.getSession().getAttribute("uid");
        ciVo.setStuid(uid);
        // 设置分页信息
        PageHelper.startPage(ciVo.getPage(), ciVo.getLimit());
        // 查询
        List<CleanInfo> list = studentService.findMyCleanInfoListByPage(ciVo);
        // 创建分页对象
        PageInfo<CleanInfo> pageInfo = new PageInfo<CleanInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 我的报修界面
     *
     * @return
     */
    @RequestMapping(value = "/viewMyRepairInfo")
    public String viewMyRepairInfo() {
        return "/student/repair-list";
    }

    /**
     * 查询我的宿舍的报修记录
     *
     * @param riVo    分页信息
     * @param request 用于获取session中的uid
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/repair/list")
    public DataGridViewResult findMyRepairInfoListByPage(RepairInfoVo riVo, HttpServletRequest request) {
        // 获取学号
        String uid = (String) request.getSession().getAttribute("uid");
        riVo.setStuid(uid);
        // 设置分页信息
        PageHelper.startPage(riVo.getPage(), riVo.getLimit());
        // 查询
        List<RepairInfo> list = studentService.findMyRepairInfoListByPage(riVo);
        // 创建分页对象
        PageInfo<RepairInfo> pageInfo = new PageInfo<RepairInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 提交报修单
     *
     * @param ri
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/repair/add")
    public String addRepairInfo(RepairInfo ri, HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String stuid = (String) request.getSession().getAttribute("uid");
        ri.setStuid(stuid);
        // 报修提交时间
        Date date = new Date();
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        ri.setSubtime(format.format(date));
        System.out.println(ri);

        // 去执行添加操作
        int result = studentService.addRepairInfo(ri);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "添加成功");
        } else {
            map.put("success", false);
            map.put("msg", "添加失败");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 修改报修单
     *
     * @param ri
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/repair/update")
    public String updateRepairInfo(RepairInfo ri, HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        System.out.println(ri);

        // 判断这是不是自己的提交的报修单
        String stuid = (String) request.getSession().getAttribute("uid");
        if (!stuid.equals(ri.getStuid())) {
            map.put("success", false);
            map.put("msg", "只能修改自己提交的报修单!");
            return JSON.toJSONString(map);
        }

        int result = studentService.updateRepairInfo(ri);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "修改成功!");
        } else {
            map.put("success", false);
            map.put("msg", "修改失败!");
        }
        return JSON.toJSONString(map);
    }


    /**
     * 我的宿舍界面
     *
     * @return
     */
    @RequestMapping(value = "/viewMyDormInfo")
    public String viewMyDormInfo() {
        return "/student/myDorm";
    }


    /**
     * 查看留言板
     *
     * @return
     */
    @RequestMapping(value = "/viewMessageBoard")
    public String viewMessageBoard() {
        return "/student/messageboard";
    }

    @ResponseBody
    @RequestMapping(value = "/message/list")
    public String findMessageListByPage(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        try {
            // 获取id,用来查找所在宿舍区
            String uid = (String) request.getSession().getAttribute("uid");
            // 获取当前页
            Integer curr = Integer.parseInt(request.getParameter("curr"));
            // 获取页面size
            Integer limit = Integer.parseInt(request.getParameter("limit"));
            // 获取信息类型
            Integer type = Integer.parseInt(request.getParameter("type"));
            // 起始行数
            Integer start = (curr - 1) * limit;
            List<MessageBoard> list = studentService.findMessageListByPage(uid, start, limit, type);
            // 总行数
            Integer count = studentService.findMessageCount(type);
            // 总页数
            Integer total = (count - 1) / limit + 1;
            map.put("success", true);
            map.put("count", count);
            map.put("total", total);
            map.put("curr", curr);
            map.put("limit", limit);
            map.put("data", list);
            System.out.println(JSON.toJSONString(map));
            return JSON.toJSONString(map);
        } catch (Exception e) {
            e.printStackTrace();
            map.put("success", false);
            map.put("msg", "系统错误!");
            return JSON.toJSONString(map);
        }
    }

    /**
     * 查看我的留言
     *
     * @return
     */
    @RequestMapping(value = "viewMyMessage")
    public String viewMyMessage() {
        return "/student/my-message";
    }


    /**
     * 查看我的留言
     *
     * @param mbVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/message/my")
    public DataGridViewResult myMessage(MessageBoardVo mbVo, HttpServletRequest request) {
        String uname = (String) request.getSession().getAttribute("uname");
        mbVo.setAnnouncer(uname);

        // 设置分页信息
        PageHelper.startPage(mbVo.getPage(), mbVo.getLimit());
        // 查询
        List<MessageBoard> list = studentService.findMyMessage(mbVo);
        // 创建分页对象
        PageInfo<MessageBoard> pageInfo = new PageInfo<MessageBoard>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 发布留言
     *
     * @param mb
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/message/add")
    public String addMessage(MessageBoard mb, HttpServletRequest request) {
        String uname = (String) request.getSession().getAttribute("uname");
        mb.setAnnouncer(uname);

        HashMap<String, Object> map = new HashMap<>();
        int result = studentService.addMessage(mb);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "添加成功!");
        } else {
            map.put("success", false);
            map.put("msg", "添加失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 批量删除留言
     *
     * @param request 获取前端传来的id数组
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/message/delete")
    public String deleteMessage(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String params = request.getParameter("params");
        System.out.println(params);
        try {
            if (StringUtils.isNotBlank(params)) {
                // 获取id数组
                JSONArray jsonArray = JSONArray.parseArray(params);
                List<Integer> list = new ArrayList<>();
                for (int i = 0; i < jsonArray.size(); i++) {
                    JSONObject obj = jsonArray.getJSONObject(i);
                    Integer id = (Integer) obj.get("id");
                    list.add(id);
                }
                boolean result = studentService.deleteMessage(list);
                if (result) {
                    map.put("success", true);
                    map.put("msg", "删除成功!");
                } else {
                    map.put("success", false);
                    map.put("msg", "删除失败!");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("success", false);
            map.put("msg", "删除失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 查看学生基本信息
     *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/basic/info")
    public String viewStudentInfo(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();

        String stuid = (String) request.getSession().getAttribute("uid");
        if (StringUtils.isNotBlank(stuid)) {
            StudentInfo si = studentService.findStudentInfoByStuid(stuid);
            if (si != null) {
                map.put("success", true);
                map.put("data", si);
            } else {
                map.put("success", false);
                map.put("msg", "系统错误:不存在该用户!");
            }
        }
        return JSON.toJSONString(map);
    }

    /**
     * 更改基本信息
     *
     * @param si
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/basic/update")
    public String updateStudentInfo(StudentInfo si) {
        HashMap<String, Object> map = new HashMap<>();
        System.out.println(si);
        int result = studentService.updateStudentInfo(si);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "保存成功!");
        } else {
            map.put("success", false);
            map.put("msg", "保存失败!");
        }
        return JSON.toJSONString(map);
    }

    @RequestMapping(value = "/leave/register")
    public String myLeaveInfo() {
        return "/student/leave-info";
    }

    /**
     * 查找我的离校登记记录
     *
     * @param liVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/leave/list")
    public DataGridViewResult findMyLeaveInfoByPage(LeaveInfoVo liVo, HttpServletRequest request) {
        String stuid = (String) request.getSession().getAttribute("uid");
        liVo.setStuid(stuid);
        System.out.println(liVo);

        // 设置分页信息
        PageHelper.startPage(liVo.getPage(), liVo.getLimit());
        // 查询
        List<LeaveInfo> list = studentService.findMyLeaveInfoByPage(liVo);
        // 创建分页对象
        PageInfo<LeaveInfo> pageInfo = new PageInfo<LeaveInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }


    /**
     * 添加离校登记记录
     *
     * @param li
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/leave/add")
    public String addMyLeaveInfo(LeaveInfo li, HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();

        String stuid = (String) request.getSession().getAttribute("uid");
        li.setStuid(stuid);
        System.out.println(li);

        int result = studentService.addMyLeaveInfo(li);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "登记成功!");
        } else {
            map.put("success", false);
            map.put("msg", "登记失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 修改离校登记记录
     *
     * @param li
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/leave/update")
    public String updateMyLeaveInfo(LeaveInfo li) {
        HashMap<String, Object> map = new HashMap<>();

        System.out.println(li);

        int result = studentService.updateMyLeaveInfo(li);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "更改成功!");
        } else {
            map.put("success", false);
            map.put("msg", "更改失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }


    /**
     * 留校申请
     *
     * @return
     */
    @RequestMapping(value = "/stayin/apply")
    public String myStayInfo() {
        return "/student/stayin-apply";
    }

    /**
     * 查看自己的留校申请
     *
     * @param siVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/list")
    public DataGridViewResult findMyStayInfoListByPage(StayInfoVo siVo, HttpServletRequest request) {
        String stuid = (String) request.getSession().getAttribute("uid");
        siVo.setStuid(stuid);
        System.out.println(siVo);

        // 设置分页信息
        PageHelper.startPage(siVo.getPage(), siVo.getLimit());
        // 查询
        List<StayInfo> list = studentService.findMyStayInfoListByPage(siVo);
        // 创建分页对象
        PageInfo<StayInfo> pageInfo = new PageInfo<StayInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 上传图片
     *
     * @param file
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/uploadImage")
    public String uploadOpinionImage(MultipartFile file, HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        HashMap<String, Object> data = new HashMap<>();
        try {
            if (file != null) {
                String stuid = (String) request.getSession().getAttribute("uid");
                String originalFilename = file.getOriginalFilename();
                Date date = new Date();
                String fileName = date.getTime() + "-" + originalFilename;
                // 类路径
//                String path = ResourceUtils.getURL("classpath:").getPath();
                String classPath = "F:/IDEA/workspace/高校宿舍管理系统/doms/target/classes/static";
                // 父路径
                String src = "/upload/stayin/" + stuid + "/";
                File directory = new File(classPath, src);
                if (!directory.exists()) {
                    directory.mkdir();
                }
                // 文件名
                String imagePath = directory.getPath() + "\\" + fileName;
                System.out.println(imagePath);
                file.transferTo(new File(imagePath));
                data.put("src", src + fileName);
                map.put("code", 0);
                map.put("msg", "上传成功!");
                map.put("data", data);
                return JSON.toJSONString(map);
            } else {
                map.put("code", -1);
                map.put("msg", "请选择图片!");
                return JSON.toJSONString(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("code", -1);
            map.put("msg", "上传失败,请稍后重试!");
            return JSON.toJSONString(map);
        }
    }


    /**
     * 提交留校申请
     *
     * @param si
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/add")
    public String addStayInfo(StayInfo si, HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String stuid = (String) request.getSession().getAttribute("uid");
        si.setStuid(stuid);

        System.out.println(si);
        int result = studentService.addMyStayInfo(si);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "提交申请成功");
        } else {
            map.put("success", false);
            map.put("msg", "提交申请失败,请稍后重试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 修改留校申请信息
     *
     * @param si
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/update")
    public String updateMyStayInfo(StayInfo si) {
        HashMap<String, Object> map = new HashMap<>();

        System.out.println(si);

        int result = studentService.updateMyStayInfo(si);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "修改成功!");
        } else {
            map.put("success", false);
            map.put("msg", "修改失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 查看我的返校信息
     *
     * @return
     */
    @RequestMapping(value = "/viewMyBackInfo")
    public String viewMyBackToScInfo() {
        return "/student/back-info";
    }

    /**
     * 查找我的返校登记记录
     *
     * @param bsVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/back/list")
    public DataGridViewResult findMyBackInfoByPage(BackToScInfoVo bsVo, HttpServletRequest request) {
        String stuid = (String) request.getSession().getAttribute("uid");
        bsVo.setStuid(stuid);
        System.out.println(bsVo);

        // 设置分页信息
        PageHelper.startPage(bsVo.getPage(), bsVo.getLimit());
        // 查询
        List<BackToScInfo> list = studentService.findMyBackInfoByPage(bsVo);
        // 创建分页对象
        PageInfo<BackToScInfo> pageInfo = new PageInfo<BackToScInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }


    /**
     * 添加返校登记记录
     *
     * @param bs
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/back/add")
    public String addMyBackInfo(BackToScInfo bs, HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();

        String stuid = (String) request.getSession().getAttribute("uid");
        bs.setStuid(stuid);
        System.out.println(bs);

        int result = studentService.addMyBackInfo(bs);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "提交成功!");
        } else {
            map.put("success", false);
            map.put("msg", "提交失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 修改返校登记记录
     *
     * @param bs
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/back/update")
    public String updateMyBackInfo(BackToScInfo bs) {
        HashMap<String, Object> map = new HashMap<>();

        System.out.println(bs);

        int result = studentService.updateMyBackInfo(bs);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "更改成功!");
        } else {
            map.put("success", false);
            map.put("msg", "更改失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 密码设置
     *
     * @return
     */
    @RequestMapping(value = "/setting")
    public String passwordSetting() {
        return "password-setting";
    }

    @RequestMapping(value = "/myDormitoryInfo")
    public String viewMyDormitoryInfo() {
        return "/student/my-dormitory";
    }

    /**
     * 查看自己宿舍信息
     *
     * @param aiVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/mydorm/list")
    public DataGridViewResult findMyDormitoryInfoListByPage(AllocationInfoVo aiVo, HttpServletRequest request) {
        String stuid = (String) request.getSession().getAttribute("uid");
        aiVo.setStuid(stuid);
        System.out.println(aiVo);

        // 设置分页信息
        PageHelper.startPage(aiVo.getPage(), aiVo.getLimit());
        // 查询
        List<AllocationInfo> list = studentService.findMyDormitoryInfoListByPage(aiVo);
        // 创建分页对象
        PageInfo<AllocationInfo> pageInfo = new PageInfo<AllocationInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 判断是否已经选择床位了
     *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/mydorm/isChoosed")
    public String isChooseBed(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String stuid = (String) request.getSession().getAttribute("uid");
        boolean status = studentService.isChooseBed(stuid);
        map.put("status", status);
        return JSON.toJSONString(map);
    }

    /**
     * 提交选择的床位号
     *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/mydorm/chooseBed")
    public String chooseBed(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String stuid = (String) request.getSession().getAttribute("uid");
        String bed = request.getParameter("bed");
        if (StringUtils.isNotBlank(bed)) {
            int bedNum = Integer.parseInt(bed);
            // 提交床位号
            int result = studentService.chooseBed(stuid, bedNum);
            if (result > 0) {
                map.put("success", true);
                map.put("msg", "选择成功!");
            } else {
                map.put("success", false);
                map.put("msg", "选择失败!");
            }
            return JSON.toJSONString(map);
        } else {
            map.put("success", false);
            map.put("msg", "床位号不能为空!");
            return JSON.toJSONString(map);
        }
    }

    /**
     * 查找已经选择了的床位
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/mydorm/alreadyBeds")
    public String findAlreadyChooseBeds(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String stuid = (String) request.getSession().getAttribute("uid");
        List<Integer> list = studentService.findAlreadyChooseBeds(stuid);
        map.put("beds", list);
        return JSON.toJSONString(map);
    }
}
/**
 * 教师对应的控制器
 */
@Controller
@RequestMapping("/teacher")
public class TeacherController {
    @Resource
    private TeacherService teacherService;

    @RequestMapping(value = "/viewAllocationInfo")
    public String allocationList() {
        return "/teacher/allocation-list";
    }

    /**
     * 查询宿舍分配信息
     * 查询条件:专业/年级
     *
     * @param aiVo
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/allocation/list")
    public DataGridViewResult findAllocationInfoList(AllocationInfoVo aiVo, HttpServletRequest request) {
        // 获取session中的专业和年级
        String dept = (String) request.getSession().getAttribute("dept");
        String grade = (String) request.getSession().getAttribute("grade");
        if (StringUtils.isNotBlank(dept)) {
            aiVo.setStudept(dept);
        }
        if (StringUtils.isNotBlank(grade)) {
            aiVo.setStugrade(grade);
        }
        System.out.println(aiVo);
        // 设置分页信息
        PageHelper.startPage(aiVo.getPage(), aiVo.getLimit());
        // 查询
        List<AllocationInfo> list = teacherService.findAllocationInfoListByPage(aiVo);
        // 创建分页对象
        PageInfo<AllocationInfo> pageInfo = new PageInfo<AllocationInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 添加宿舍分配信息
     *
     * @param ai
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/allocation/add")
    public String addAllocationInfo(AllocationInfo ai) {
        HashMap<String, Object> map = new HashMap<>();
        int result = teacherService.addAllocationInfo(ai);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "添加成功!");
        } else {
            map.put("success", false);
            map.put("msg", "添加失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 更改宿舍分配信息
     *
     * @param ai
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/allocation/update")
    public String updateAllocationInfo(AllocationInfo ai) {
        HashMap<String, Object> map = new HashMap<>();
        int result = teacherService.updateAllocationInfo(ai);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "更改成功!");
        } else {
            map.put("success", false);
            map.put("msg", "更改失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 删除宿舍分配信息
     *
     * @param stuid
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/allocation/delete")
    public String deleteAllocationInfo(String stuid) {
        HashMap<String, Object> map = new HashMap<>();
        int result = teacherService.deleteAllocationInfo(stuid);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "删除成功!");
        } else {
            map.put("success", false);
            map.put("msg", "删除失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 导出宿舍分配信息列表(excel格式)
     *
     * @param request  用来获取缓存中的attribute
     * @param response 输出文件流
     */
    @ResponseBody
    @RequestMapping(value = "/allocation/export.action")
    public void exportAllocationInfoToExcel(HttpServletRequest request, HttpServletResponse response) {
        HashMap<String, Object> map = new HashMap<>();
        response.reset();// 清除缓存
        String studept = (String) request.getSession().getAttribute("dept");
        String grade = (String) request.getSession().getAttribute("grade");
        System.out.println("studept" + studept);
        System.out.println("grade" + grade);
        // 查找宿舍分配信息列表
        List<AllocationInfo> list = teacherService.exportByDept(studept, grade);

        // 拼接excel表名
        StringBuffer filenamebuffer = new StringBuffer();
        if (StringUtils.isNotBlank(studept)) {
            filenamebuffer.append(studept);
            filenamebuffer.append("-");
        }
        if (StringUtils.isNotBlank(grade)) {
            filenamebuffer.append(grade);
            filenamebuffer.append("-");
        }
        filenamebuffer.append("宿舍分配表");
        String filename = filenamebuffer.toString();
        try {
            ExcelUtils.writeExcel(filename, response, list, AllocationInfo.class);
            map.put("success", true);
            map.put("mag", "导出成功!");
        } catch (Exception e) {
            e.printStackTrace();
            map.put("success", false);
            map.put("mag", "导出失败!");
        }
//        return JSON.toJSONString(map);
    }


    @RequestMapping(value = "/viewStudentInfo")
    public String studentList() {
        return "/teacher/student-list";
    }

    /**
     * 获取学生信息列表
     *
     * @param si
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/student/list")
    public DataGridViewResult findStudentInfoList(StudentInfoVo si, HttpServletRequest request) {
        // 获取教师所负责的专业和年级,年级对应学号
        String studept = (String) request.getSession().getAttribute("dept");
        String grade = (String) request.getSession().getAttribute("grade");
        if (StringUtils.isNotBlank(studept)) {
            si.setStudept(studept);
        }
        // 如果学号为空,则教师负责的年级作为学号的前缀条件
        if (StringUtils.isBlank(si.getStuid())) {
            if (StringUtils.isNotBlank(grade)) {
                si.setStuid(grade);
            }
        }
        System.out.println(si);

        // 设置分页信息
        PageHelper.startPage(si.getPage(), si.getLimit());
        // 查询
        List<StudentInfo> list = teacherService.findStudentInfoListByPage(si);
        // 创建分页对象
        PageInfo<StudentInfo> pageInfo = new PageInfo<StudentInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }


    /**
     * 添加学生信息
     *
     * @param si
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/student/add")
    public String addStudentInfo(StudentInfo si) {
        HashMap<String, Object> map = new HashMap<>();
        String grade = si.getStuid().substring(0, 4);
        si.setStugrade(grade);
        System.out.println(grade);
        int result = teacherService.addStudentInfo(si);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "添加成功!");
        } else {
            map.put("success", false);
            map.put("msg", "添加失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 更改学生信息
     *
     * @param si
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/student/update")
    public String updateStudentInfo(StudentInfo si) {
        HashMap<String, Object> map = new HashMap<>();
        int result = teacherService.updateStudentInfo(si);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "更改成功!");
        } else {
            map.put("success", false);
            map.put("msg", "更改失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 删除学生信息
     *
     * @param stuid
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/student/delete")
    public String deleteaddStudentInfo(String stuid) {
        HashMap<String, Object> map = new HashMap<>();
        int result = teacherService.deleteStudentInfo(stuid);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "删除成功!");
        } else {
            map.put("success", false);
            map.put("msg", "删除失败!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 导入学生信息
     *
     * @param file excel表格
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/student/import.action")
    public String importExcel(@RequestParam("file") MultipartFile file) {
        HashMap<String, Object> map = new HashMap<>();

        try {
            List<StudentInfo> list = ExcelUtils.readExcel("", StudentInfo.class, file);
            for (int i = 0; i < list.size(); i++) {
                String grade = list.get(i).getStuid().substring(0, 4);
                list.get(i).setStugrade(grade);
                System.out.println(grade);
            }
            boolean result = teacherService.batchInsert(list);
            if (result) {
                map.put("code", 200);
                map.put("msg", "导入成功!");
                map.put("data", null);
            } else {
                map.put("code", 500);
                map.put("msg", "导入失败!");
                map.put("data", null);
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("code", 500);
            map.put("msg", "导入失败,请检查文件内容是否正确。");
            map.put("data", null);
        }
        return JSON.toJSONString(map);
    }

    /**
     * 查看卫生检查情况
     *
     * @return
     */
    @RequestMapping(value = "/viewCleanInfo")
    public String viewCleanInfo() {
        return "/teacher/clean-list";
    }

    /**
     * 专业班级卫生检查信息
     *
     * @param ciVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/clean/list")
    public DataGridViewResult findCleanInfoListByPage(CleanInfoVo ciVo, HttpServletRequest request) {
        // 获取session中的专业和年级
        String dept = (String) request.getSession().getAttribute("dept");
        String grade = (String) request.getSession().getAttribute("grade");
        if (StringUtils.isNotBlank(dept)) {
            ciVo.setStudept(dept);
        }
        if (StringUtils.isNotBlank(grade)) {
            ciVo.setStuid(grade);
        }
        System.out.println(ciVo);
        // 设置分页信息
        PageHelper.startPage(ciVo.getPage(), ciVo.getLimit());
        // 查询
        List<CleanInfoVo> list = teacherService.findCleanInfoListByPage(ciVo);
        // 创建分页对象
        PageInfo<CleanInfoVo> pageInfo = new PageInfo<CleanInfoVo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    @RequestMapping(value = "/viewLeaveInfo")
    public String viewLeaveInfo() {
        return "/teacher/leave-info";
    }

    @ResponseBody
    @RequestMapping(value = "/leave/list")
    public DataGridViewResult findLeaveInfoByPage(LeaveInfoVo liVo, HttpServletRequest request) {
        // 专业和年级
        String dept = (String) request.getSession().getAttribute("dept");
        String grade = (String) request.getSession().getAttribute("grade");
        if (StringUtils.isNotBlank(dept)) {
            liVo.setStudept(dept);
        }
        if (StringUtils.isNotBlank(grade)) {
            liVo.setStugrade(grade);
        }
        System.out.println(liVo);
        // 设置分页信息
        PageHelper.startPage(liVo.getPage(), liVo.getLimit());
        // 查询
        List<LeaveInfo> list = teacherService.findLeaveInfoListByPage(liVo);
        // 创建分页对象
        PageInfo<LeaveInfo> pageInfo = new PageInfo<LeaveInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    @ResponseBody
    @RequestMapping(value = "/leave/delete")
    public String batchDeleteLeaveInfo(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String params = request.getParameter("params");
        try {
            if (StringUtils.isBlank(params)) {
                map.put("success", false);
                map.put("msg", "请选择要删除的行!");
                return JSON.toJSONString(map);
            }
            boolean result = teacherService.batchDeleteLeaveInfo(params);
            if (result) {
                map.put("success", true);
                map.put("msg", "删除成功!");
            } else {
                map.put("success", false);
                map.put("msg", "系统错误,请稍后再试!");
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("success", false);
            map.put("msg", "系统错误,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }


    /**
     * 将学生去向信息导出到Excel中
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @RequestMapping(value = "/leave/export.action")
    public void exportLeaveInfoToExcel(HttpServletRequest request, HttpServletResponse response) {
        response.reset();// 清除缓存
        String studept = (String) request.getSession().getAttribute("dept");
        String stugrade = (String) request.getSession().getAttribute("grade");
        // 查找学生登记信息
        List<LeaveInfo> list = teacherService.exportLeaveInfo(studept, stugrade);

        // 拼接excel表名
        StringBuffer filenamebuffer = new StringBuffer();
        if (StringUtils.isNotBlank(studept)) {
            filenamebuffer.append(studept);
            filenamebuffer.append("-");
        }
        if (StringUtils.isNotBlank(stugrade)) {
            filenamebuffer.append(stugrade);
            filenamebuffer.append("级-");
        }
        filenamebuffer.append("节假日去向表");
        String filename = filenamebuffer.toString();
        try {
            ExcelUtils.writeExcel(filename, response, list, LeaveInfo.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取饼状图的数据
     *
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/leave/echartsData")
    public String getLeaveInfoEchartsData(HttpServletRequest request) {
        String studept = (String) request.getSession().getAttribute("dept");
        String stugrade = (String) request.getSession().getAttribute("grade");
        HashMap<String, Object> map = teacherService.getLeaveInfoEchartsData(studept, stugrade);
        String result = JSON.toJSONString(map);
        System.out.println(result);
        return result;
    }


    /**
     * 留校管理
     *
     * @return
     */
    @RequestMapping(value = "/stayinManage")
    public String stayinManege() {
        return "/teacher/stayin-manage";
    }

    /**
     * 留校申请列表
     *
     * @param siVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/list")
    public DataGridViewResult findStayInfoListByPage(StayInfoVo siVo, HttpServletRequest request) {
        String studept = (String) request.getSession().getAttribute("dept");
        String stugrade = (String) request.getSession().getAttribute("grade");
        if (StringUtils.isNotBlank(studept)) {
            siVo.setStudept(studept);
        }
        if (StringUtils.isNotBlank(stugrade)) {
            siVo.setStugrade(stugrade);
        }
        System.out.println(siVo);

        // 设置分页信息
        PageHelper.startPage(siVo.getPage(), siVo.getLimit());
        // 查询
        List<StayInfo> list = teacherService.findStayInfoListByPage(siVo);
        // 创建分页对象
        PageInfo<StayInfo> pageInfo = new PageInfo<StayInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 审批学生留校申请
     *
     * @param si
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/approve")
    public String approveStayInfo(StayInfo si) {
        HashMap<String, Object> map = new HashMap<>();
        System.out.println(si);
        int result = teacherService.approveStayInfo(si);
        if (result > 0) {
            map.put("success", true);
            map.put("msg", "审批成功");
        } else {
            map.put("success", false);
            map.put("msg", "审批失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 导出学生留校申请信息
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/export.action")
    public void exportStayInfoToExcel(HttpServletRequest request, HttpServletResponse response) {
        response.reset();// 清除缓存
        String studept = (String) request.getSession().getAttribute("dept");
        String stugrade = (String) request.getSession().getAttribute("grade");
        // 查找学生登记信息
        List<StayInfo> list = teacherService.exportStayInfo(studept, stugrade);

        // 拼接excel表名
        StringBuffer filenamebuffer = new StringBuffer();
        if (StringUtils.isNotBlank(studept)) {
            filenamebuffer.append(studept);
            filenamebuffer.append("-");
        }
        if (StringUtils.isNotBlank(stugrade)) {
            filenamebuffer.append(stugrade);
            filenamebuffer.append("级-");
        }
        filenamebuffer.append("留校申请表");
        String filename = filenamebuffer.toString();
        try {
            ExcelUtils.writeExcel(filename, response, list, StayInfo.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取留校申请中的统计数据
     *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/stayin/echartsData")
    public String getStayInfoEchartsData(HttpServletRequest request) {
        String studept = (String) request.getSession().getAttribute("dept");
        String stugrade = (String) request.getSession().getAttribute("grade");
        JSONObject data = teacherService.getStayInfoEchartsData(studept, stugrade);
        System.out.println(JSON.toJSONString(data));
        return JSON.toJSONString(data);
    }

    @RequestMapping(value = "/backManage")
    public String backManage() {
        return "/teacher/back-manage";
    }

    /**
     * 查找学生返校信息
     *
     * @param bsVo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/back/list")
    public DataGridViewResult findBackToScInfoListByPage(BackToScInfoVo bsVo, HttpServletRequest request) {
        String studept = (String) request.getSession().getAttribute("dept");
        String stugrade = (String) request.getSession().getAttribute("grade");
        if (StringUtils.isNotBlank(studept)) {
            bsVo.setStudept(studept);
        }
        if (StringUtils.isNotBlank(stugrade)) {
            bsVo.setStugrade(stugrade);
        }
        System.out.println(bsVo);

        // 设置分页信息
        PageHelper.startPage(bsVo.getPage(), bsVo.getLimit());
        // 查询
        List<BackToScInfo> list = teacherService.findBackToScInfoListByPage(bsVo);
        // 创建分页对象
        PageInfo<BackToScInfo> pageInfo = new PageInfo<BackToScInfo>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 导出学生返校登记信息
     *
     * @param request
     * @param response
     */
    @ResponseBody
    @RequestMapping(value = "/back/export.action")
    public void exportBackToScInfoToExcel(HttpServletRequest request, HttpServletResponse response) {
        response.reset();// 清除缓存
        String studept = (String) request.getSession().getAttribute("dept");
        String stugrade = (String) request.getSession().getAttribute("grade");
        // 查找学生登记信息
        List<BackToScInfo> list = teacherService.exportBackToScInfo(studept, stugrade);

        // 拼接excel表名
        StringBuffer filenamebuffer = new StringBuffer();
        if (StringUtils.isNotBlank(studept)) {
            filenamebuffer.append(studept);
            filenamebuffer.append("-");
        }
        if (StringUtils.isNotBlank(stugrade)) {
            filenamebuffer.append(stugrade);
            filenamebuffer.append("级-");
        }
        filenamebuffer.append("返校登记表");
        String filename = filenamebuffer.toString();
        try {
            ExcelUtils.writeExcel(filename, response, list, BackToScInfo.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取返校登记的统计数据
     *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/back/echartsData")
    public String getBackToScInfoEchartsData(HttpServletRequest request) {
        String studept = (String) request.getSession().getAttribute("dept");
        String stugrade = (String) request.getSession().getAttribute("grade");
        JSONObject data = teacherService.getBackToScInfoEchartsData(studept, stugrade);
        System.out.println(JSON.toJSONString(data));
        return JSON.toJSONString(data);
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/lf21qp/article/details/131738926
conseillé
Classement