From 13c4fa002c10de213a00a45d56a8535bc805393c Mon Sep 17 00:00:00 2001
From: 唐耀东 <18861537@qq.com>
Date: 星期二, 10 五月 2022 17:50:40 +0800
Subject: [PATCH] 提交代码

---
 ruoyi-oa/src/main/resources/mapper/oa/SgConstructionBatchMapper.xml                      |   23 
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsBuildingVo.java                          |   80 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SgConstructionBatchMapper.java                |   14 
 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SgReserveIpMapper.java                        |   14 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java            |   18 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsBuildingService.java                      |   51 +
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsBuilding.java                               |   61 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsBuildingMapper.java                         |   14 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsBuildingServiceImpl.java              |  120 ++++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SgReserveIpBo.java                         |   92 +++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SgReserveIp.java                              |   59 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SgConstructionBatch.java                      |   63 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SgConstructionBatchBo.java                 |  100 +++
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SgConstructionBatchServiceImpl.java     |  103 +++
 ruoyi-oa/src/main/resources/mapper/oa/SgReserveIpMapper.xml                              |   22 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsBuildingController.java          |  116 ++++
 ruoyi-oa/src/main/resources/mapper/oa/BsBuildingMapper.xml                               |   23 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISgReserveIpService.java                     |   56 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SgReserveIpController.java         |  118 ++++
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISgConstructionBatchService.java             |   56 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BsBuildingBo.java                          |   92 +++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SgConstructionBatchController.java |  118 ++++
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SgReserveIpServiceImpl.java             |   89 +++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SgConstructionBatchVo.java                 |   76 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SgReserveIpVo.java                         |   74 ++
 ruoyi-admin/src/main/resources/application-dev.yml                                       |    4 
 26 files changed, 1,647 insertions(+), 9 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsBuildingController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsBuildingController.java
new file mode 100644
index 0000000..d4f63bf
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsBuildingController.java
@@ -0,0 +1,116 @@
+package com.ruoyi.web.controller.oa;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.oa.domain.vo.BsBuildingVo;
+import com.ruoyi.oa.domain.bo.BsBuildingBo;
+import com.ruoyi.oa.service.IBsBuildingService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 寤虹瓚鍗曞厓Controller
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+@Validated
+@Api(value = "寤虹瓚鍗曞厓鎺у埗鍣�", tags = {"寤虹瓚鍗曞厓绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/building")
+public class BsBuildingController extends BaseController {
+
+    private final IBsBuildingService iBsBuildingService;
+
+    /**
+     * 鏌ヨ寤虹瓚鍗曞厓鍒楄〃
+     */
+    @ApiOperation("鏌ヨ寤虹瓚鍗曞厓鍒楄〃")
+//    @PreAuthorize("@ss.hasPermi('oa:building:list')")
+    @GetMapping("/list")
+    public AjaxResult<List<BsBuildingVo>> list(@Validated(QueryGroup.class) BsBuildingBo bo) {
+        List<BsBuildingVo> list = iBsBuildingService.queryList(bo);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 瀵煎嚭寤虹瓚鍗曞厓鍒楄〃
+     */
+    @ApiOperation("瀵煎嚭寤虹瓚鍗曞厓鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:building:export')")
+    @Log(title = "寤虹瓚鍗曞厓", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public void export(@Validated BsBuildingBo bo, HttpServletResponse response) {
+        List<BsBuildingVo> list = iBsBuildingService.queryList(bo);
+        ExcelUtil.exportExcel(list, "寤虹瓚鍗曞厓", BsBuildingVo.class, response);
+    }
+
+    /**
+     * 鑾峰彇寤虹瓚鍗曞厓璇︾粏淇℃伅
+     */
+    @ApiOperation("鑾峰彇寤虹瓚鍗曞厓璇︾粏淇℃伅")
+    @PreAuthorize("@ss.hasPermi('oa:building:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<BsBuildingVo> getInfo(@ApiParam("涓婚敭")
+                                                  @NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                                  @PathVariable("id") Long id) {
+        return AjaxResult.success(iBsBuildingService.queryById(id));
+    }
+
+    /**
+     * 鏂板寤虹瓚鍗曞厓
+     */
+    @ApiOperation("鏂板寤虹瓚鍗曞厓")
+    @PreAuthorize("@ss.hasPermi('oa:building:add')")
+    @Log(title = "寤虹瓚鍗曞厓", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody BsBuildingBo bo) {
+        return toAjax(iBsBuildingService.insertByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 淇敼寤虹瓚鍗曞厓
+     */
+    @ApiOperation("淇敼寤虹瓚鍗曞厓")
+    @PreAuthorize("@ss.hasPermi('oa:building:edit')")
+    @Log(title = "寤虹瓚鍗曞厓", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody BsBuildingBo bo) {
+        return toAjax(iBsBuildingService.updateByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 鍒犻櫎寤虹瓚鍗曞厓
+     */
+    @ApiOperation("鍒犻櫎寤虹瓚鍗曞厓")
+    @PreAuthorize("@ss.hasPermi('oa:building:remove')")
+    @Log(title = "寤虹瓚鍗曞厓" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@ApiParam("涓婚敭涓�")
+                                       @NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                                       @PathVariable Long[] ids) {
+        return toAjax(iBsBuildingService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java
index 385e851..5adb403 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.web.controller.oa;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.annotation.DataDictClass;
 import com.ruoyi.common.annotation.Log;
@@ -11,7 +12,9 @@
 import com.ruoyi.common.core.validate.EditGroup;
 import com.ruoyi.common.core.validate.QueryGroup;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.oa.domain.BsSchool;
 import com.ruoyi.oa.domain.bo.BsSchoolBo;
 import com.ruoyi.oa.domain.vo.BsSchoolVo;
 import com.ruoyi.oa.service.IBsSchoolService;
@@ -61,8 +64,9 @@
      */
     @ApiOperation("瀛︽牎涓嬫媺鍒楄〃")
     @GetMapping("/select")
-    public AjaxResult selectList() {
-        return AjaxResult.success(iBsSchoolService.list(new QueryWrapper<>()));
+    public AjaxResult selectList(BsSchoolBo bo) {
+        return AjaxResult.success(iBsSchoolService.list(new LambdaQueryWrapper<BsSchool>()
+            .like(StringUtils.isNotBlank(bo.getName()), BsSchool::getName, bo.getName())));
     }
 
     /**
@@ -84,8 +88,8 @@
     @PreAuthorize("@ss.hasPermi('oa:school:query')")
     @GetMapping("/{id}")
     public AjaxResult<BsSchoolVo> getInfo(@ApiParam("涓婚敭")
-                                                  @NotNull(message = "涓婚敭涓嶈兘涓虹┖")
-                                                  @PathVariable("id") Long id) {
+                                          @NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                          @PathVariable("id") Long id) {
         return AjaxResult.success(iBsSchoolService.queryById(id));
     }
 
@@ -118,11 +122,11 @@
      */
     @ApiOperation("鍒犻櫎瀛︽牎")
     @PreAuthorize("@ss.hasPermi('oa:school:remove')")
-    @Log(title = "瀛︽牎" , businessType = BusinessType.DELETE)
+    @Log(title = "瀛︽牎", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public AjaxResult<Void> remove(@ApiParam("涓婚敭涓�")
-                                       @NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
-                                       @PathVariable Long[] ids) {
+                                   @NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                                   @PathVariable Long[] ids) {
         return toAjax(iBsSchoolService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
     }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SgConstructionBatchController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SgConstructionBatchController.java
new file mode 100644
index 0000000..41fb561
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SgConstructionBatchController.java
@@ -0,0 +1,118 @@
+package com.ruoyi.web.controller.oa;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+
+import com.ruoyi.common.annotation.DataDictClass;
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.oa.domain.vo.SgConstructionBatchVo;
+import com.ruoyi.oa.domain.bo.SgConstructionBatchBo;
+import com.ruoyi.oa.service.ISgConstructionBatchService;
+import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 鏂藉伐鎵规Controller
+ *
+ * @author ruoyi
+ * @date 2022-05-09
+ */
+@Validated
+@Api(value = "鏂藉伐鎵规鎺у埗鍣�", tags = {"鏂藉伐鎵规绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/constructionBatch")
+public class SgConstructionBatchController extends BaseController {
+
+    private final ISgConstructionBatchService iSgConstructionBatchService;
+
+    /**
+     * 鏌ヨ鏂藉伐鎵规鍒楄〃
+     */
+    @DataDictClass
+    @ApiOperation("鏌ヨ鏂藉伐鎵规鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:constructionBatch:list')")
+    @GetMapping("/list")
+    public TableDataInfo<SgConstructionBatchVo> list(@Validated(QueryGroup.class) SgConstructionBatchBo bo) {
+        return iSgConstructionBatchService.queryPageList(bo);
+    }
+
+    /**
+     * 瀵煎嚭鏂藉伐鎵规鍒楄〃
+     */
+    @ApiOperation("瀵煎嚭鏂藉伐鎵规鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:constructionBatch:export')")
+    @Log(title = "鏂藉伐鎵规", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public void export(@Validated SgConstructionBatchBo bo, HttpServletResponse response) {
+        List<SgConstructionBatchVo> list = iSgConstructionBatchService.queryList(bo);
+        ExcelUtil.exportExcel(list, "鏂藉伐鎵规", SgConstructionBatchVo.class, response);
+    }
+
+    /**
+     * 鑾峰彇鏂藉伐鎵规璇︾粏淇℃伅
+     */
+    @ApiOperation("鑾峰彇鏂藉伐鎵规璇︾粏淇℃伅")
+    @PreAuthorize("@ss.hasPermi('oa:constructionBatch:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<SgConstructionBatchVo> getInfo(@ApiParam("涓婚敭")
+                                                  @NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                                  @PathVariable("id") Long id) {
+        return AjaxResult.success(iSgConstructionBatchService.queryById(id));
+    }
+
+    /**
+     * 鏂板鏂藉伐鎵规
+     */
+    @ApiOperation("鏂板鏂藉伐鎵规")
+    @PreAuthorize("@ss.hasPermi('oa:constructionBatch:add')")
+    @Log(title = "鏂藉伐鎵规", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody SgConstructionBatchBo bo) {
+        return toAjax(iSgConstructionBatchService.insertByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 淇敼鏂藉伐鎵规
+     */
+    @ApiOperation("淇敼鏂藉伐鎵规")
+    @PreAuthorize("@ss.hasPermi('oa:constructionBatch:edit')")
+    @Log(title = "鏂藉伐鎵规", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody SgConstructionBatchBo bo) {
+        return toAjax(iSgConstructionBatchService.updateByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 鍒犻櫎鏂藉伐鎵规
+     */
+    @ApiOperation("鍒犻櫎鏂藉伐鎵规")
+    @PreAuthorize("@ss.hasPermi('oa:constructionBatch:remove')")
+    @Log(title = "鏂藉伐鎵规" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@ApiParam("涓婚敭涓�")
+                                       @NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                                       @PathVariable Long[] ids) {
+        return toAjax(iSgConstructionBatchService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SgReserveIpController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SgReserveIpController.java
new file mode 100644
index 0000000..43c0077
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SgReserveIpController.java
@@ -0,0 +1,118 @@
+package com.ruoyi.web.controller.oa;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+
+import com.ruoyi.common.annotation.DataDictClass;
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.oa.domain.vo.SgReserveIpVo;
+import com.ruoyi.oa.domain.bo.SgReserveIpBo;
+import com.ruoyi.oa.service.ISgReserveIpService;
+import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 棰勭暀IPController
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+@Validated
+@Api(value = "棰勭暀IP鎺у埗鍣�", tags = {"棰勭暀IP绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/reserveIp")
+public class SgReserveIpController extends BaseController {
+
+    private final ISgReserveIpService iSgReserveIpService;
+
+    /**
+     * 鏌ヨ棰勭暀IP鍒楄〃
+     */
+    @DataDictClass
+    @ApiOperation("鏌ヨ棰勭暀IP鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:reserveIp:list')")
+    @GetMapping("/list")
+    public TableDataInfo<SgReserveIpVo> list(@Validated(QueryGroup.class) SgReserveIpBo bo) {
+        return iSgReserveIpService.queryPageList(bo);
+    }
+
+    /**
+     * 瀵煎嚭棰勭暀IP鍒楄〃
+     */
+    @ApiOperation("瀵煎嚭棰勭暀IP鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:reserveIp:export')")
+    @Log(title = "棰勭暀IP", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public void export(@Validated SgReserveIpBo bo, HttpServletResponse response) {
+        List<SgReserveIpVo> list = iSgReserveIpService.queryList(bo);
+        ExcelUtil.exportExcel(list, "棰勭暀IP", SgReserveIpVo.class, response);
+    }
+
+    /**
+     * 鑾峰彇棰勭暀IP璇︾粏淇℃伅
+     */
+    @ApiOperation("鑾峰彇棰勭暀IP璇︾粏淇℃伅")
+    @PreAuthorize("@ss.hasPermi('oa:reserveIp:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<SgReserveIpVo> getInfo(@ApiParam("涓婚敭")
+                                                  @NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                                  @PathVariable("id") Long id) {
+        return AjaxResult.success(iSgReserveIpService.queryById(id));
+    }
+
+    /**
+     * 鏂板棰勭暀IP
+     */
+    @ApiOperation("鏂板棰勭暀IP")
+    @PreAuthorize("@ss.hasPermi('oa:reserveIp:add')")
+    @Log(title = "棰勭暀IP", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody SgReserveIpBo bo) {
+        return toAjax(iSgReserveIpService.insertByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 淇敼棰勭暀IP
+     */
+    @ApiOperation("淇敼棰勭暀IP")
+    @PreAuthorize("@ss.hasPermi('oa:reserveIp:edit')")
+    @Log(title = "棰勭暀IP", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody SgReserveIpBo bo) {
+        return toAjax(iSgReserveIpService.updateByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 鍒犻櫎棰勭暀IP
+     */
+    @ApiOperation("鍒犻櫎棰勭暀IP")
+    @PreAuthorize("@ss.hasPermi('oa:reserveIp:remove')")
+    @Log(title = "棰勭暀IP" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@ApiParam("涓婚敭涓�")
+                                       @NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                                       @PathVariable Long[] ids) {
+        return toAjax(iSgReserveIpService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+}
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index 89dc978..64fcca0 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -5,7 +5,7 @@
       # Spring Boot Admin Client 瀹㈡埛绔殑鐩稿叧閰嶇疆
       client:
         # 澧炲姞瀹㈡埛绔紑鍏�
-        enabled: true
+        enabled: false
         # 璁剧疆 Spring Boot Admin Server 鍦板潃
         url: http://localhost:9090/admin
         instance:
@@ -17,7 +17,7 @@
 xxl:
   job:
     # 鎵ц鍣ㄥ紑鍏�
-    enabled: true
+    enabled: false
     # 璋冨害涓績鍦板潃锛氬璋冨害涓績闆嗙兢閮ㄧ讲瀛樺湪澶氫釜鍦板潃鍒欑敤閫楀彿鍒嗛殧銆�
     admin-addresses: http://localhost:9100/xxl-job-admin
     # 鎵ц鍣ㄩ�氳TOKEN锛氶潪绌烘椂鍚敤
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsBuilding.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsBuilding.java
new file mode 100644
index 0000000..3e57f00
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsBuilding.java
@@ -0,0 +1,61 @@
+package com.ruoyi.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import com.ruoyi.common.core.domain.TreeEntity;
+
+/**
+ * 寤虹瓚鍗曞厓瀵硅薄 bs_building
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+@Data
+@Accessors(chain = true)
+@TableName("bs_building")
+public class BsBuilding extends TreeEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     *
+     */
+    @TableId(value = "id")
+    private Long id;
+    /**
+     * 鍗曞厓缂栧彿
+     */
+    private String code;
+    /**
+     * 鍗曞厓鍚嶇О
+     */
+    private String name;
+    /**
+     * 璇︾粏鍚嶇О
+     */
+    private String detailedName;
+    /**
+     * 楂樻牎
+     */
+    private Long schoolId;
+    /**
+     * 绁栫骇鍒楄〃
+     */
+    private String ancestors;
+    /**
+     * 鏄剧ず椤哄簭
+     */
+    private Integer orderNum;
+    /**
+     *
+     */
+    @TableLogic
+    private String delFlag;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SgConstructionBatch.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SgConstructionBatch.java
new file mode 100644
index 0000000..0fa5274
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SgConstructionBatch.java
@@ -0,0 +1,63 @@
+package com.ruoyi.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 鏂藉伐鎵规瀵硅薄 sg_construction_batch
+ *
+ * @author ruoyi
+ * @date 2022-05-09
+ */
+@Data
+@Accessors(chain = true)
+@TableName("sg_construction_batch")
+public class SgConstructionBatch extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 
+     */
+    @TableId(value = "id")
+    private Long id;
+    /**
+     * 鏂藉伐鎵规
+     */
+    private String batch;
+    /**
+     * 寮�濮嬫棩鏈�
+     */
+    private Date startDate;
+    /**
+     * 缁撴潫鏃ユ湡
+     */
+    private Date endDate;
+    /**
+     * 璐熻矗浜�
+     */
+    private Long userId;
+    /**
+     * 鍥㈤槦鎴愬憳
+     */
+    private String teamMembers;
+    /**
+     * 澶囨敞
+     */
+    private String remarks;
+    /**
+     * 
+     */
+    @TableLogic
+    private String delFlag;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SgReserveIp.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SgReserveIp.java
new file mode 100644
index 0000000..60e2786
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SgReserveIp.java
@@ -0,0 +1,59 @@
+package com.ruoyi.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 棰勭暀IP瀵硅薄 sg_reserve_ip
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+@Data
+@Accessors(chain = true)
+@TableName("sg_reserve_ip")
+public class SgReserveIp extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 
+     */
+    @TableId(value = "id")
+    private Long id;
+    /**
+     * ip鍦板潃
+     */
+    private String ip;
+    /**
+     * MAC鍦板潃
+     */
+    private String mac;
+    /**
+     * 寤虹瓚鍗曞厓
+     */
+    private Long buildingId;
+    /**
+     * 鐢宠鏃ユ湡
+     */
+    private Date applicationDate;
+    /**
+     * 澶囨敞
+     */
+    private String remarks;
+    /**
+     * 
+     */
+    @TableLogic
+    private String delFlag;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BsBuildingBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BsBuildingBo.java
new file mode 100644
index 0000000..a690aac
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BsBuildingBo.java
@@ -0,0 +1,92 @@
+package com.ruoyi.oa.domain.bo;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+
+import com.ruoyi.common.core.domain.TreeEntity;
+
+/**
+ * 寤虹瓚鍗曞厓涓氬姟瀵硅薄 bs_building
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("寤虹瓚鍗曞厓涓氬姟瀵硅薄")
+public class BsBuildingBo extends TreeEntity {
+
+    /**
+     * 
+     */
+    @ApiModelProperty(value = "", required = true)
+    @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     * 鍗曞厓缂栧彿
+     */
+    @ApiModelProperty(value = "鍗曞厓缂栧彿", required = true)
+    @NotBlank(message = "鍗曞厓缂栧彿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String code;
+
+    /**
+     * 鍗曞厓鍚嶇О
+     */
+    @ApiModelProperty(value = "鍗曞厓鍚嶇О", required = true)
+    @NotBlank(message = "鍗曞厓鍚嶇О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String name;
+
+    /**
+     * 楂樻牎
+     */
+    @ApiModelProperty(value = "楂樻牎", required = true)
+    @NotNull(message = "楂樻牎涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private Long schoolId;
+
+    /**
+     * 绁栫骇鍒楄〃
+     */
+    @ApiModelProperty(value = "绁栫骇鍒楄〃")
+    private String ancestors;
+
+    /**
+     * 鏄剧ず椤哄簭
+     */
+    @ApiModelProperty(value = "鏄剧ず椤哄簭")
+    private Integer orderNum;
+
+
+    /**
+     * 鍒嗛〉澶у皬
+     */
+    @ApiModelProperty("鍒嗛〉澶у皬")
+    private Integer pageSize;
+
+    /**
+     * 褰撳墠椤垫暟
+     */
+    @ApiModelProperty("褰撳墠椤垫暟")
+    private Integer pageNum;
+
+    /**
+     * 鎺掑簭鍒�
+     */
+    @ApiModelProperty("鎺掑簭鍒�")
+    private String orderByColumn;
+
+    /**
+     * 鎺掑簭鐨勬柟鍚慸esc鎴栬�卆sc
+     */
+    @ApiModelProperty(value = "鎺掑簭鐨勬柟鍚�", example = "asc,desc")
+    private String isAsc;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SgConstructionBatchBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SgConstructionBatchBo.java
new file mode 100644
index 0000000..14aae83
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SgConstructionBatchBo.java
@@ -0,0 +1,100 @@
+package com.ruoyi.oa.domain.bo;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 鏂藉伐鎵规涓氬姟瀵硅薄 sg_construction_batch
+ *
+ * @author ruoyi
+ * @date 2022-05-09
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("鏂藉伐鎵规涓氬姟瀵硅薄")
+public class SgConstructionBatchBo extends BaseEntity {
+
+    /**
+     *
+     */
+    @ApiModelProperty(value = "", required = true)
+    @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     * 鏂藉伐鎵规
+     */
+    @ApiModelProperty(value = "鏂藉伐鎵规", required = true)
+    @NotBlank(message = "鏂藉伐鎵规涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String batch;
+
+    /**
+     * 寮�濮嬫棩鏈�
+     */
+    @ApiModelProperty(value = "寮�濮嬫棩鏈�")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
+    private Date startDate;
+
+    /**
+     * 缁撴潫鏃ユ湡
+     */
+    @ApiModelProperty(value = "缁撴潫鏃ユ湡")
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
+    private Date endDate;
+
+    /**
+     * 璐熻矗浜�
+     */
+    @ApiModelProperty(value = "璐熻矗浜�")
+    private Long userId;
+
+    /**
+     * 鍥㈤槦鎴愬憳
+     */
+    @ApiModelProperty(value = "鍥㈤槦鎴愬憳")
+    private String teamMembers;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remarks;
+
+
+    /**
+     * 鍒嗛〉澶у皬
+     */
+    @ApiModelProperty("鍒嗛〉澶у皬")
+    private Integer pageSize;
+
+    /**
+     * 褰撳墠椤垫暟
+     */
+    @ApiModelProperty("褰撳墠椤垫暟")
+    private Integer pageNum;
+
+    /**
+     * 鎺掑簭鍒�
+     */
+    @ApiModelProperty("鎺掑簭鍒�")
+    private String orderByColumn;
+
+    /**
+     * 鎺掑簭鐨勬柟鍚慸esc鎴栬�卆sc
+     */
+    @ApiModelProperty(value = "鎺掑簭鐨勬柟鍚�", example = "asc,desc")
+    private String isAsc;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SgReserveIpBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SgReserveIpBo.java
new file mode 100644
index 0000000..14275fe
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SgReserveIpBo.java
@@ -0,0 +1,92 @@
+package com.ruoyi.oa.domain.bo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 棰勭暀IP涓氬姟瀵硅薄 sg_reserve_ip
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("棰勭暀IP涓氬姟瀵硅薄")
+public class SgReserveIpBo extends BaseEntity {
+
+    /**
+     *
+     */
+    @ApiModelProperty(value = "", required = true)
+    @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     * ip鍦板潃
+     */
+    @ApiModelProperty(value = "ip鍦板潃", required = true)
+    @NotBlank(message = "ip鍦板潃涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String ip;
+
+    /**
+     * MAC鍦板潃
+     */
+    @ApiModelProperty(value = "MAC鍦板潃", required = true)
+    @NotBlank(message = "MAC鍦板潃涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String mac;
+
+    /**
+     * 寤虹瓚鍗曞厓
+     */
+    @ApiModelProperty(value = "寤虹瓚鍗曞厓", required = true)
+    private Long buildingId;
+
+    /**
+     * 鐢宠鏃ユ湡
+     */
+    @ApiModelProperty(value = "鐢宠鏃ユ湡")
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
+    private Date applicationDate;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remarks;
+
+
+    /**
+     * 鍒嗛〉澶у皬
+     */
+    @ApiModelProperty("鍒嗛〉澶у皬")
+    private Integer pageSize;
+
+    /**
+     * 褰撳墠椤垫暟
+     */
+    @ApiModelProperty("褰撳墠椤垫暟")
+    private Integer pageNum;
+
+    /**
+     * 鎺掑簭鍒�
+     */
+    @ApiModelProperty("鎺掑簭鍒�")
+    private String orderByColumn;
+
+    /**
+     * 鎺掑簭鐨勬柟鍚慸esc鎴栬�卆sc
+     */
+    @ApiModelProperty(value = "鎺掑簭鐨勬柟鍚�", example = "asc,desc")
+    private String isAsc;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsBuildingVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsBuildingVo.java
new file mode 100644
index 0000000..01e26ac
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsBuildingVo.java
@@ -0,0 +1,80 @@
+package com.ruoyi.oa.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 寤虹瓚鍗曞厓瑙嗗浘瀵硅薄 bs_building
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+@Data
+@ApiModel("寤虹瓚鍗曞厓瑙嗗浘瀵硅薄")
+@ExcelIgnoreUnannotated
+public class BsBuildingVo {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+	@ExcelProperty(value = "")
+	@ApiModelProperty("")
+	private Long id;
+
+    /**
+     * 鍗曞厓缂栧彿
+     */
+	@ExcelProperty(value = "鍗曞厓缂栧彿")
+	@ApiModelProperty("鍗曞厓缂栧彿")
+	private String code;
+
+    /**
+     * 鍗曞厓鍚嶇О
+     */
+	@ExcelProperty(value = "鍗曞厓鍚嶇О")
+	@ApiModelProperty("鍗曞厓鍚嶇О")
+	private String name;
+    /**
+     * 璇︾粏鍚嶇О
+     */
+    private String detailedName;
+    /**
+     * 楂樻牎
+     */
+	@ExcelProperty(value = "楂樻牎")
+	@ApiModelProperty("楂樻牎")
+	private Long schoolId;
+
+    /**
+     * 鐖剁骇id
+     */
+	@ExcelProperty(value = "鐖剁骇id")
+	@ApiModelProperty("鐖剁骇id")
+	private Long parentId;
+
+    /**
+     * 绁栫骇鍒楄〃
+     */
+	@ExcelProperty(value = "绁栫骇鍒楄〃")
+	@ApiModelProperty("绁栫骇鍒楄〃")
+	private String ancestors;
+
+    /**
+     * 鏄剧ず椤哄簭
+     */
+	@ExcelProperty(value = "鏄剧ず椤哄簭")
+	@ApiModelProperty("鏄剧ず椤哄簭")
+	private Integer orderNum;
+
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SgConstructionBatchVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SgConstructionBatchVo.java
new file mode 100644
index 0000000..274dec3
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SgConstructionBatchVo.java
@@ -0,0 +1,76 @@
+package com.ruoyi.oa.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.Dict;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 鏂藉伐鎵规瑙嗗浘瀵硅薄 sg_construction_batch
+ *
+ * @author ruoyi
+ * @date 2022-05-09
+ */
+@Data
+@ApiModel("鏂藉伐鎵规瑙嗗浘瀵硅薄")
+@ExcelIgnoreUnannotated
+public class SgConstructionBatchVo {
+
+	private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    /**
+     * 鏂藉伐鎵规
+     */
+	@ExcelProperty(value = "鏂藉伐鎵规")
+	@ApiModelProperty("鏂藉伐鎵规")
+	private String batch;
+
+    /**
+     * 寮�濮嬫棩鏈�
+     */
+	@ExcelProperty(value = "寮�濮嬫棩鏈�")
+	@ApiModelProperty("寮�濮嬫棩鏈�")
+	private Date startDate;
+
+    /**
+     * 缁撴潫鏃ユ湡
+     */
+	@ExcelProperty(value = "缁撴潫鏃ユ湡")
+	@ApiModelProperty("缁撴潫鏃ユ湡")
+	private Date endDate;
+
+    /**
+     * 璐熻矗浜�
+     */
+	@ExcelProperty(value = "璐熻矗浜�")
+	@ApiModelProperty("璐熻矗浜�")
+    @Dict(dictTable = "sys_user", dicCode = "user_id", dicText = "nick_name")
+	private Long userId;
+
+    /**
+     * 鍥㈤槦鎴愬憳
+     */
+	@ExcelProperty(value = "鍥㈤槦鎴愬憳")
+	@ApiModelProperty("鍥㈤槦鎴愬憳")
+	private String teamMembers;
+
+    /**
+     * 澶囨敞
+     */
+	@ExcelProperty(value = "澶囨敞")
+	@ApiModelProperty("澶囨敞")
+	private String remarks;
+
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SgReserveIpVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SgReserveIpVo.java
new file mode 100644
index 0000000..38e2900
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SgReserveIpVo.java
@@ -0,0 +1,74 @@
+package com.ruoyi.oa.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.Dict;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 棰勭暀IP瑙嗗浘瀵硅薄 sg_reserve_ip
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+@Data
+@ApiModel("棰勭暀IP瑙嗗浘瀵硅薄")
+@ExcelIgnoreUnannotated
+public class SgReserveIpVo {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+	@ExcelProperty(value = "")
+	@ApiModelProperty("")
+	private Long id;
+
+    /**
+     * ip鍦板潃
+     */
+	@ExcelProperty(value = "ip鍦板潃")
+	@ApiModelProperty("ip鍦板潃")
+	private String ip;
+
+    /**
+     * MAC鍦板潃
+     */
+	@ExcelProperty(value = "MAC鍦板潃")
+	@ApiModelProperty("MAC鍦板潃")
+	private String mac;
+
+    /**
+     * 寤虹瓚鍗曞厓
+     */
+	@ExcelProperty(value = "寤虹瓚鍗曞厓")
+	@ApiModelProperty("寤虹瓚鍗曞厓")
+    @Dict(dictTable = "bs_building", dicCode = "id", dicText = "detailed_name")
+	private Long buildingId;
+
+    /**
+     * 鐢宠鏃ユ湡
+     */
+	@ExcelProperty(value = "鐢宠鏃ユ湡")
+	@ApiModelProperty("鐢宠鏃ユ湡")
+	private Date applicationDate;
+
+    /**
+     * 澶囨敞
+     */
+	@ExcelProperty(value = "澶囨敞")
+	@ApiModelProperty("澶囨敞")
+	private String remarks;
+
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsBuildingMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsBuildingMapper.java
new file mode 100644
index 0000000..07f50cc
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsBuildingMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.BsBuilding;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+
+/**
+ * 寤虹瓚鍗曞厓Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+public interface BsBuildingMapper extends BaseMapperPlus<BsBuilding> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SgConstructionBatchMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SgConstructionBatchMapper.java
new file mode 100644
index 0000000..f451c3f
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SgConstructionBatchMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.SgConstructionBatch;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+
+/**
+ * 鏂藉伐鎵规Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2022-05-09
+ */
+public interface SgConstructionBatchMapper extends BaseMapperPlus<SgConstructionBatch> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SgReserveIpMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SgReserveIpMapper.java
new file mode 100644
index 0000000..03bfbc8
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SgReserveIpMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.SgReserveIp;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+
+/**
+ * 棰勭暀IPMapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+public interface SgReserveIpMapper extends BaseMapperPlus<SgReserveIp> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsBuildingService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsBuildingService.java
new file mode 100644
index 0000000..d0bad62
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsBuildingService.java
@@ -0,0 +1,51 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.BsBuilding;
+import com.ruoyi.oa.domain.vo.BsBuildingVo;
+import com.ruoyi.oa.domain.bo.BsBuildingBo;
+import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 寤虹瓚鍗曞厓Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+public interface IBsBuildingService extends IServicePlus<BsBuilding, BsBuildingVo> {
+	/**
+	 * 鏌ヨ鍗曚釜
+	 * @return
+	 */
+	BsBuildingVo queryById(Long id);
+
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+	List<BsBuildingVo> queryList(BsBuildingBo bo);
+
+	/**
+	 * 鏍规嵁鏂板涓氬姟瀵硅薄鎻掑叆寤虹瓚鍗曞厓
+	 * @param bo 寤虹瓚鍗曞厓鏂板涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean insertByBo(BsBuildingBo bo);
+
+	/**
+	 * 鏍规嵁缂栬緫涓氬姟瀵硅薄淇敼寤虹瓚鍗曞厓
+	 * @param bo 寤虹瓚鍗曞厓缂栬緫涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean updateByBo(BsBuildingBo bo);
+
+	/**
+	 * 鏍¢獙骞跺垹闄ゆ暟鎹�
+	 * @param ids 涓婚敭闆嗗悎
+	 * @param isValid 鏄惁鏍¢獙,true-鍒犻櫎鍓嶆牎楠�,false-涓嶆牎楠�
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISgConstructionBatchService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISgConstructionBatchService.java
new file mode 100644
index 0000000..ef92c3f
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISgConstructionBatchService.java
@@ -0,0 +1,56 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.SgConstructionBatch;
+import com.ruoyi.oa.domain.vo.SgConstructionBatchVo;
+import com.ruoyi.oa.domain.bo.SgConstructionBatchBo;
+import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 鏂藉伐鎵规Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2022-05-09
+ */
+public interface ISgConstructionBatchService extends IServicePlus<SgConstructionBatch, SgConstructionBatchVo> {
+	/**
+	 * 鏌ヨ鍗曚釜
+	 * @return
+	 */
+	SgConstructionBatchVo queryById(Long id);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+    TableDataInfo<SgConstructionBatchVo> queryPageList(SgConstructionBatchBo bo);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+	List<SgConstructionBatchVo> queryList(SgConstructionBatchBo bo);
+
+	/**
+	 * 鏍规嵁鏂板涓氬姟瀵硅薄鎻掑叆鏂藉伐鎵规
+	 * @param bo 鏂藉伐鎵规鏂板涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean insertByBo(SgConstructionBatchBo bo);
+
+	/**
+	 * 鏍规嵁缂栬緫涓氬姟瀵硅薄淇敼鏂藉伐鎵规
+	 * @param bo 鏂藉伐鎵规缂栬緫涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean updateByBo(SgConstructionBatchBo bo);
+
+	/**
+	 * 鏍¢獙骞跺垹闄ゆ暟鎹�
+	 * @param ids 涓婚敭闆嗗悎
+	 * @param isValid 鏄惁鏍¢獙,true-鍒犻櫎鍓嶆牎楠�,false-涓嶆牎楠�
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISgReserveIpService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISgReserveIpService.java
new file mode 100644
index 0000000..c5f5831
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISgReserveIpService.java
@@ -0,0 +1,56 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.SgReserveIp;
+import com.ruoyi.oa.domain.vo.SgReserveIpVo;
+import com.ruoyi.oa.domain.bo.SgReserveIpBo;
+import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 棰勭暀IPService鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+public interface ISgReserveIpService extends IServicePlus<SgReserveIp, SgReserveIpVo> {
+	/**
+	 * 鏌ヨ鍗曚釜
+	 * @return
+	 */
+	SgReserveIpVo queryById(Long id);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+    TableDataInfo<SgReserveIpVo> queryPageList(SgReserveIpBo bo);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+	List<SgReserveIpVo> queryList(SgReserveIpBo bo);
+
+	/**
+	 * 鏍规嵁鏂板涓氬姟瀵硅薄鎻掑叆棰勭暀IP
+	 * @param bo 棰勭暀IP鏂板涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean insertByBo(SgReserveIpBo bo);
+
+	/**
+	 * 鏍规嵁缂栬緫涓氬姟瀵硅薄淇敼棰勭暀IP
+	 * @param bo 棰勭暀IP缂栬緫涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean updateByBo(SgReserveIpBo bo);
+
+	/**
+	 * 鏍¢獙骞跺垹闄ゆ暟鎹�
+	 * @param ids 涓婚敭闆嗗悎
+	 * @param isValid 鏄惁鏍¢獙,true-鍒犻櫎鍓嶆牎楠�,false-涓嶆牎楠�
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsBuildingServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsBuildingServiceImpl.java
new file mode 100644
index 0000000..8e65684
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsBuildingServiceImpl.java
@@ -0,0 +1,120 @@
+package com.ruoyi.oa.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.http.HttpStatus;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.oa.domain.BsSchool;
+import com.ruoyi.oa.domain.SgReserveIp;
+import com.ruoyi.oa.mapper.BsSchoolMapper;
+import com.ruoyi.oa.mapper.SgReserveIpMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.oa.domain.bo.BsBuildingBo;
+import com.ruoyi.oa.domain.vo.BsBuildingVo;
+import com.ruoyi.oa.domain.BsBuilding;
+import com.ruoyi.oa.mapper.BsBuildingMapper;
+import com.ruoyi.oa.service.IBsBuildingService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 寤虹瓚鍗曞厓Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+@Service
+public class BsBuildingServiceImpl extends ServicePlusImpl<BsBuildingMapper, BsBuilding, BsBuildingVo> implements IBsBuildingService {
+
+    @Autowired
+    private BsSchoolMapper schoolMapper;
+
+    @Autowired
+    private SgReserveIpMapper reserveIpMapper;
+
+    @Override
+    public BsBuildingVo queryById(Long id) {
+        return getVoById(id);
+    }
+
+
+    @Override
+    public List<BsBuildingVo> queryList(BsBuildingBo bo) {
+        return listVo(buildQueryWrapper(bo));
+    }
+
+    private LambdaQueryWrapper<BsBuilding> buildQueryWrapper(BsBuildingBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<BsBuilding> lqw = Wrappers.lambdaQuery();
+        lqw.like(StringUtils.isNotBlank(bo.getCode()), BsBuilding::getCode, bo.getCode());
+        lqw.like(StringUtils.isNotBlank(bo.getName()), BsBuilding::getName, bo.getName());
+        lqw.eq(BsBuilding::getSchoolId, bo.getSchoolId());
+        lqw.orderByAsc(BsBuilding::getOrderNum);
+        return lqw;
+    }
+
+    @Override
+    public Boolean insertByBo(BsBuildingBo bo) {
+        BsBuilding add = BeanUtil.toBean(bo, BsBuilding.class);
+        if (bo.getParentId() == Long.valueOf(0)) {
+            BsSchool school = schoolMapper.selectById(bo.getSchoolId());
+            add.setAncestors("0");
+            add.setDetailedName(school.getName() + "-" + bo.getName());
+        } else {
+            BsBuilding info = baseMapper.selectById(bo.getParentId());
+            add.setAncestors(info.getAncestors() + "," + bo.getParentId());
+            add.setDetailedName(info.getDetailedName() + "-" + bo.getName());
+        }
+        boolean flag = save(add);
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    @Override
+    public Boolean updateByBo(BsBuildingBo bo) {
+        BsBuilding update = BeanUtil.toBean(bo, BsBuilding.class);
+        if (bo.getParentId() == Long.valueOf(0)) {
+            BsSchool school = schoolMapper.selectById(bo.getSchoolId());
+            update.setAncestors("0");
+            update.setDetailedName(school.getName() + "-" + bo.getName());
+        } else {
+            BsBuilding info = baseMapper.selectById(bo.getParentId());
+            update.setAncestors(info.getAncestors() + "," + bo.getParentId());
+            update.setDetailedName(info.getDetailedName() + "-" + bo.getName());
+        }
+        validEntityBeforeSave(update);
+        return updateById(update);
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     *
+     * @param entity 瀹炰綋绫绘暟鎹�
+     */
+    private void validEntityBeforeSave(BsBuilding entity) {
+        //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        List<BsBuilding> list = baseMapper.selectList(new LambdaQueryWrapper<BsBuilding>()
+            .in(BsBuilding::getParentId, ids));
+        if (list.size() > 0) {
+            throw new ServiceException("瀛樺湪瀛愬缓绛戝崟鍏冿紝涓嶅厑璁稿垹闄�", HttpStatus.HTTP_PARTIAL);
+        }
+        List<SgReserveIp> ipList = reserveIpMapper.selectList(new LambdaQueryWrapper<SgReserveIp>()
+            .in(SgReserveIp::getBuildingId, ids));
+        if (ipList.size() > 0) {
+            throw new ServiceException("寤虹瓚鍗曞厓宸茶[棰勭暀IP妯″潡]浣跨敤锛屼笉鍏佽鍒犻櫎", HttpStatus.HTTP_PARTIAL);
+        }
+        return removeByIds(ids);
+    }
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SgConstructionBatchServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SgConstructionBatchServiceImpl.java
new file mode 100644
index 0000000..656fc9a
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SgConstructionBatchServiceImpl.java
@@ -0,0 +1,103 @@
+package com.ruoyi.oa.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.http.HttpStatus;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.core.page.PagePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.stereotype.Service;
+import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.oa.domain.bo.SgConstructionBatchBo;
+import com.ruoyi.oa.domain.vo.SgConstructionBatchVo;
+import com.ruoyi.oa.domain.SgConstructionBatch;
+import com.ruoyi.oa.mapper.SgConstructionBatchMapper;
+import com.ruoyi.oa.service.ISgConstructionBatchService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 鏂藉伐鎵规Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2022-05-09
+ */
+@Service
+public class SgConstructionBatchServiceImpl extends ServicePlusImpl<SgConstructionBatchMapper, SgConstructionBatch, SgConstructionBatchVo> implements ISgConstructionBatchService {
+
+    @Override
+    public SgConstructionBatchVo queryById(Long id){
+        return getVoById(id);
+    }
+
+    @Override
+    public TableDataInfo<SgConstructionBatchVo> queryPageList(SgConstructionBatchBo bo) {
+        PagePlus<SgConstructionBatch, SgConstructionBatchVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo));
+        return PageUtils.buildDataInfo(result);
+    }
+
+    @Override
+    public List<SgConstructionBatchVo> queryList(SgConstructionBatchBo bo) {
+        return listVo(buildQueryWrapper(bo));
+    }
+
+    private LambdaQueryWrapper<SgConstructionBatch> buildQueryWrapper(SgConstructionBatchBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<SgConstructionBatch> lqw = Wrappers.lambdaQuery();
+        lqw.like(StringUtils.isNotBlank(bo.getBatch()), SgConstructionBatch::getBatch, bo.getBatch());
+        lqw.eq(bo.getStartDate() != null, SgConstructionBatch::getStartDate, bo.getStartDate());
+        lqw.eq(bo.getEndDate() != null, SgConstructionBatch::getEndDate, bo.getEndDate());
+        lqw.eq(bo.getUserId() != null, SgConstructionBatch::getUserId, bo.getUserId());
+        return lqw;
+    }
+
+    @Override
+    public Boolean insertByBo(SgConstructionBatchBo bo) {
+        List<SgConstructionBatch> list = baseMapper.selectList(new LambdaQueryWrapper<SgConstructionBatch>()
+            .eq(SgConstructionBatch::getBatch, bo.getBatch()));
+        if (list.size() > 0) {
+            throw new ServiceException("鏂藉伐鎵规閲嶅", HttpStatus.HTTP_PARTIAL);
+        }
+        SgConstructionBatch add = BeanUtil.toBean(bo, SgConstructionBatch.class);
+        validEntityBeforeSave(add);
+        boolean flag = save(add);
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    @Override
+    public Boolean updateByBo(SgConstructionBatchBo bo) {
+        List<SgConstructionBatch> list = baseMapper.selectList(new LambdaQueryWrapper<SgConstructionBatch>()
+            .eq(SgConstructionBatch::getBatch, bo.getBatch()).ne(SgConstructionBatch::getId, bo.getId()));
+        if (list.size() > 0) {
+            throw new ServiceException("鏂藉伐鎵规閲嶅", HttpStatus.HTTP_PARTIAL);
+        }
+        SgConstructionBatch update = BeanUtil.toBean(bo, SgConstructionBatch.class);
+        validEntityBeforeSave(update);
+        return updateById(update);
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     *
+     * @param entity 瀹炰綋绫绘暟鎹�
+     */
+    private void validEntityBeforeSave(SgConstructionBatch entity){
+        //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
+        }
+        return removeByIds(ids);
+    }
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SgReserveIpServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SgReserveIpServiceImpl.java
new file mode 100644
index 0000000..8004b4c
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SgReserveIpServiceImpl.java
@@ -0,0 +1,89 @@
+package com.ruoyi.oa.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.core.page.PagePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.stereotype.Service;
+import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.oa.domain.bo.SgReserveIpBo;
+import com.ruoyi.oa.domain.vo.SgReserveIpVo;
+import com.ruoyi.oa.domain.SgReserveIp;
+import com.ruoyi.oa.mapper.SgReserveIpMapper;
+import com.ruoyi.oa.service.ISgReserveIpService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 棰勭暀IPService涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2022-05-10
+ */
+@Service
+public class SgReserveIpServiceImpl extends ServicePlusImpl<SgReserveIpMapper, SgReserveIp, SgReserveIpVo> implements ISgReserveIpService {
+
+    @Override
+    public SgReserveIpVo queryById(Long id){
+        return getVoById(id);
+    }
+
+    @Override
+    public TableDataInfo<SgReserveIpVo> queryPageList(SgReserveIpBo bo) {
+        PagePlus<SgReserveIp, SgReserveIpVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo));
+        return PageUtils.buildDataInfo(result);
+    }
+
+    @Override
+    public List<SgReserveIpVo> queryList(SgReserveIpBo bo) {
+        return listVo(buildQueryWrapper(bo));
+    }
+
+    private LambdaQueryWrapper<SgReserveIp> buildQueryWrapper(SgReserveIpBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<SgReserveIp> lqw = Wrappers.lambdaQuery();
+        lqw.like(StringUtils.isNotBlank(bo.getIp()), SgReserveIp::getIp, bo.getIp());
+        lqw.eq(bo.getBuildingId() != null, SgReserveIp::getBuildingId, bo.getBuildingId());
+        return lqw;
+    }
+
+    @Override
+    public Boolean insertByBo(SgReserveIpBo bo) {
+        SgReserveIp add = BeanUtil.toBean(bo, SgReserveIp.class);
+        validEntityBeforeSave(add);
+        boolean flag = save(add);
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    @Override
+    public Boolean updateByBo(SgReserveIpBo bo) {
+        SgReserveIp update = BeanUtil.toBean(bo, SgReserveIp.class);
+        validEntityBeforeSave(update);
+        return updateById(update);
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     *
+     * @param entity 瀹炰綋绫绘暟鎹�
+     */
+    private void validEntityBeforeSave(SgReserveIp entity){
+        //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
+        }
+        return removeByIds(ids);
+    }
+}
diff --git a/ruoyi-oa/src/main/resources/mapper/oa/BsBuildingMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/BsBuildingMapper.xml
new file mode 100644
index 0000000..621bf6d
--- /dev/null
+++ b/ruoyi-oa/src/main/resources/mapper/oa/BsBuildingMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.oa.mapper.BsBuildingMapper">
+
+    <resultMap type="com.ruoyi.oa.domain.BsBuilding" id="BsBuildingResult">
+        <result property="id" column="id"/>
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="schoolId" column="school_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="ancestors" column="ancestors"/>
+        <result property="orderNum" column="order_num"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+    </resultMap>
+
+
+</mapper>
diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SgConstructionBatchMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SgConstructionBatchMapper.xml
new file mode 100644
index 0000000..d03f6fa
--- /dev/null
+++ b/ruoyi-oa/src/main/resources/mapper/oa/SgConstructionBatchMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.oa.mapper.SgConstructionBatchMapper">
+
+    <resultMap type="com.ruoyi.oa.domain.SgConstructionBatch" id="SgConstructionBatchResult">
+        <result property="id" column="id"/>
+        <result property="batch" column="batch"/>
+        <result property="startDate" column="start_date"/>
+        <result property="endDate" column="end_date"/>
+        <result property="userId" column="user_id"/>
+        <result property="teamMembers" column="team_members"/>
+        <result property="remarks" column="remarks"/>
+        <result property="createTime" column="create_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+    </resultMap>
+
+
+</mapper>
diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SgReserveIpMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SgReserveIpMapper.xml
new file mode 100644
index 0000000..fa7b5c8
--- /dev/null
+++ b/ruoyi-oa/src/main/resources/mapper/oa/SgReserveIpMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.oa.mapper.SgReserveIpMapper">
+
+    <resultMap type="com.ruoyi.oa.domain.SgReserveIp" id="SgReserveIpResult">
+        <result property="id" column="id"/>
+        <result property="ip" column="ip"/>
+        <result property="mac" column="mac"/>
+        <result property="buildingId" column="building_id"/>
+        <result property="applicationDate" column="application_date"/>
+        <result property="remarks" column="remarks"/>
+        <result property="createTime" column="create_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+    </resultMap>
+
+
+</mapper>

--
Gitblit v1.9.1