فهرست منبع

楼栋宿舍床位导入导出

夏文涛 1 سال پیش
والد
کامیت
2949eb7199
19فایلهای تغییر یافته به همراه1583 افزوده شده و 24 حذف شده
  1. 51 0
      src/main/java/com/template/api/WelcomeBedControllerAPI.java
  2. 20 0
      src/main/java/com/template/api/WelcomeBuildControllerAPI.java
  3. 20 1
      src/main/java/com/template/api/WelcomeDormitoryControllerAPI.java
  4. 2 2
      src/main/java/com/template/api/WelcomeStudentControllerAPI.java
  5. 5 0
      src/main/java/com/template/api/WelcomeStudentDormitoryControllerAPI.java
  6. 571 1
      src/main/java/com/template/controller/WelcomeBedController.java
  7. 280 4
      src/main/java/com/template/controller/WelcomeBuildController.java
  8. 381 8
      src/main/java/com/template/controller/WelcomeDormitoryController.java
  9. 1 2
      src/main/java/com/template/controller/WelcomeStudentController.java
  10. 77 0
      src/main/java/com/template/model/request/InsertWelcomeBedRequest.java
  11. 74 0
      src/main/java/com/template/model/request/UpdateWelcomeBedRequest.java
  12. 9 3
      src/main/java/com/template/services/WelcomeBedService.java
  13. 2 0
      src/main/java/com/template/services/WelcomeBuildService.java
  14. 2 0
      src/main/java/com/template/services/WelcomeDormitoryService.java
  15. 4 0
      src/main/java/com/template/services/WelcomeStudentService.java
  16. 39 3
      src/main/java/com/template/services/impl/WelcomeBedServiceImpl.java
  17. 10 0
      src/main/java/com/template/services/impl/WelcomeBuildServiceImpl.java
  18. 16 0
      src/main/java/com/template/services/impl/WelcomeDormitoryServiceImpl.java
  19. 19 0
      src/main/java/com/template/services/impl/WelcomeStudentServiceImpl.java

+ 51 - 0
src/main/java/com/template/api/WelcomeBedControllerAPI.java

@@ -0,0 +1,51 @@
+package com.template.api;
+
+import com.template.model.request.InfoCollectionRequest;
+import com.template.model.request.InsertWelcomeBedRequest;
+import com.template.model.request.UpdateWelcomeBedRequest;
+import com.template.model.result.CommonResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.text.ParseException;
+
+@RequestMapping("/api/welcomeBed")
+@Api(tags = {"WelcomeBedController"}, value = "床位信息管理")
+public interface WelcomeBedControllerAPI {
+
+    @PostMapping(value = "/insertBedInfo")
+    @ApiOperation(value = "添加床位信息", notes = "添加床位信息", httpMethod = "POST")
+    CommonResult insertBedInfo(@Validated @RequestBody InsertWelcomeBedRequest iwbr, BindingResult bindingResult) throws Exception;
+
+    @PostMapping(value = "/updateBedInfo")
+    @ApiOperation(value = "编辑床位信息", notes = "编辑床位信息", httpMethod = "POST")
+    CommonResult updateBedInfo(@Validated @RequestBody UpdateWelcomeBedRequest uwbr, BindingResult bindingResult) throws Exception;
+
+    @GetMapping(value = "/queryPageBeds")
+    @ApiOperation(value = "床位信息分页数据", notes = "床位信息分页数据", httpMethod = "GET")
+    CommonResult queryPageBeds(@RequestParam int currentPage, @RequestParam int pageCount, String school,Integer buildId,Integer dormitoryId,String sex, Integer isCheck,Integer collegeId, Integer majorId, Integer classstrId);
+
+    @GetMapping(value = "/deleteBedInfo")
+    @ApiOperation(value = "删除床位信息", notes = "删除床位信息", httpMethod = "GET")
+    CommonResult deleteBedInfo(@RequestParam int id) throws Exception;
+
+    @PostMapping(value = "/importBedExcel")
+    @ApiOperation(value = "导入床位基本信息数据", notes = "导入床位基本信息数据", httpMethod = "POST")
+    CommonResult importBedExcel(@RequestParam("file") MultipartFile file) throws IOException, ParseException;
+
+    @GetMapping(value = "/downloadBedExcel")
+    @ApiOperation(value = "床位信息导出模板", notes = "床位信息导出模板", httpMethod = "GET")
+    CommonResult downloadBedExcel();
+
+    @GetMapping(value = "welcomeBedExport")
+    @ApiOperation(value = "导出床位信息数据", notes = "导出床位信息数据", httpMethod = "GET")
+    void welcomeBedExport(HttpServletResponse response, String school,Integer buildId,Integer dormitoryId,String sex, Integer isCheck,Integer collegeId, Integer majorId, Integer classstrId);
+
+
+}

+ 20 - 0
src/main/java/com/template/api/WelcomeBuildControllerAPI.java

@@ -4,6 +4,11 @@ import com.template.model.pojo.WelcomeBuild;
 import com.template.model.result.CommonResult;
 import com.template.model.result.CommonResult;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.text.ParseException;
 
 
 @RequestMapping("/api/welcome-build")
 @RequestMapping("/api/welcome-build")
 public interface WelcomeBuildControllerAPI {
 public interface WelcomeBuildControllerAPI {
@@ -37,4 +42,19 @@ public interface WelcomeBuildControllerAPI {
     @ApiOperation(value = "楼栋分组", notes = "楼栋分组", httpMethod = "GET")
     @ApiOperation(value = "楼栋分组", notes = "楼栋分组", httpMethod = "GET")
     CommonResult buildGroup(String schoolName);
     CommonResult buildGroup(String schoolName);
 
 
+
+    @PostMapping(value = "/importBuildExcel")
+    @ApiOperation(value = "导入楼栋信息数据", notes = "导入楼栋信息数据", httpMethod = "POST")
+    CommonResult importBuildExcel(@RequestParam("file") MultipartFile file) throws IOException, ParseException;
+
+
+    @GetMapping(value = "/downloadBuildExcel")
+    @ApiOperation(value = "楼栋信息导出模板", notes = "楼栋信息导出模板", httpMethod = "GET")
+    CommonResult downloadBuildExcel();
+
+
+    @GetMapping(value = "welcomeBuildExport")
+    @ApiOperation(value = "导出楼栋信息数据", notes = "导出楼栋信息数据", httpMethod = "GET")
+    void welcomeBuildExport(HttpServletResponse response, String schoolName,String buildName,String sex);
+
 }
 }

+ 20 - 1
src/main/java/com/template/api/WelcomeDormitoryControllerAPI.java

@@ -4,6 +4,11 @@ import com.template.model.pojo.WelcomeDormitory;
 import com.template.model.result.CommonResult;
 import com.template.model.result.CommonResult;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.text.ParseException;
 
 
 @RequestMapping("/api/welcome-dormitory")
 @RequestMapping("/api/welcome-dormitory")
 public interface WelcomeDormitoryControllerAPI {
 public interface WelcomeDormitoryControllerAPI {
@@ -34,7 +39,7 @@ public interface WelcomeDormitoryControllerAPI {
 
 
 
 
     @GetMapping(value = "/groupBuild")
     @GetMapping(value = "/groupBuild")
-    @ApiOperation(value = "楼栋分组", notes = "楼栋分组", httpMethod = "GET")
+    @ApiOperation(value = "寝室分组", notes = "寝室分组", httpMethod = "GET")
     CommonResult groupBuild(String sex,String college,String gradestr,String school);
     CommonResult groupBuild(String sex,String college,String gradestr,String school);
 
 
 
 
@@ -48,4 +53,18 @@ public interface WelcomeDormitoryControllerAPI {
     CommonResult groupBedNumber(String sex,String college,String gradestr,String school,String buildName,String dormitoryName);
     CommonResult groupBedNumber(String sex,String college,String gradestr,String school,String buildName,String dormitoryName);
 
 
 
 
+    @PostMapping(value = "/importDormitoryExcel")
+    @ApiOperation(value = "导入寝室信息数据", notes = "导入寝室信息数据", httpMethod = "POST")
+    CommonResult importDormitoryExcel(@RequestParam("file") MultipartFile file) throws IOException, ParseException;
+
+
+    @GetMapping(value = "/downloadDormitoryExcel")
+    @ApiOperation(value = "寝室信息导出模板", notes = "寝室信息导出模板", httpMethod = "GET")
+    CommonResult downloadDormitoryExcel();
+
+
+    @GetMapping(value = "welcomeDormitoryExport")
+    @ApiOperation(value = "导出寝室信息数据", notes = "导出寝室信息数据", httpMethod = "GET")
+    void welcomeDormitoryExport(HttpServletResponse response, String schoolName,String buildName,String dormitory,String sex,Integer status,String major,String college);
+
 }
 }

+ 2 - 2
src/main/java/com/template/api/WelcomeStudentControllerAPI.java

@@ -52,9 +52,9 @@ public interface WelcomeStudentControllerAPI {
     @ApiOperation(value = "学生信息导出模板", notes = "学生信息导出模板", httpMethod = "GET")
     @ApiOperation(value = "学生信息导出模板", notes = "学生信息导出模板", httpMethod = "GET")
     CommonResult downloadStudentExcel();
     CommonResult downloadStudentExcel();
 
 
-    @GetMapping(value = "jgcloudProjectExport")
+    @GetMapping(value = "welcomeStudentExport")
     @ApiOperation(value = "导出学生信息数据", notes = "导出学生信息数据", httpMethod = "GET")
     @ApiOperation(value = "导出学生信息数据", notes = "导出学生信息数据", httpMethod = "GET")
-    void jgcloudProjectExport(HttpServletResponse response, Integer collegeId, Integer majorId, Integer classstrId, String trafficMethod, String name);
+    void welcomeStudentExport(HttpServletResponse response, Integer collegeId, Integer majorId, Integer classstrId, String trafficMethod, String name);
 
 
 
 
 }
 }

+ 5 - 0
src/main/java/com/template/api/WelcomeStudentDormitoryControllerAPI.java

@@ -4,6 +4,11 @@ import com.template.model.pojo.WelcomeStudentDormitory;
 import com.template.model.result.CommonResult;
 import com.template.model.result.CommonResult;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.text.ParseException;
 
 
 @RequestMapping("/api/welcome-student-dormitory")
 @RequestMapping("/api/welcome-student-dormitory")
 public interface WelcomeStudentDormitoryControllerAPI {
 public interface WelcomeStudentDormitoryControllerAPI {

+ 571 - 1
src/main/java/com/template/controller/WelcomeBedController.java

@@ -1,9 +1,42 @@
 package com.template.controller;
 package com.template.controller;
 
 
 
 
+import com.template.api.WelcomeBedControllerAPI;
+import com.template.common.utils.ExcelUtils;
+import com.template.common.utils.paramUtils;
+import com.template.model.enumModel.eFileType;
+import com.template.model.pojo.*;
+import com.template.model.request.InsertWelcomeBedRequest;
+import com.template.model.request.UpdateWelcomeBedRequest;
+import com.template.model.result.CommonResult;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.StudentPageVo;
+import com.template.services.*;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -14,7 +47,544 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2025-06-13
  * @since 2025-06-13
  */
  */
 @RestController
 @RestController
-public class WelcomeBedController {
+public class WelcomeBedController implements WelcomeBedControllerAPI {
+
+    @Autowired
+    private WelcomeOrgService welcomeOrgService;
+    @Autowired
+    private WelcomeBedService welcomeBedService;
+    @Autowired
+    private WelcomeBuildService welcomeBuildService;
+    @Autowired
+    private WelcomeStudentService welcomeStudentService;
+    @Autowired
+    private WelcomeDormitoryService welcomeDormitoryService;
+
+    @Override
+    public CommonResult insertBedInfo(InsertWelcomeBedRequest iwbr, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
+        }
+
+        WelcomeBed existData = welcomeBedService.queryBedData(iwbr.getSchool(),iwbr.getBuildId(),iwbr.getDormitoryId(),iwbr.getNumber());
+        if(existData != null){
+            return CommonResult.fail("该床位号已存在,请勿重复插入!");
+        }
+
+        WelcomeStudent student =welcomeStudentService.queryStudentInfo(iwbr.getCollegeId(),iwbr.getMajorId(),iwbr.getClassstrId(),iwbr.getCardNum());
+        if(student == null){
+            return CommonResult.fail("当前学生信息在系统中不存在!");
+        }
+
+        WelcomeBed wb = new WelcomeBed();
+        wb.setNumber(iwbr.getNumber());
+        wb.setStudentCard(student.getCardId());
+        wb.setSchool(iwbr.getSchool());
+        wb.setBuildId(iwbr.getBuildId());
+        wb.setBuild(iwbr.getBuild());
+        wb.setDormitoryId(iwbr.getDormitoryId());
+        wb.setDormitory(iwbr.getDormitory());
+        wb.setSex(iwbr.getSex());
+        wb.setCollegeId(iwbr.getCollegeId());
+        wb.setCollege(iwbr.getCollege());
+        wb.setMajorId(iwbr.getMajorId());
+        wb.setMajor(iwbr.getMajor());
+        wb.setClassstrId(iwbr.getClassstrId());
+        wb.setClassstr(iwbr.getClassstr());
+        wb.setIsCheck(iwbr.getIsCheck());
+        wb.setCardNum(iwbr.getCardNum());
+        wb.setName(iwbr.getName());
+        wb.setRemark(iwbr.getRemark());
+
+        int result = welcomeBedService.insertWelcomeBed(wb);
+        return result > 0 ? CommonResult.ok("添加成功!") : CommonResult.fail("添加失败");
+    }
+
+    @Override
+    public CommonResult updateBedInfo(UpdateWelcomeBedRequest uwbr, BindingResult bindingResult) throws Exception {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
+        }
+
+        WelcomeBed oldData = welcomeBedService.getBedById(uwbr.getId());
+        if(oldData == null){
+            return CommonResult.fail("床位信息已失效,编辑失败");
+        }
+
+        WelcomeBed existData = welcomeBedService.queryBedData(uwbr.getSchool(),uwbr.getBuildId(),uwbr.getDormitoryId(),uwbr.getNumber());
+        if(existData != null && existData.getId().intValue() != uwbr.getId().intValue()){
+            return CommonResult.fail("该床位号已存在,请勿重复插入!");
+        }
+
+        WelcomeStudent student =welcomeStudentService.queryStudentInfo(uwbr.getCollegeId(),uwbr.getMajorId(),uwbr.getClassstrId(),uwbr.getCardNum());
+        if(student == null){
+            return CommonResult.fail("当前学生信息在系统中不存在!");
+        }
+
+        oldData.setNumber(uwbr.getNumber());
+        oldData.setStudentCard(student.getCardId());
+        oldData.setSchool(uwbr.getSchool());
+        oldData.setBuildId(uwbr.getBuildId());
+        oldData.setBuild(uwbr.getBuild());
+        oldData.setDormitoryId(uwbr.getDormitoryId());
+        oldData.setDormitory(uwbr.getDormitory());
+        oldData.setSex(uwbr.getSex());
+        oldData.setCollegeId(uwbr.getCollegeId());
+        oldData.setCollege(uwbr.getCollege());
+        oldData.setMajorId(uwbr.getMajorId());
+        oldData.setMajor(uwbr.getMajor());
+        oldData.setClassstrId(uwbr.getClassstrId());
+        oldData.setClassstr(uwbr.getClassstr());
+        oldData.setIsCheck(uwbr.getIsCheck());
+        oldData.setCardNum(uwbr.getCardNum());
+        oldData.setName(uwbr.getName());
+        oldData.setRemark(uwbr.getRemark());
+
+        int result = welcomeBedService.updateWelcomeBed(oldData);
+        return result > 0 ? CommonResult.ok("编辑成功!") : CommonResult.fail("编辑失败");
+    }
+
+    @Override
+    public CommonResult queryPageBeds(int currentPage, int pageCount, String school, Integer buildId, Integer dormitoryId, String sex, Integer isCheck, Integer collegeId, Integer majorId, Integer classstrId) {
+        PageUtils<WelcomeBed> result = welcomeBedService.queryPageWelcomeBeds(currentPage, pageCount, school, buildId, dormitoryId, sex, isCheck, collegeId, majorId, classstrId);
+        return CommonResult.ok(result);
+    }
+
+    @Override
+    public CommonResult deleteBedInfo(int id) throws Exception {
+        int result = welcomeBedService.deleteWelcomeBedById(id);
+        return result > 0 ? CommonResult.ok() : CommonResult.fail();
+    }
+
+    @Override
+    public CommonResult importBedExcel(MultipartFile file) throws IOException, ParseException {
+        System.out.println("导入床位信息");
+        if (file.isEmpty() || file.getSize() == 0) {
+            return CommonResult.fail("导入文件不能为空");
+        }
+        String ContentType = file.getContentType();
+        InputStream inputStream = file.getInputStream();
+        List<WelcomeBed> result = new ArrayList<>();
+
+        //xls格式文件
+        if (ContentType.equals(eFileType.Xls.getValue())) {
+
+            CommonResult<List<WelcomeBed>> resultData = readXls(inputStream);
+            if (!resultData.isSuccess()) {
+                return resultData;
+            }
+            result = resultData.getData();
+
+        } else if (ContentType.equals(eFileType.Xlsx.getValue())) {
+            CommonResult<List<WelcomeBed>> resultData = readXlsx(inputStream);
+            if (!resultData.isSuccess()) {
+                return resultData;
+            }
+            result = resultData.getData();
+
+        } else {
+            return CommonResult.fail("床位信息数据导入只支持Xls或Xlsx格式文件");
+        }
+
+        List<String> admissNums = result.stream().map(WelcomeBed::getCardNum).distinct().collect(Collectors.toList());
+        if(admissNums != null && admissNums.size() > 0){
+            List<WelcomeStudent> students = welcomeStudentService.getDataByAdmissNum(admissNums);
+            if(students != null && students.size() > 0){
+                for (WelcomeBed r:result) {
+                    Optional<WelcomeStudent> os = students.stream().filter(e -> e.getAdmissNum().equals(r.getCardNum())).findFirst();
+                    if(os != null && os.isPresent()){
+                        r.setStudentCard(os.get().getCardId());
+                    }
+                }
+            }
+        }
+
+        boolean resultBool = welcomeBedService.saveOrUpdateBatch(result);
+
+        System.out.println("导入楼栋1");
+        return resultBool ? CommonResult.ok("导入成功") : CommonResult.fail("导入失败");
+
+    }
+
+    /**
+     * xls文件读取方法
+     *
+     * @param inputStream
+     * @return
+     * @throws IOException
+     * @throws ParseException
+     */
+    private CommonResult<List<WelcomeBed>> readXls(InputStream inputStream) throws IOException, ParseException {
+        List<WelcomeBed> result = new ArrayList<>();
+        HSSFWorkbook sheets = new HSSFWorkbook(inputStream);
+
+        List<WelcomeBed> wb = welcomeBedService.list(null);
+        List<WelcomeOrg> wos = welcomeOrgService.list(null);
+        List<WelcomeBuild> wbils = welcomeBuildService.list(null);
+        List<WelcomeDormitory> wds = welcomeDormitoryService.list(null);
+
+        //读取第一张sheet
+        HSSFSheet sheetAt = sheets.getSheetAt(0);
+        DataFormatter dataFormatter = new DataFormatter();
+
+        try {
+            //rowNum = 3 从第三行开始获取值
+            //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
+            for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) {
+
+                HSSFRow row = sheetAt.getRow(rowNum);
+
+                if (row != null) {
+                    //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
+                    //所以先使用setCellType()方法先将该单元格的类型设置为STRING
+                    //然后poi会根据字符串读取它
+                    if (rowNum == 0) {
+                        String num = dataFormatter.formatCellValue(row.getCell(0));//序号
+                        if (!num.equals("序号")) {
+                            return CommonResult.fail("导入数据第一列为序号");
+                        }
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//序号
+                        if (!school.equals("校区名称")) {
+                            return CommonResult.fail("导入数据第一列为校区名称");
+                        }
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//校区名称
+                        if (!build.equals("楼栋名称")) {
+                            return CommonResult.fail("导入数据第二列为楼栋名称");
+                        }
+                        String dormitory = dataFormatter.formatCellValue(row.getCell(3));//楼栋名称
+                        if (!dormitory.equals("寝室号")) {
+                            return CommonResult.fail("导入数据第三列为寝室号");
+                        }
+                        String number = dataFormatter.formatCellValue(row.getCell(4));//楼栋性别
+                        if (!number.equals("床位号")) {
+                            return CommonResult.fail("导入数据第四列为床位号");
+                        }
+                        String sex = dataFormatter.formatCellValue(row.getCell(5));//楼栋层数
+                        if (!sex.equals("床位性别")) {
+                            return CommonResult.fail("导入数据第五列为床位性别");
+                        }
+                        String college = dataFormatter.formatCellValue(row.getCell(6));//起始层数
+                        if (!college.equals("所属学院")) {
+                            return CommonResult.fail("导入数据第六列为所属学院");
+                        }
+                        String major = dataFormatter.formatCellValue(row.getCell(7));//备注
+                        if (!major.equals("所属专业")) {
+                            return CommonResult.fail("导入数据第七列为所属专业");
+                        }
+                        String classstr = dataFormatter.formatCellValue(row.getCell(8));//备注
+                        if (!classstr.equals("所属班级")) {
+                            return CommonResult.fail("导入数据第七列为所属班级");
+                        }
+                        String isCheck = dataFormatter.formatCellValue(row.getCell(9));//备注
+                        if (!isCheck.equals("是否入住")) {
+                            return CommonResult.fail("导入数据第七列为是否入住");
+                        }
+                        String admissNum = dataFormatter.formatCellValue(row.getCell(10));//备注
+                        if (!admissNum.equals("录取号")) {
+                            return CommonResult.fail("导入数据第七列为录取号");
+                        }
+                        String name = dataFormatter.formatCellValue(row.getCell(11));//备注
+                        if (!name.equals("姓名")) {
+                            return CommonResult.fail("导入数据第七列为姓名");
+                        }
+                        String remark = dataFormatter.formatCellValue(row.getCell(12));//备注
+                        if (!remark.equals("备注")) {
+                            return CommonResult.fail("导入数据第七列为备注");
+                        }
+                    } else {
+                        WelcomeBed bedData = new WelcomeBed();
+
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//校区
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//楼栋
+                        String dormitory = dataFormatter.formatCellValue(row.getCell(3));//寝室号
+                        String number = dataFormatter.formatCellValue(row.getCell(4));//床位号
+                        Optional<WelcomeBed> ob = wb.stream().filter(e -> e.getSchool().equals(school) && e.getBuild().equals(build)
+                        && e.getDormitory().equals(dormitory) && e.getNumber().intValue() == Integer.valueOf(number).intValue()).findFirst();
+                        if(ob != null && ob.isPresent()){
+                            bedData.setId(ob.get().getId());
+                        }
+
+                        String sex = dataFormatter.formatCellValue(row.getCell(5));//楼栋层数
+                        String college = dataFormatter.formatCellValue(row.getCell(6));//起始层数
+                        String major = dataFormatter.formatCellValue(row.getCell(7));//备注
+                        String classstr = dataFormatter.formatCellValue(row.getCell(8));//备注
+                        String isCheck = dataFormatter.formatCellValue(row.getCell(9));//备注
+                        String admissNum = dataFormatter.formatCellValue(row.getCell(10));//备注
+                        String name = dataFormatter.formatCellValue(row.getCell(11));//备注
+                        String remark = dataFormatter.formatCellValue(row.getCell(12));//备注
+
+                        bedData.setSchool(school);
+
+                        //楼栋
+                        if(wbils != null && wbils.size() > 0){
+                            Optional<WelcomeBuild> oBuild = wbils.stream().filter(e -> e.getBuild().equals(build)).findFirst();
+                            if(oBuild != null && oBuild.isPresent()){
+                                bedData.setBuild(build);
+                                bedData.setBuildId(oBuild.get().getId());
+                            }
+                        }
+
+                        //寝室
+                        if(wds != null && wds.size() > 0){
+                            Optional<WelcomeDormitory> oDormitory = wds.stream().filter(e -> e.getDormitory().equals(dormitory)).findFirst();
+                            if(oDormitory != null && oDormitory.isPresent()){
+                                bedData.setDormitory(dormitory);
+                                bedData.setDormitoryId(oDormitory.get().getId());
+                            }
+                        }
+
+                        bedData.setNumber(Integer.valueOf(number));
+                        bedData.setSex(sex);
+
+                        //region 院系专业
+                        Optional<WelcomeOrg> owo = wos.stream().filter(e -> e.getName().equals(college)).findFirst();
+                        if (owo != null && owo.isPresent()) {
+                            bedData.setCollege(college);
+                            bedData.setCollegeId(owo.get().getId());
+                        }
+
+                        Optional<WelcomeOrg> omwo = wos.stream().filter(e -> e.getName().equals(major)).findFirst();
+                        if (omwo != null && omwo.isPresent()) {
+                            bedData.setMajor(major);
+                            bedData.setMajorId(omwo.get().getId());
+                        }
+
+                        Optional<WelcomeOrg> ocwo = wos.stream().filter(e -> e.getName().equals(classstr)).findFirst();
+                        if (ocwo != null && ocwo.isPresent()) {
+                            bedData.setClassstr(classstr);
+                            bedData.setClassstrId(ocwo.get().getId());
+                        }
+                        //endregion
+
+                        bedData.setIsCheck(Integer.valueOf(isCheck));
+                        bedData.setCardNum(admissNum);
+                        bedData.setName(name);
+                        bedData.setRemark(remark);
+                        result.add(bedData);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            return CommonResult.fail("请按模板格式导入数据");
+        }
+
+        return CommonResult.ok(result);
+    }
+
+    /**
+     * xls文件读取方法
+     *
+     * @param inputStream
+     * @return
+     * @throws IOException
+     * @throws ParseException
+     */
+    private CommonResult<List<WelcomeBed>> readXlsx(InputStream inputStream) throws IOException, ParseException {
+        List<WelcomeBed> result = new ArrayList<>();
+        XSSFWorkbook sheets = new XSSFWorkbook(inputStream);
+
+        List<WelcomeBed> wb = welcomeBedService.list(null);
+        List<WelcomeOrg> wos = welcomeOrgService.list(null);
+        List<WelcomeBuild> wbils = welcomeBuildService.list(null);
+        List<WelcomeDormitory> wds = welcomeDormitoryService.list(null);
+
+        //读取第一张sheet
+        XSSFSheet sheetAt = sheets.getSheetAt(0);
+        DataFormatter dataFormatter = new DataFormatter();
+
+        try {
+            //rowNum = 3 从第三行开始获取值
+            //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
+            for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) {
+
+                XSSFRow row = sheetAt.getRow(rowNum);
+
+                if (row != null) {
+                    //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
+                    //所以先使用setCellType()方法先将该单元格的类型设置为STRING
+                    //然后poi会根据字符串读取它
+                    if (rowNum == 0) {
+                        String num = dataFormatter.formatCellValue(row.getCell(0));//序号
+                        if (!num.equals("序号")) {
+                            return CommonResult.fail("导入数据第一列为序号");
+                        }
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//序号
+                        if (!school.equals("校区名称")) {
+                            return CommonResult.fail("导入数据第一列为校区名称");
+                        }
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//校区名称
+                        if (!build.equals("楼栋名称")) {
+                            return CommonResult.fail("导入数据第二列为楼栋名称");
+                        }
+                        String dormitory = dataFormatter.formatCellValue(row.getCell(3));//楼栋名称
+                        if (!dormitory.equals("寝室号")) {
+                            return CommonResult.fail("导入数据第三列为寝室号");
+                        }
+                        String number = dataFormatter.formatCellValue(row.getCell(4));//楼栋性别
+                        if (!number.equals("床位号")) {
+                            return CommonResult.fail("导入数据第四列为床位号");
+                        }
+                        String sex = dataFormatter.formatCellValue(row.getCell(5));//楼栋层数
+                        if (!sex.equals("床位性别")) {
+                            return CommonResult.fail("导入数据第五列为床位性别");
+                        }
+                        String college = dataFormatter.formatCellValue(row.getCell(6));//起始层数
+                        if (!college.equals("所属学院")) {
+                            return CommonResult.fail("导入数据第六列为所属学院");
+                        }
+                        String major = dataFormatter.formatCellValue(row.getCell(7));//备注
+                        if (!major.equals("所属专业")) {
+                            return CommonResult.fail("导入数据第七列为所属专业");
+                        }
+                        String classstr = dataFormatter.formatCellValue(row.getCell(8));//备注
+                        if (!classstr.equals("所属班级")) {
+                            return CommonResult.fail("导入数据第七列为所属班级");
+                        }
+                        String isCheck = dataFormatter.formatCellValue(row.getCell(9));//备注
+                        if (!isCheck.equals("是否入住")) {
+                            return CommonResult.fail("导入数据第七列为是否入住");
+                        }
+                        String admissNum = dataFormatter.formatCellValue(row.getCell(10));//备注
+                        if (!admissNum.equals("录取号")) {
+                            return CommonResult.fail("导入数据第七列为录取号");
+                        }
+                        String name = dataFormatter.formatCellValue(row.getCell(11));//备注
+                        if (!name.equals("姓名")) {
+                            return CommonResult.fail("导入数据第七列为姓名");
+                        }
+                        String remark = dataFormatter.formatCellValue(row.getCell(12));//备注
+                        if (!remark.equals("备注")) {
+                            return CommonResult.fail("导入数据第七列为备注");
+                        }
+                    } else {
+                        WelcomeBed bedData = new WelcomeBed();
+
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//校区
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//楼栋
+                        String dormitory = dataFormatter.formatCellValue(row.getCell(3));//寝室号
+                        String number = dataFormatter.formatCellValue(row.getCell(4));//床位号
+                        Optional<WelcomeBed> ob = wb.stream().filter(e -> e.getSchool().equals(school) && e.getBuild().equals(build)
+                                && e.getDormitory().equals(dormitory) && e.getNumber().intValue() == Integer.valueOf(number).intValue()).findFirst();
+                        if(ob != null && ob.isPresent()){
+                            bedData.setId(ob.get().getId());
+                        }
+
+                        String sex = dataFormatter.formatCellValue(row.getCell(5));//楼栋层数
+                        String college = dataFormatter.formatCellValue(row.getCell(6));//起始层数
+                        String major = dataFormatter.formatCellValue(row.getCell(7));//备注
+                        String classstr = dataFormatter.formatCellValue(row.getCell(8));//备注
+                        String isCheck = dataFormatter.formatCellValue(row.getCell(9));//备注
+                        String admissNum = dataFormatter.formatCellValue(row.getCell(10));//备注
+                        String name = dataFormatter.formatCellValue(row.getCell(11));//备注
+                        String remark = dataFormatter.formatCellValue(row.getCell(12));//备注
+
+                        bedData.setSchool(school);
+
+                        //楼栋
+                        if(wbils != null && wbils.size() > 0){
+                            Optional<WelcomeBuild> oBuild = wbils.stream().filter(e -> e.getBuild().equals(build)).findFirst();
+                            if(oBuild != null && oBuild.isPresent()){
+                                bedData.setBuild(build);
+                                bedData.setBuildId(oBuild.get().getId());
+                            }
+                        }
+
+                        //寝室
+                        if(wds != null && wds.size() > 0){
+                            Optional<WelcomeDormitory> oDormitory = wds.stream().filter(e -> e.getDormitory().equals(dormitory)).findFirst();
+                            if(oDormitory != null && oDormitory.isPresent()){
+                                bedData.setDormitory(dormitory);
+                                bedData.setDormitoryId(oDormitory.get().getId());
+                            }
+                        }
+
+                        bedData.setNumber(Integer.valueOf(number));
+                        bedData.setSex(sex);
+
+                        //region 院系专业
+                        Optional<WelcomeOrg> owo = wos.stream().filter(e -> e.getName().equals(college)).findFirst();
+                        if (owo != null && owo.isPresent()) {
+                            bedData.setCollege(college);
+                            bedData.setCollegeId(owo.get().getId());
+                        }
+
+                        Optional<WelcomeOrg> omwo = wos.stream().filter(e -> e.getName().equals(major)).findFirst();
+                        if (omwo != null && omwo.isPresent()) {
+                            bedData.setMajor(major);
+                            bedData.setMajorId(omwo.get().getId());
+                        }
+
+                        Optional<WelcomeOrg> ocwo = wos.stream().filter(e -> e.getName().equals(classstr)).findFirst();
+                        if (ocwo != null && ocwo.isPresent()) {
+                            bedData.setClassstr(classstr);
+                            bedData.setClassstrId(ocwo.get().getId());
+                        }
+                        //endregion
+
+                        bedData.setIsCheck(Integer.valueOf(isCheck));
+                        bedData.setCardNum(admissNum);
+                        bedData.setName(name);
+                        bedData.setRemark(remark);
+                        result.add(bedData);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            return CommonResult.fail("请按模板格式导入数据");
+        }
+
+        return CommonResult.ok(result);
+    }
+
+
+    @Override
+    public CommonResult downloadBedExcel() {
+        return CommonResult.ok("200", "操作成功", "https://chtech.ncjti.edu.cn/alumnus/homeimage/床位信息管理.xlsx");
+    }
+
+    @Override
+    public void welcomeBedExport(HttpServletResponse response, String school, Integer buildId, Integer dormitoryId, String sex, Integer isCheck, Integer collegeId, Integer majorId, Integer classstrId) {
+        List<WelcomeBed> result = welcomeBedService.queryPageWelcomeBeds(school, buildId, dormitoryId, sex, isCheck, collegeId, majorId, classstrId);
+
+        //导出
+        Workbook workbook = new XSSFWorkbook();
+        Sheet sheet = workbook.createSheet("床位信息");
 
 
+        Row headerRow = sheet.createRow(0);
+        headerRow.createCell(0).setCellValue("序号");
+        headerRow.createCell(1).setCellValue("校区名称");
+        headerRow.createCell(2).setCellValue("楼栋名称");
+        headerRow.createCell(3).setCellValue("寝室号");
+        headerRow.createCell(4).setCellValue("床位号");
+        headerRow.createCell(5).setCellValue("床位性别");
+        headerRow.createCell(6).setCellValue("所属学院");
+        headerRow.createCell(7).setCellValue("所属专业");
+        headerRow.createCell(8).setCellValue("所属班级");
+        headerRow.createCell(9).setCellValue("是否入住");
+        headerRow.createCell(10).setCellValue("录取号");
+        headerRow.createCell(11).setCellValue("姓名");
+        headerRow.createCell(12).setCellValue("备注");
+        for (int i = 0; i < result.size(); i++) {
+            WelcomeBed bed = result.get(i);
+            Row dataRow = sheet.createRow(i + 1);
+            dataRow.createCell(0).setCellValue(i + 1);
+            dataRow.createCell(1).setCellValue(bed.getSchool());
+            dataRow.createCell(2).setCellValue(bed.getBuild());
+            dataRow.createCell(3).setCellValue(bed.getDormitory());
+            dataRow.createCell(4).setCellValue(bed.getNumber());
+            dataRow.createCell(5).setCellValue(bed.getSex());
+            dataRow.createCell(6).setCellValue(bed.getCollege());
+            dataRow.createCell(7).setCellValue(bed.getMajor());
+            dataRow.createCell(8).setCellValue(bed.getClassstr());
+            dataRow.createCell(9).setCellValue(bed.getIsCheck());
+            dataRow.createCell(10).setCellValue(bed.getCardNum());
+            dataRow.createCell(11).setCellValue(bed.getName());
+            dataRow.createCell(12).setCellValue(bed.getRemark());
+        }
+        // 将工作簿写入文件
+        ExcelUtils.excelDownload(workbook, "床位信息.xlsx", response);
+    }
 }
 }
 
 

+ 280 - 4
src/main/java/com/template/controller/WelcomeBuildController.java

@@ -5,16 +5,40 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.template.api.WelcomeBuildControllerAPI;
 import com.template.api.WelcomeBuildControllerAPI;
+import com.template.common.utils.ExcelUtils;
+import com.template.model.enumModel.eFileType;
 import com.template.model.pojo.WelcomeBuild;
 import com.template.model.pojo.WelcomeBuild;
+import com.template.model.pojo.WelcomeCity;
+import com.template.model.pojo.WelcomeOrg;
+import com.template.model.pojo.WelcomeStudent;
 import com.template.model.result.CommonResult;
 import com.template.model.result.CommonResult;
 import com.template.model.result.PageUtils;
 import com.template.model.result.PageUtils;
+import com.template.model.vo.StudentPageVo;
 import com.template.services.WelcomeBuildService;
 import com.template.services.WelcomeBuildService;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -28,7 +52,7 @@ import java.util.List;
 public class WelcomeBuildController implements WelcomeBuildControllerAPI {
 public class WelcomeBuildController implements WelcomeBuildControllerAPI {
 
 
     @Autowired
     @Autowired
-    WelcomeBuildService welcomeBuildService;
+    private WelcomeBuildService welcomeBuildService;
 
 
     @Override
     @Override
     public CommonResult saveBuild(WelcomeBuild welcomeBuild) {
     public CommonResult saveBuild(WelcomeBuild welcomeBuild) {
@@ -50,15 +74,15 @@ public class WelcomeBuildController implements WelcomeBuildControllerAPI {
     @Override
     @Override
     public CommonResult deleteBuild(Integer buildId) {
     public CommonResult deleteBuild(Integer buildId) {
 
 
-        welcomeBuildService.removeById(buildId);
+        boolean result = welcomeBuildService.removeById(buildId);
 
 
-        return CommonResult.ok();
+        return result ? CommonResult.ok() : CommonResult.fail();
     }
     }
 
 
     @Override
     @Override
     public CommonResult updateBuild(WelcomeBuild welcomeBuild) {
     public CommonResult updateBuild(WelcomeBuild welcomeBuild) {
 
 
-//        先查询是否有当前楼栋信息
+        //先查询是否有当前楼栋信息
         LambdaQueryWrapper<WelcomeBuild> wrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<WelcomeBuild> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(WelcomeBuild::getBuild, welcomeBuild.getBuild())
         wrapper.eq(WelcomeBuild::getBuild, welcomeBuild.getBuild())
                 .eq(WelcomeBuild::getSchool,welcomeBuild.getSchool());
                 .eq(WelcomeBuild::getSchool,welcomeBuild.getSchool());
@@ -105,6 +129,258 @@ public class WelcomeBuildController implements WelcomeBuildControllerAPI {
         return CommonResult.ok(schoolGroup);
         return CommonResult.ok(schoolGroup);
     }
     }
 
 
+    @Override
+    public CommonResult importBuildExcel(MultipartFile file) throws IOException, ParseException {
+        System.out.println("导入楼栋信息");
+        if (file.isEmpty() || file.getSize() == 0) {
+            return CommonResult.fail("导入文件不能为空");
+        }
+        String ContentType = file.getContentType();
+        InputStream inputStream = file.getInputStream();
+        List<WelcomeBuild> result = new ArrayList<>();
+
+        //xls格式文件
+        if (ContentType.equals(eFileType.Xls.getValue())) {
+
+            CommonResult<List<WelcomeBuild>> resultData = readXls(inputStream);
+            if (!resultData.isSuccess()) {
+                return resultData;
+            }
+            result = resultData.getData();
+
+        } else if (ContentType.equals(eFileType.Xlsx.getValue())) {
+            CommonResult<List<WelcomeBuild>> resultData = readXlsx(inputStream);
+            if (!resultData.isSuccess()) {
+                return resultData;
+            }
+            result = resultData.getData();
+
+        } else {
+            return CommonResult.fail("楼栋信息数据导入只支持Xls或Xlsx格式文件");
+        }
+
+        boolean resultBool = welcomeBuildService.saveOrUpdateBatch(result);
+
+        System.out.println("导入楼栋1");
+        return resultBool ? CommonResult.ok("导入成功") : CommonResult.fail("导入失败");
+    }
+
+    /**
+     * xls文件读取方法
+     *
+     * @param inputStream
+     * @return
+     * @throws IOException
+     * @throws ParseException
+     */
+    private CommonResult<List<WelcomeBuild>> readXls(InputStream inputStream) throws IOException, ParseException {
+        List<WelcomeBuild> result = new ArrayList<>();
+        HSSFWorkbook sheets = new HSSFWorkbook(inputStream);
+
+        List<WelcomeBuild> wb = welcomeBuildService.list(null);
+
+        //读取第一张sheet
+        HSSFSheet sheetAt = sheets.getSheetAt(0);
+        DataFormatter dataFormatter = new DataFormatter();
+
+        try {
+            //rowNum = 3 从第三行开始获取值
+            //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
+            for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) {
+
+                HSSFRow row = sheetAt.getRow(rowNum);
+
+                if (row != null) {
+                    //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
+                    //所以先使用setCellType()方法先将该单元格的类型设置为STRING
+                    //然后poi会根据字符串读取它
+                    //第一行数据获取月份
+                    if (rowNum == 0) {
+                        String number = dataFormatter.formatCellValue(row.getCell(0));//序号
+                        if (!number.equals("序号")) {
+                            return CommonResult.fail("导入数据第一列为序号");
+                        }
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//校区名称
+                        if (!school.equals("校区名称")) {
+                            return CommonResult.fail("导入数据第二列为校区名称");
+                        }
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//楼栋名称
+                        if (!build.equals("楼栋名称")) {
+                            return CommonResult.fail("导入数据第三列为楼栋名称");
+                        }
+                        String sex = dataFormatter.formatCellValue(row.getCell(3));//楼栋性别
+                        if (!sex.equals("楼栋性别")) {
+                            return CommonResult.fail("导入数据第四列为楼栋性别");
+                        }
+                        String floors = dataFormatter.formatCellValue(row.getCell(4));//楼栋层数
+                        if (!floors.equals("楼栋层数")) {
+                            return CommonResult.fail("导入数据第五列为楼栋层数");
+                        }
+                        String startFloor = dataFormatter.formatCellValue(row.getCell(5));//起始层数
+                        if (!startFloor.equals("起始层数")) {
+                            return CommonResult.fail("导入数据第六列为起始层数");
+                        }
+                        String remark = dataFormatter.formatCellValue(row.getCell(6));//备注
+                        if (!remark.equals("备注")) {
+                            return CommonResult.fail("导入数据第七列为备注");
+                        }
+                    } else {
+                        WelcomeBuild buildData = new WelcomeBuild();
+
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//校区名称
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//楼栋名称
+                        Optional<WelcomeBuild> ob = wb.stream().filter(e -> e.getSchool().equals(school) && e.getBuild().equals(build)).findFirst();
+                        if(ob != null && ob.isPresent()){
+                            buildData.setId(ob.get().getId());
+                        }
+
+                        buildData.setSchool(school);
+                        buildData.setBuild(build);
+                        String sex = dataFormatter.formatCellValue(row.getCell(3));//楼栋性别
+                        buildData.setSex(sex);
+                        String floors = dataFormatter.formatCellValue(row.getCell(4));//楼栋层数
+                        buildData.setFloors(floors);
+                        String startFloor = dataFormatter.formatCellValue(row.getCell(5));//起始层数
+                        buildData.setStartFloor(Integer.valueOf(startFloor));
+                        String remark = dataFormatter.formatCellValue(row.getCell(6));//备注
+                        buildData.setRemark(remark);
+
+                        result.add(buildData);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            return CommonResult.fail("请按模板格式导入数据");
+        }
+
+        return CommonResult.ok(result);
+    }
+
+    /**
+     * xls文件读取方法
+     *
+     * @param inputStream
+     * @return
+     * @throws IOException
+     * @throws ParseException
+     */
+    private CommonResult<List<WelcomeBuild>> readXlsx(InputStream inputStream) throws IOException, ParseException {
+        List<WelcomeBuild> result = new ArrayList<>();
+        XSSFWorkbook sheets = new XSSFWorkbook(inputStream);
+
+        List<WelcomeBuild> wb = welcomeBuildService.list(null);
+
+        //读取第一张sheet
+        XSSFSheet sheetAt = sheets.getSheetAt(0);
+        DataFormatter dataFormatter = new DataFormatter();
+
+        try {
+            //rowNum = 3 从第三行开始获取值
+            //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
+            for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) {
+
+                XSSFRow row = sheetAt.getRow(rowNum);
+
+                if (row != null) {
+                    //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
+                    //所以先使用setCellType()方法先将该单元格的类型设置为STRING
+                    //然后poi会根据字符串读取它
+                    //第一行数据获取月份
+                    if (rowNum == 0) {
+                        String number = dataFormatter.formatCellValue(row.getCell(0));//序号
+                        if (!number.equals("序号")) {
+                            return CommonResult.fail("导入数据第一列为序号");
+                        }
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//校区名称
+                        if (!school.equals("校区名称")) {
+                            return CommonResult.fail("导入数据第二列为校区名称");
+                        }
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//楼栋名称
+                        if (!build.equals("楼栋名称")) {
+                            return CommonResult.fail("导入数据第三列为楼栋名称");
+                        }
+                        String sex = dataFormatter.formatCellValue(row.getCell(3));//楼栋性别
+                        if (!sex.equals("楼栋性别")) {
+                            return CommonResult.fail("导入数据第四列为楼栋性别");
+                        }
+                        String floors = dataFormatter.formatCellValue(row.getCell(4));//楼栋层数
+                        if (!floors.equals("楼栋层数")) {
+                            return CommonResult.fail("导入数据第五列为楼栋层数");
+                        }
+                        String startFloor = dataFormatter.formatCellValue(row.getCell(5));//起始层数
+                        if (!startFloor.equals("起始层数")) {
+                            return CommonResult.fail("导入数据第六列为起始层数");
+                        }
+                        String remark = dataFormatter.formatCellValue(row.getCell(6));//备注
+                        if (!remark.equals("备注")) {
+                            return CommonResult.fail("导入数据第七列为备注");
+                        }
+                    } else {
+                        WelcomeBuild buildData = new WelcomeBuild();
+
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//校区名称
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//楼栋名称
+                        Optional<WelcomeBuild> ob = wb.stream().filter(e -> e.getSchool().equals(school) && e.getBuild().equals(build)).findFirst();
+                        if(ob != null && ob.isPresent()){
+                            buildData.setId(ob.get().getId());
+                        }
+
+                        buildData.setSchool(school);
+                        buildData.setBuild(build);
+                        String sex = dataFormatter.formatCellValue(row.getCell(3));//楼栋性别
+                        buildData.setSex(sex);
+                        String floors = dataFormatter.formatCellValue(row.getCell(4));//楼栋层数
+                        buildData.setFloors(floors);
+                        String startFloor = dataFormatter.formatCellValue(row.getCell(5));//起始层数
+                        buildData.setStartFloor(Integer.valueOf(startFloor));
+                        String remark = dataFormatter.formatCellValue(row.getCell(6));//备注
+                        buildData.setRemark(remark);
+
+                        result.add(buildData);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            return CommonResult.fail("请按模板格式导入数据");
+        }
+
+        return CommonResult.ok(result);
+    }
+
+    @Override
+    public CommonResult downloadBuildExcel() {
+        return CommonResult.ok("200", "操作成功", "https://chtech.ncjti.edu.cn/alumnus/homeimage/学生信息管理.xlsx");
+    }
+
+    @Override
+    public void welcomeBuildExport(HttpServletResponse response, String schoolName, String buildName, String sex) {
+        List<WelcomeBuild> result = welcomeBuildService.listBuild(schoolName,buildName,sex);
+        //导出
+        Workbook workbook = new XSSFWorkbook();
+        Sheet sheet = workbook.createSheet("楼栋信息");
+
+        Row headerRow = sheet.createRow(0);
+        headerRow.createCell(0).setCellValue("序号");
+        headerRow.createCell(1).setCellValue("校区名称");
+        headerRow.createCell(2).setCellValue("楼栋名称");
+        headerRow.createCell(3).setCellValue("楼栋性别");
+        headerRow.createCell(4).setCellValue("楼栋层数");
+        headerRow.createCell(5).setCellValue("起始层数");
+        headerRow.createCell(6).setCellValue("备注");
+        for (int i = 0; i < result.size(); i++) {
+            WelcomeBuild build = result.get(i);
+            Row dataRow = sheet.createRow(i + 1);
+            dataRow.createCell(0).setCellValue(i + 1);
+            dataRow.createCell(1).setCellValue(build.getSchool());
+            dataRow.createCell(2).setCellValue(build.getBuild());
+            dataRow.createCell(3).setCellValue(build.getSex());
+            dataRow.createCell(4).setCellValue(build.getFloors());
+            dataRow.createCell(5).setCellValue(build.getStartFloor());
+            dataRow.createCell(6).setCellValue(build.getRemark());
+        }
+        // 将工作簿写入文件
+        ExcelUtils.excelDownload(workbook, "楼栋信息.xlsx", response);
+    }
 
 
 }
 }
 
 

+ 381 - 8
src/main/java/com/template/controller/WelcomeDormitoryController.java

@@ -6,21 +6,35 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.template.api.WelcomeDormitoryControllerAPI;
 import com.template.api.WelcomeDormitoryControllerAPI;
 import com.template.api.WelcomeStudentControllerAPI;
 import com.template.api.WelcomeStudentControllerAPI;
-import com.template.model.pojo.WelcomeDormitory;
-import com.template.model.pojo.WelcomeStudent;
-import com.template.model.pojo.WelcomeStudentDormitory;
+import com.template.common.utils.ExcelUtils;
+import com.template.model.enumModel.eFileType;
+import com.template.model.pojo.*;
 import com.template.model.result.CommonResult;
 import com.template.model.result.CommonResult;
 import com.template.model.result.PageUtils;
 import com.template.model.result.PageUtils;
-import com.template.services.WelcomeDormitoryService;
-import com.template.services.WelcomeStudentDormitoryService;
-import com.template.services.WelcomeStudentService;
+import com.template.services.*;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.Optional;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -34,10 +48,16 @@ import java.util.List;
 public class WelcomeDormitoryController implements WelcomeDormitoryControllerAPI {
 public class WelcomeDormitoryController implements WelcomeDormitoryControllerAPI {
 
 
     @Autowired
     @Autowired
-    WelcomeDormitoryService welcomeDormitoryService;
+    private WelcomeOrgService welcomeOrgService;
 
 
     @Autowired
     @Autowired
-    WelcomeStudentDormitoryService welcomeStudentDormitoryService;
+    private WelcomeBuildService welcomeBuildService;
+
+    @Autowired
+    private WelcomeDormitoryService welcomeDormitoryService;
+
+    @Autowired
+    private WelcomeStudentDormitoryService welcomeStudentDormitoryService;
 
 
     @Override
     @Override
     public CommonResult saveDormitory(WelcomeDormitory welcomeDormitory) {
     public CommonResult saveDormitory(WelcomeDormitory welcomeDormitory) {
@@ -56,6 +76,9 @@ public class WelcomeDormitoryController implements WelcomeDormitoryControllerAPI
         welcomeDormitory.setFreeBedNumber(welcomeDormitory.getBedNumber());
         welcomeDormitory.setFreeBedNumber(welcomeDormitory.getBedNumber());
 
 
         welcomeDormitoryService.save(welcomeDormitory);
         welcomeDormitoryService.save(welcomeDormitory);
+
+        //动态生成床位
+
         return CommonResult.ok();
         return CommonResult.ok();
     }
     }
 
 
@@ -154,5 +177,355 @@ public class WelcomeDormitoryController implements WelcomeDormitoryControllerAPI
 
 
         return CommonResult.ok(bedNums);
         return CommonResult.ok(bedNums);
     }
     }
+
+
+
+    @Override
+    public CommonResult importDormitoryExcel(MultipartFile file) throws IOException, ParseException {
+        System.out.println("导入楼栋信息");
+        if (file.isEmpty() || file.getSize() == 0) {
+            return CommonResult.fail("导入文件不能为空");
+        }
+        String ContentType = file.getContentType();
+        InputStream inputStream = file.getInputStream();
+        List<WelcomeDormitory> result = new ArrayList<>();
+
+        //xls格式文件
+        if (ContentType.equals(eFileType.Xls.getValue())) {
+
+            CommonResult<List<WelcomeDormitory>> resultData = readXls(inputStream);
+            if (!resultData.isSuccess()) {
+                return resultData;
+            }
+            result = resultData.getData();
+
+        } else if (ContentType.equals(eFileType.Xlsx.getValue())) {
+            CommonResult<List<WelcomeDormitory>> resultData = readXlsx(inputStream);
+            if (!resultData.isSuccess()) {
+                return resultData;
+            }
+            result = resultData.getData();
+
+        } else {
+            return CommonResult.fail("楼栋信息数据导入只支持Xls或Xlsx格式文件");
+        }
+
+        boolean resultBool = welcomeDormitoryService.saveOrUpdateBatch(result);
+
+        System.out.println("导入楼栋1");
+        return resultBool ? CommonResult.ok("导入成功") : CommonResult.fail("导入失败");
+    }
+
+    /**
+     * xls文件读取方法
+     *
+     * @param inputStream
+     * @return
+     * @throws IOException
+     * @throws ParseException
+     */
+    private CommonResult<List<WelcomeDormitory>> readXls(InputStream inputStream) throws IOException, ParseException {
+        List<WelcomeDormitory> result = new ArrayList<>();
+        HSSFWorkbook sheets = new HSSFWorkbook(inputStream);
+
+        List<WelcomeDormitory> wds = welcomeDormitoryService.list(null);
+        List<WelcomeBuild> buildDatas = welcomeBuildService.list(null);
+        List<WelcomeOrg> orgs = welcomeOrgService.list(null);
+
+        //读取第一张sheet
+        HSSFSheet sheetAt = sheets.getSheetAt(0);
+        DataFormatter dataFormatter = new DataFormatter();
+
+        try {
+            //rowNum = 3 从第三行开始获取值
+            //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
+            for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) {
+
+                HSSFRow row = sheetAt.getRow(rowNum);
+
+                if (row != null) {
+                    //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
+                    //所以先使用setCellType()方法先将该单元格的类型设置为STRING
+                    //然后poi会根据字符串读取它
+                    //第一行数据获取月份
+                    if (rowNum == 0) {
+                        String number = dataFormatter.formatCellValue(row.getCell(0));//序号
+                        if (!number.equals("序号")) {
+                            return CommonResult.fail("导入数据第一列为序号");
+                        }
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//校区名称
+                        if (!school.equals("校区名称")) {
+                            return CommonResult.fail("导入数据第二列为校区名称");
+                        }
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//楼栋名称
+                        if (!build.equals("楼栋名称")) {
+                            return CommonResult.fail("导入数据第三列为楼栋名称");
+                        }
+                        String dormitory = dataFormatter.formatCellValue(row.getCell(3));//寝室号
+                        if (!dormitory.equals("寝室号")) {
+                            return CommonResult.fail("导入数据第四列为寝室号");
+                        }
+                        String sex = dataFormatter.formatCellValue(row.getCell(4));//寝室性别
+                        if (!sex.equals("寝室性别")) {
+                            return CommonResult.fail("导入数据第五列为寝室性别");
+                        }
+                        String major = dataFormatter.formatCellValue(row.getCell(5));//所属专业
+                        if (!major.equals("所属专业")) {
+                            return CommonResult.fail("导入数据第六列为所属专业");
+                        }
+                        String college = dataFormatter.formatCellValue(row.getCell(6));//所属学院
+                        if (!college.equals("所属学院")) {
+                            return CommonResult.fail("导入数据第七列为所属学院");
+                        }
+                        String bedNum = dataFormatter.formatCellValue(row.getCell(7));//床位数
+                        if (!bedNum.equals("床位数")) {
+                            return CommonResult.fail("导入数据第七列为床位数");
+                        }
+                        String freeBedNumber = dataFormatter.formatCellValue(row.getCell(8));//空闲床位数
+                        if (!freeBedNumber.equals("空闲床位数")) {
+                            return CommonResult.fail("导入数据第七列为空闲床位数");
+                        }
+                        String status = dataFormatter.formatCellValue(row.getCell(9));//入住情况
+                        if (!status.equals("入住情况")) {
+                            return CommonResult.fail("导入数据第七列为入住情况");
+                        }
+                        String remark = dataFormatter.formatCellValue(row.getCell(10));//备注
+                        if (!remark.equals("备注")) {
+                            return CommonResult.fail("导入数据第七列为备注");
+                        }
+
+                    } else {
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//校区名称
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//楼栋名称
+                        String dormitory = dataFormatter.formatCellValue(row.getCell(3));//寝室号
+                        WelcomeDormitory wd = new WelcomeDormitory();
+                        Optional<WelcomeDormitory> owelcomeDormitory = wds.stream().filter(e -> e.getSchool().equals(school) && e.getBuild().equals(build) && e.getDormitory().equals(dormitory)).findFirst();
+                        if(owelcomeDormitory != null && owelcomeDormitory.isPresent()){
+                            wd.setId(owelcomeDormitory.get().getId());
+                        }
+
+                        String sex = dataFormatter.formatCellValue(row.getCell(4));//寝室性别
+                        String major = dataFormatter.formatCellValue(row.getCell(5));//所属专业
+                        String college = dataFormatter.formatCellValue(row.getCell(6));//所属学院
+                        String bedNum = dataFormatter.formatCellValue(row.getCell(7));//床位数
+                        String freeBedNumber = dataFormatter.formatCellValue(row.getCell(8));//空闲床位数
+                        String status = dataFormatter.formatCellValue(row.getCell(9));//入住情况
+                        String remark = dataFormatter.formatCellValue(row.getCell(10));//备注
+
+
+                        wd.setSchool(school);
+                        Optional<WelcomeBuild> oBuild = buildDatas.stream().filter(e -> e.getSchool().equals(school) && e.getBuild().equals(build)).findFirst();
+                        if(oBuild != null && oBuild.isPresent()){
+                            wd.setBuild(build);
+                            wd.setBuildId(oBuild.get().getId());
+                        }
+                        wd.setDormitory(dormitory);
+                        wd.setSex(sex);
+
+                        Optional<WelcomeOrg> oCollege = orgs.stream().filter(e -> e.getName().equals(college)).findFirst();
+                        if(oCollege != null && oCollege.isPresent()){
+                            wd.setCollege(major);
+                            wd.setCollegeId(oCollege.get().getId());
+                        }
+
+                        Optional<WelcomeOrg> oMajor = orgs.stream().filter(e -> e.getName().equals(major)).findFirst();
+                        if(oMajor != null && oMajor.isPresent()){
+                            wd.setMajor(major);
+                            wd.setMajorId(oMajor.get().getId());
+                        }
+
+                        wd.setBedNumber(Integer.valueOf(bedNum));
+                        wd.setFreeBedNumber(Integer.valueOf(freeBedNumber));
+                        wd.setStatus(Integer.valueOf(status));
+                        wd.setRemark(remark);
+
+                        result.add(wd);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            return CommonResult.fail("请按模板格式导入数据");
+        }
+
+        return CommonResult.ok(result);
+    }
+
+    /**
+     * xls文件读取方法
+     *
+     * @param inputStream
+     * @return
+     * @throws IOException
+     * @throws ParseException
+     */
+    private CommonResult<List<WelcomeDormitory>> readXlsx(InputStream inputStream) throws IOException, ParseException {
+        List<WelcomeDormitory> result = new ArrayList<>();
+        XSSFWorkbook sheets = new XSSFWorkbook(inputStream);
+
+        List<WelcomeDormitory> wds = welcomeDormitoryService.list(null);
+        List<WelcomeBuild> buildDatas = welcomeBuildService.list(null);
+        List<WelcomeOrg> orgs = welcomeOrgService.list(null);
+
+        //读取第一张sheet
+        XSSFSheet sheetAt = sheets.getSheetAt(0);
+        DataFormatter dataFormatter = new DataFormatter();
+
+        try {
+            //rowNum = 3 从第三行开始获取值
+            //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
+            for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) {
+
+                XSSFRow row = sheetAt.getRow(rowNum);
+
+                if (row != null) {
+                    //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
+                    //所以先使用setCellType()方法先将该单元格的类型设置为STRING
+                    //然后poi会根据字符串读取它
+                    //第一行数据获取月份
+                    if (rowNum == 0) {
+                        String number = dataFormatter.formatCellValue(row.getCell(0));//序号
+                        if (!number.equals("序号")) {
+                            return CommonResult.fail("导入数据第一列为序号");
+                        }
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//校区名称
+                        if (!school.equals("校区名称")) {
+                            return CommonResult.fail("导入数据第二列为校区名称");
+                        }
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//楼栋名称
+                        if (!build.equals("楼栋名称")) {
+                            return CommonResult.fail("导入数据第三列为楼栋名称");
+                        }
+                        String dormitory = dataFormatter.formatCellValue(row.getCell(3));//寝室号
+                        if (!dormitory.equals("寝室号")) {
+                            return CommonResult.fail("导入数据第四列为寝室号");
+                        }
+                        String sex = dataFormatter.formatCellValue(row.getCell(4));//寝室性别
+                        if (!sex.equals("寝室性别")) {
+                            return CommonResult.fail("导入数据第五列为寝室性别");
+                        }
+                        String major = dataFormatter.formatCellValue(row.getCell(5));//所属专业
+                        if (!major.equals("所属专业")) {
+                            return CommonResult.fail("导入数据第六列为所属专业");
+                        }
+                        String college = dataFormatter.formatCellValue(row.getCell(6));//所属学院
+                        if (!college.equals("所属学院")) {
+                            return CommonResult.fail("导入数据第七列为所属学院");
+                        }
+                        String bedNum = dataFormatter.formatCellValue(row.getCell(7));//床位数
+                        if (!bedNum.equals("床位数")) {
+                            return CommonResult.fail("导入数据第七列为床位数");
+                        }
+                        String freeBedNumber = dataFormatter.formatCellValue(row.getCell(8));//空闲床位数
+                        if (!freeBedNumber.equals("空闲床位数")) {
+                            return CommonResult.fail("导入数据第七列为空闲床位数");
+                        }
+                        String status = dataFormatter.formatCellValue(row.getCell(9));//入住情况
+                        if (!status.equals("入住情况")) {
+                            return CommonResult.fail("导入数据第七列为入住情况");
+                        }
+                        String remark = dataFormatter.formatCellValue(row.getCell(10));//备注
+                        if (!remark.equals("备注")) {
+                            return CommonResult.fail("导入数据第七列为备注");
+                        }
+
+                    } else {
+                        String school = dataFormatter.formatCellValue(row.getCell(1));//校区名称
+                        String build = dataFormatter.formatCellValue(row.getCell(2));//楼栋名称
+                        String dormitory = dataFormatter.formatCellValue(row.getCell(3));//寝室号
+                        WelcomeDormitory wd = new WelcomeDormitory();
+                        Optional<WelcomeDormitory> owelcomeDormitory = wds.stream().filter(e -> e.getSchool().equals(school) && e.getBuild().equals(build) && e.getDormitory().equals(dormitory)).findFirst();
+                        if(owelcomeDormitory != null && owelcomeDormitory.isPresent()){
+                            wd.setId(owelcomeDormitory.get().getId());
+                        }
+
+                        String sex = dataFormatter.formatCellValue(row.getCell(4));//寝室性别
+                        String major = dataFormatter.formatCellValue(row.getCell(5));//所属专业
+                        String college = dataFormatter.formatCellValue(row.getCell(6));//所属学院
+                        String bedNum = dataFormatter.formatCellValue(row.getCell(7));//床位数
+                        String freeBedNumber = dataFormatter.formatCellValue(row.getCell(8));//空闲床位数
+                        String status = dataFormatter.formatCellValue(row.getCell(9));//入住情况
+                        String remark = dataFormatter.formatCellValue(row.getCell(10));//备注
+
+
+                        wd.setSchool(school);
+                        Optional<WelcomeBuild> oBuild = buildDatas.stream().filter(e -> e.getSchool().equals(school) && e.getBuild().equals(build)).findFirst();
+                        if(oBuild != null && oBuild.isPresent()){
+                            wd.setBuild(build);
+                            wd.setBuildId(oBuild.get().getId());
+                        }
+                        wd.setDormitory(dormitory);
+                        wd.setSex(sex);
+
+                        Optional<WelcomeOrg> oCollege = orgs.stream().filter(e -> e.getName().equals(college)).findFirst();
+                        if(oCollege != null && oCollege.isPresent()){
+                            wd.setCollege(major);
+                            wd.setCollegeId(oCollege.get().getId());
+                        }
+
+                        Optional<WelcomeOrg> oMajor = orgs.stream().filter(e -> e.getName().equals(major)).findFirst();
+                        if(oMajor != null && oMajor.isPresent()){
+                            wd.setMajor(major);
+                            wd.setMajorId(oMajor.get().getId());
+                        }
+
+                        wd.setBedNumber(Integer.valueOf(bedNum));
+                        wd.setFreeBedNumber(Integer.valueOf(freeBedNumber));
+                        wd.setStatus(Integer.valueOf(status));
+                        wd.setRemark(remark);
+
+                        result.add(wd);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            return CommonResult.fail("请按模板格式导入数据");
+        }
+
+        return CommonResult.ok(result);
+    }
+
+    @Override
+    public CommonResult downloadDormitoryExcel() {
+        return CommonResult.ok("200", "操作成功", "https://chtech.ncjti.edu.cn/alumnus/homeimage/寝室信息管理.xlsx");
+    }
+
+    @Override
+    public void welcomeDormitoryExport(HttpServletResponse response, String schoolName,String buildName,String dormitory,String sex,Integer status,String major,String college) {
+        List<WelcomeDormitory> result = welcomeDormitoryService.listDormitory(schoolName,buildName,dormitory,sex,status,major,college);
+        //导出
+        Workbook workbook = new XSSFWorkbook();
+        Sheet sheet = workbook.createSheet("宿舍信息");
+
+        Row headerRow = sheet.createRow(0);
+        headerRow.createCell(0).setCellValue("序号");
+        headerRow.createCell(1).setCellValue("校区名称");
+        headerRow.createCell(2).setCellValue("楼栋名称");
+        headerRow.createCell(3).setCellValue("寝室号");
+        headerRow.createCell(4).setCellValue("寝室性别");
+        headerRow.createCell(5).setCellValue("所属专业");
+        headerRow.createCell(6).setCellValue("所属学院");
+        headerRow.createCell(7).setCellValue("床位数");
+        headerRow.createCell(8).setCellValue("空闲床位数");
+        headerRow.createCell(9).setCellValue("入住情况");
+        headerRow.createCell(10).setCellValue("备注");
+        for (int i = 0; i < result.size(); i++) {
+            WelcomeDormitory build = result.get(i);
+            Row dataRow = sheet.createRow(i + 1);
+            dataRow.createCell(0).setCellValue(i + 1);
+            dataRow.createCell(1).setCellValue(build.getSchool());
+            dataRow.createCell(2).setCellValue(build.getBuild());
+            dataRow.createCell(3).setCellValue(build.getDormitory());
+            dataRow.createCell(4).setCellValue(build.getSex());
+            dataRow.createCell(5).setCellValue(build.getMajor());
+            dataRow.createCell(6).setCellValue(build.getCollege());
+            dataRow.createCell(7).setCellValue(build.getBedNumber());
+            dataRow.createCell(8).setCellValue(build.getFreeBedNumber());
+            dataRow.createCell(9).setCellValue(build.getStatus());
+            dataRow.createCell(10).setCellValue(build.getRemark());
+        }
+        // 将工作簿写入文件
+        ExcelUtils.excelDownload(workbook, "寝室信息.xlsx", response);
+    }
+
 }
 }
 
 

+ 1 - 2
src/main/java/com/template/controller/WelcomeStudentController.java

@@ -1179,7 +1179,6 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
         } catch (Exception e) {
         } catch (Exception e) {
             return CommonResult.fail("请按模板格式导入数据");
             return CommonResult.fail("请按模板格式导入数据");
         }
         }
-
         return CommonResult.ok(result);
         return CommonResult.ok(result);
     }
     }
 
 
@@ -1190,7 +1189,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     }
     }
 
 
     @Override
     @Override
-    public void jgcloudProjectExport(HttpServletResponse response, Integer collegeId, Integer majorId, Integer classstrId, String trafficMethod, String name) {
+    public void welcomeStudentExport(HttpServletResponse response, Integer collegeId, Integer majorId, Integer classstrId, String trafficMethod, String name) {
         List<StudentPageVo> result = welcomeStudentService.queryStudentList(collegeId, majorId, classstrId, trafficMethod, name);
         List<StudentPageVo> result = welcomeStudentService.queryStudentList(collegeId, majorId, classstrId, trafficMethod, name);
         //导出
         //导出
         Workbook workbook = new XSSFWorkbook();
         Workbook workbook = new XSSFWorkbook();

+ 77 - 0
src/main/java/com/template/model/request/InsertWelcomeBedRequest.java

@@ -0,0 +1,77 @@
+package com.template.model.request;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-06-13
+ */
+@Data
+public class InsertWelcomeBedRequest implements Serializable {
+
+    @ApiModelProperty(value = "床位号")
+    private Integer number;
+
+    @ApiModelProperty(value = "学生身份证号")
+    private String studentCard;
+
+    @ApiModelProperty(value = "校区名称")
+    private String school;
+
+    @ApiModelProperty(value = "楼栋ID")
+    private Integer buildId;
+
+    @ApiModelProperty(value = "楼栋名称")
+    private String build;
+
+    @ApiModelProperty(value = "寝室ID")
+    private Integer dormitoryId;
+
+    @ApiModelProperty(value = "寝室号")
+    private String dormitory;
+
+    @ApiModelProperty(value = "床位性别")
+    private String sex;
+
+    @ApiModelProperty(value = "所属学院")
+    private String college;
+
+    @ApiModelProperty(value = "所属学院ID")
+    private Integer collegeId;
+
+    @ApiModelProperty(value = "所属专业ID")
+    private Integer majorId;
+
+    @ApiModelProperty(value = "所属班级")
+    private String classstr;
+
+    @ApiModelProperty(value = "所属班级ID")
+    private Integer classstrId;
+
+    @ApiModelProperty(value = "是否入住")
+    private Integer isCheck;
+
+    @ApiModelProperty(value = "学号")
+    private String cardNum;
+
+    @ApiModelProperty(value = "姓名")
+    private String name;
+
+    @ApiModelProperty(value = "专业")
+    private String major;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}

+ 74 - 0
src/main/java/com/template/model/request/UpdateWelcomeBedRequest.java

@@ -0,0 +1,74 @@
+package com.template.model.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2025-06-13
+ */
+@Data
+public class UpdateWelcomeBedRequest implements Serializable {
+    @ApiModelProperty(value = "数据ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "床位号")
+    private Integer number;
+
+    @ApiModelProperty(value = "学生身份证号")
+    private String studentCard;
+
+    @ApiModelProperty(value = "校区名称")
+    private String school;
+
+    @ApiModelProperty(value = "楼栋ID")
+    private Integer buildId;
+
+    @ApiModelProperty(value = "楼栋名称")
+    private String build;
+
+    @ApiModelProperty(value = "寝室ID")
+    private Integer dormitoryId;
+
+    @ApiModelProperty(value = "寝室号")
+    private String dormitory;
+
+    @ApiModelProperty(value = "床位性别")
+    private String sex;
+
+    @ApiModelProperty(value = "所属学院")
+    private String college;
+
+    @ApiModelProperty(value = "所属学院ID")
+    private Integer collegeId;
+
+    @ApiModelProperty(value = "所属专业ID")
+    private Integer majorId;
+
+    @ApiModelProperty(value = "所属班级")
+    private String classstr;
+
+    @ApiModelProperty(value = "所属班级ID")
+    private Integer classstrId;
+
+    @ApiModelProperty(value = "是否入住")
+    private Integer isCheck;
+
+    @ApiModelProperty(value = "学号")
+    private String cardNum;
+
+    @ApiModelProperty(value = "姓名")
+    private String name;
+
+    @ApiModelProperty(value = "专业")
+    private String major;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}

+ 9 - 3
src/main/java/com/template/services/WelcomeBedService.java

@@ -5,6 +5,8 @@ import com.template.model.pojo.WelcomeBed;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.template.model.result.PageUtils;
 import com.template.model.result.PageUtils;
 
 
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  *  服务类
  *  服务类
@@ -18,9 +20,13 @@ public interface WelcomeBedService extends IService<WelcomeBed> {
 
 
     int updateWelcomeBed(WelcomeBed rns);
     int updateWelcomeBed(WelcomeBed rns);
 
 
-    PageUtils<WelcomeBed> queryPageWelcomeBeds(int currentPage, int pageCount, String parentCode, String keyword);
+    PageUtils<WelcomeBed> queryPageWelcomeBeds(int currentPage, int pageCount, String school, Integer buildId, Integer dormitoryId, String sex, Integer isCheck, Integer collegeId, Integer majorId, Integer classstrId);
+
+    int deleteWelcomeBedById(int id);
+
+    WelcomeBed getBedById(int id);
 
 
-    int deleteWelcomeBedById(String id);
+    WelcomeBed queryBedData(String school,Integer buildId,Integer dormitoryId,Integer number);
 
 
-    WelcomeBed getManageById(String id);
+    List<WelcomeBed> queryPageWelcomeBeds( String school, Integer buildId, Integer dormitoryId, String sex, Integer isCheck, Integer collegeId, Integer majorId, Integer classstrId);
 }
 }

+ 2 - 0
src/main/java/com/template/services/WelcomeBuildService.java

@@ -31,4 +31,6 @@ public interface WelcomeBuildService extends IService<WelcomeBuild> {
     List<String> buildGroup(String schoolName);
     List<String> buildGroup(String schoolName);
 
 
     PageUtils<WelcomeBuild> listBuild(int currentPage, int pageCount, String schoolName, String buildName, String sex);
     PageUtils<WelcomeBuild> listBuild(int currentPage, int pageCount, String schoolName, String buildName, String sex);
+
+    List<WelcomeBuild> listBuild( String schoolName, String buildName, String sex);
 }
 }

+ 2 - 0
src/main/java/com/template/services/WelcomeDormitoryService.java

@@ -31,4 +31,6 @@ public interface WelcomeDormitoryService extends IService<WelcomeDormitory> {
     List<String> groupDormitory(String sex,String college,String gradestr,String school,String buildName);
     List<String> groupDormitory(String sex,String college,String gradestr,String school,String buildName);
 
 
     PageUtils<WelcomeDormitory> listDormitory(int currentPage, int pageCount, String schoolName, String buildName, String dormitory, String sex, Integer status, String major, String college);
     PageUtils<WelcomeDormitory> listDormitory(int currentPage, int pageCount, String schoolName, String buildName, String dormitory, String sex, Integer status, String major, String college);
+
+    List<WelcomeDormitory> listDormitory( String schoolName, String buildName, String dormitory, String sex, Integer status, String major, String college);
 }
 }

+ 4 - 0
src/main/java/com/template/services/WelcomeStudentService.java

@@ -38,4 +38,8 @@ public interface WelcomeStudentService extends IService<WelcomeStudent> {
     List<WelcomeStudent> queryStudentByCardId(List<String> cardIds);
     List<WelcomeStudent> queryStudentByCardId(List<String> cardIds);
 
 
     List<StudentPageVo> queryStudentList(Integer collegeId, Integer majorId, Integer classstrId, String trafficMethod, String name);
     List<StudentPageVo> queryStudentList(Integer collegeId, Integer majorId, Integer classstrId, String trafficMethod, String name);
+
+    WelcomeStudent queryStudentInfo(Integer collegeId, Integer majorId, Integer classstrId,String admissNum);
+
+    List<WelcomeStudent> getDataByAdmissNum(List<String> admissNum);
 }
 }

+ 39 - 3
src/main/java/com/template/services/impl/WelcomeBedServiceImpl.java

@@ -13,6 +13,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  *  服务实现类
  *  服务实现类
@@ -40,23 +42,57 @@ public class WelcomeBedServiceImpl extends ServiceImpl<WelcomeBedMapper, Welcome
     }
     }
 
 
     @Override
     @Override
-    public PageUtils<WelcomeBed> queryPageWelcomeBeds(int currentPage, int pageCount, String parentCode, String keyword) {
+    public PageUtils<WelcomeBed> queryPageWelcomeBeds(int currentPage, int pageCount, String school, Integer buildId, Integer dormitoryId, String sex, Integer isCheck, Integer collegeId, Integer majorId, Integer classstrId) {
         Page<WelcomeBed> page = new Page<>(currentPage, pageCount);
         Page<WelcomeBed> page = new Page<>(currentPage, pageCount);
         QueryWrapper<WelcomeBed> queryWrapper = new QueryWrapper<>();
         QueryWrapper<WelcomeBed> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("school",school);
+        queryWrapper.eq("build_id",buildId);
+        queryWrapper.eq("dormitory_id",dormitoryId);
+        queryWrapper.eq("sex",sex);
+        queryWrapper.eq("is_check",isCheck);
+        queryWrapper.eq("college_id",collegeId);
+        queryWrapper.eq("major_id",majorId);
+        queryWrapper.eq("classstr_id",classstrId);
         queryWrapper.orderByDesc("update_time");
         queryWrapper.orderByDesc("update_time");
         IPage<WelcomeBed> result = welcomeBedMapper.selectPage(page,queryWrapper);
         IPage<WelcomeBed> result = welcomeBedMapper.selectPage(page,queryWrapper);
         return new PageUtils<>(result);
         return new PageUtils<>(result);
     }
     }
 
 
     @Override
     @Override
-    public int deleteWelcomeBedById(String id) {
+    public int deleteWelcomeBedById(int id) {
         int result = welcomeBedMapper.deleteById(id);
         int result = welcomeBedMapper.deleteById(id);
         return result;
         return result;
     }
     }
 
 
     @Override
     @Override
-    public WelcomeBed getManageById(String id) {
+    public WelcomeBed getBedById(int id) {
         WelcomeBed result = welcomeBedMapper.selectById(id);
         WelcomeBed result = welcomeBedMapper.selectById(id);
         return result;
         return result;
     }
     }
+
+    @Override
+    public WelcomeBed queryBedData(String school, Integer buildId, Integer dormitoryId, Integer number) {
+        QueryWrapper<WelcomeBed> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("school",school);
+        queryWrapper.eq("build_id",buildId);
+        queryWrapper.eq("dormitory_id",dormitoryId);
+        queryWrapper.eq("number",number);
+        List<WelcomeBed> result = welcomeBedMapper.selectList(queryWrapper);
+        return result != null && result.size() > 0 ? result.get(0) : null;
+    }
+
+    @Override
+    public List<WelcomeBed> queryPageWelcomeBeds(String school, Integer buildId, Integer dormitoryId, String sex, Integer isCheck, Integer collegeId, Integer majorId, Integer classstrId) {
+        QueryWrapper<WelcomeBed> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("school",school);
+        queryWrapper.eq("build_id",buildId);
+        queryWrapper.eq("dormitory_id",dormitoryId);
+        queryWrapper.eq("sex",sex);
+        queryWrapper.eq("is_check",isCheck);
+        queryWrapper.eq("college_id",collegeId);
+        queryWrapper.eq("major_id",majorId);
+        queryWrapper.eq("classstr_id",classstrId);
+        List<WelcomeBed> result = welcomeBedMapper.selectList(queryWrapper);
+        return result;
+    }
 }
 }

+ 10 - 0
src/main/java/com/template/services/impl/WelcomeBuildServiceImpl.java

@@ -86,4 +86,14 @@ public class WelcomeBuildServiceImpl extends ServiceImpl<WelcomeBuildMapper, Wel
         IPage<WelcomeBuild> result = welcomeBuildMapper.selectPage(page,queryWrapper);
         IPage<WelcomeBuild> result = welcomeBuildMapper.selectPage(page,queryWrapper);
         return new PageUtils<>(result);
         return new PageUtils<>(result);
     }
     }
+
+    @Override
+    public List<WelcomeBuild> listBuild(String schoolName, String buildName, String sex) {
+        LambdaQueryWrapper<WelcomeBuild> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ObjectUtils.isNotEmpty(schoolName),WelcomeBuild::getSchool,schoolName)
+                .eq(ObjectUtils.isNotEmpty(buildName),WelcomeBuild::getBuild,buildName)
+                .eq(ObjectUtils.isNotEmpty(sex),WelcomeBuild::getSex,sex);
+        List<WelcomeBuild> result = welcomeBuildMapper.selectList(queryWrapper);
+        return result;
+    }
 }
 }

+ 16 - 0
src/main/java/com/template/services/impl/WelcomeDormitoryServiceImpl.java

@@ -91,4 +91,20 @@ public class WelcomeDormitoryServiceImpl extends ServiceImpl<WelcomeDormitoryMap
         IPage<WelcomeDormitory> result = welcomeDormitoryMapper.selectPage(page,queryWrapper);
         IPage<WelcomeDormitory> result = welcomeDormitoryMapper.selectPage(page,queryWrapper);
         return new PageUtils<>(result);
         return new PageUtils<>(result);
     }
     }
+
+    @Override
+    public List<WelcomeDormitory> listDormitory(String schoolName, String buildName, String dormitory, String sex, Integer status, String major, String college) {
+
+        LambdaQueryWrapper<WelcomeDormitory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ObjectUtils.isNotEmpty(schoolName),WelcomeDormitory::getSchool,schoolName)
+                .eq(ObjectUtils.isNotEmpty(buildName),WelcomeDormitory::getBuild,buildName)
+                .eq(ObjectUtils.isNotEmpty(dormitory),WelcomeDormitory::getDormitory,dormitory)
+                .eq(ObjectUtils.isNotEmpty(sex),WelcomeDormitory::getSex,sex)
+                .eq(ObjectUtils.isNotEmpty(status),WelcomeDormitory::getStatus,status)
+                .eq(ObjectUtils.isNotEmpty(major),WelcomeDormitory::getMajor,major)
+                .eq(ObjectUtils.isNotEmpty(college),WelcomeDormitory::getCollege,college);
+
+        List<WelcomeDormitory> result = welcomeDormitoryMapper.selectList(queryWrapper);
+        return result;
+    }
 }
 }

+ 19 - 0
src/main/java/com/template/services/impl/WelcomeStudentServiceImpl.java

@@ -91,6 +91,25 @@ public class WelcomeStudentServiceImpl extends ServiceImpl<WelcomeStudentMapper,
     }
     }
 
 
     @Override
     @Override
+    public WelcomeStudent queryStudentInfo(Integer collegeId, Integer majorId, Integer classstrId, String admissNum) {
+        QueryWrapper<WelcomeStudent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("college_id", collegeId);//学院ID
+        queryWrapper.eq("major_id", majorId);//专业ID
+        queryWrapper.eq("classstr_id", classstrId);//班级ID
+        queryWrapper.eq("admiss_num", admissNum);//录取号
+        WelcomeStudent ws = welcomeStudentMapper.selectOne(queryWrapper);
+        return ws;
+    }
+
+    @Override
+    public List<WelcomeStudent> getDataByAdmissNum(List<String> admissNum) {
+        QueryWrapper<WelcomeStudent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.in("admiss_num", admissNum);//录取号
+        List<WelcomeStudent> result = welcomeStudentMapper.selectList(queryWrapper);
+        return result;
+    }
+
+    @Override
     public WelcomeStudent getDataByIdcardOrNum(String admissNum, String cardId) {
     public WelcomeStudent getDataByIdcardOrNum(String admissNum, String cardId) {
         QueryWrapper<WelcomeStudent> queryWrapper = new QueryWrapper<>();
         QueryWrapper<WelcomeStudent> queryWrapper = new QueryWrapper<>();
         queryWrapper.and(e -> e.eq(StringUtils.hasText(admissNum), "admiss_num", admissNum)
         queryWrapper.and(e -> e.eq(StringUtils.hasText(admissNum), "admiss_num", admissNum)