From eeeddf0836a5a5aa03a3342d34318c7202313e93 Mon Sep 17 00:00:00 2001
From: 唐耀东 <18861537@qq.com>
Date: 星期四, 09 十二月 2021 15:02:30 +0800
Subject: [PATCH] 提交代码

---
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevPeripheralUnitVo.java                 |   98 +
 ruoyi-common/src/main/java/com/ruoyi/common/enums/OaEnums.java                         |   64 +
 ruoyi-common/src/main/java/com/ruoyi/common/enums/EquipmentLog.java                    |   43 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevPeripheralUnitService.java             |   56 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentCodeController.java  |   23 
 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevBatchMapper.java                         |   14 
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentCodeBo.java                  |   66 +
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentVo.java                      |  118 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/ExternaController.java       |  117 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentCode.java                       |   36 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevPeripheralUnitController.java |  116 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentCodeVo.java                  |   42 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java            |   33 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevBatchService.java                      |   56 +
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java            |   20 
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevBatchVo.java                          |   65 +
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentBo.java                      |  134 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentServiceImpl.java          |  167 +++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentLogBo.java                   |  110 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentLogMapper.java                  |   14 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentLogService.java               |   56 +
 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevPeripheralUnitMapper.java                |   14 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevBatchServiceImpl.java              |   91 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentLogController.java   |  116 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentCodeServiceImpl.java      |   19 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/EquipmentLogDTO.java       |   62 +
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevPeripheralUnit.java                      |   82 +
 ruoyi-admin/src/main/resources/application-prod.yml                                    |    8 
 ruoyi-common/src/main/java/com/ruoyi/common/core/service/EquipmentService.java         |   13 
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentLog.java                        |   66 +
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentLogVo.java                   |   86 +
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevBatchBo.java                          |  102 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java       |   14 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentService.java                  |   60 +
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                        |    6 
 ruoyi-oa/src/main/resources/mapper/oa/DevPeripheralUnitMapper.xml                      |   28 
 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentCodeMapper.java                 |   16 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java          |   10 
 ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentMapper.java                     |   14 
 ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java                        |   11 
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipment.java                           |   86 +
 ruoyi-oa/src/main/resources/mapper/oa/DevBatchMapper.xml                               |   22 
 ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml                        |    6 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevPeripheralUnitServiceImpl.java     |  103 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java               |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java       |   18 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentCodeService.java              |   15 
 ruoyi-oa/src/main/resources/mapper/oa/DevEquipmentMapper.xml                           |   29 
 ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentLogServiceImpl.java       |  107 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java       |    7 
 ruoyi-common/src/main/java/com/ruoyi/common/enums/LogType.java                         |   18 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentController.java      |  119 ++
 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java               |   26 
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevPeripheralUnitBo.java                 |  128 ++
 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevBatch.java                               |   60 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevBatchController.java          |  127 ++
 56 files changed, 3,128 insertions(+), 13 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/ExternaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/ExternaController.java
new file mode 100644
index 0000000..533a94e
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/ExternaController.java
@@ -0,0 +1,117 @@
+package com.ruoyi.web.controller.common;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.enums.EquipmentLog;
+import com.ruoyi.common.enums.LogType;
+import com.ruoyi.oa.domain.BsSchool;
+import com.ruoyi.oa.domain.DevBatch;
+import com.ruoyi.oa.domain.DevPeripheralUnit;
+import com.ruoyi.oa.domain.bo.DevEquipmentBo;
+import com.ruoyi.oa.service.IBsSchoolService;
+import com.ruoyi.oa.service.IDevBatchService;
+import com.ruoyi.oa.service.IDevEquipmentService;
+import com.ruoyi.oa.service.IDevPeripheralUnitService;
+import com.ruoyi.system.service.ISysDictDataService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏅烘帶璁惧Controller
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+@Validated
+@Api(value = "澶栭儴鎺ュ彛", tags = {"澶栭儴鎺ュ彛"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/externa")
+public class ExternaController {
+
+    private final ISysDictDataService dictDataService;
+
+    private final IDevPeripheralUnitService iDevPeripheralUnitService;
+
+    private final IDevBatchService iDevBatchService;
+
+    private final IBsSchoolService iBsSchoolService;
+
+    private final IDevEquipmentService iDevEquipmentService;
+
+    /**
+     * 鍩虹淇℃伅
+     */
+    @ApiOperation("鍩虹淇℃伅")
+    @Log(type = LogType.EQUIPMENT_LOG, operation = EquipmentLog.LOAD)
+    @GetMapping
+    public AjaxResult externalAdd() {
+
+        // 鏅烘帶璁惧绫诲瀷
+        List<SysDictData> dict1 = dictDataService.list(new QueryWrapper<SysDictData>().lambda().eq(SysDictData::getDictType, "DICT101"));
+        // 尾缃戠粶宸ヤ綔棰戞
+        List<SysDictData> dict2 = dictDataService.list(new QueryWrapper<SysDictData>().lambda().eq(SysDictData::getDictType, "DICT102"));
+        // 涓插彛閫氫俊娉㈢壒鐜�
+        List<SysDictData> dict3 = dictDataService.list(new QueryWrapper<SysDictData>().lambda().eq(SysDictData::getDictType, "DICT103"));
+        // 鍦ㄧ敤鐘舵��
+        List<SysDictData> dict4 = dictDataService.list(new QueryWrapper<SysDictData>().lambda().eq(SysDictData::getDictType, "DICT104"));
+        // 鍔炲灞傛
+        List<SysDictData> dict5 = dictDataService.list(new QueryWrapper<SysDictData>().lambda().eq(SysDictData::getDictType, "DICT105"));
+        // 瀛︾鑼冨洿
+        List<SysDictData> dict6 = dictDataService.list(new QueryWrapper<SysDictData>().lambda().eq(SysDictData::getDictType, "DICT106"));
+        // 閲囬泦鍛ㄦ湡
+        List<SysDictData> dict7 = dictDataService.list(new QueryWrapper<SysDictData>().lambda().eq(SysDictData::getDictType, "DICT107"));
+        // 澶栬鍗曞厓
+        List<DevPeripheralUnit> peripheralUnit = iDevPeripheralUnitService.list(new QueryWrapper<DevPeripheralUnit>());
+        // 鎵规
+        List<DevBatch> batch = iDevBatchService.list(new QueryWrapper<DevBatch>());
+        // 楂樻牎
+        List<BsSchool> school = iBsSchoolService.list(new QueryWrapper<BsSchool>());
+        Map<String, Object> map = new HashMap<>();
+        map.put("DICT101", dict1);
+        map.put("DICT102", dict2);
+        map.put("DICT103", dict3);
+        map.put("DICT104", dict4);
+        map.put("DICT105", dict5);
+        map.put("DICT106", dict6);
+        map.put("DICT107", dict7);
+        map.put("peripheralUnit", peripheralUnit);
+        map.put("batch", batch);
+        map.put("school", school);
+        return AjaxResult.success(map);
+    }
+
+    /**
+     * 鏂板鏅烘帶璁惧
+     */
+    @ApiOperation("鏂板鏅烘帶璁惧")
+    @Log(type = LogType.EQUIPMENT_LOG, operation = EquipmentLog.WRITE)
+    @RepeatSubmit()
+    @PostMapping("/equipment")
+    public AjaxResult equipmentAdd(@Validated(AddGroup.class) @RequestBody DevEquipmentBo bo) {
+        return AjaxResult.success(iDevEquipmentService.externalAdd(bo));
+    }
+
+    /**
+     * 缂栬緫鏅烘帶璁惧
+     */
+    @ApiOperation("鏂板鏅烘帶璁惧锛堝閮ㄨ皟鐢�-鍘绘帀鏉冮檺锛�")
+    @RepeatSubmit()
+    @Log(type = LogType.EQUIPMENT_LOG, operation = EquipmentLog.SUBMIT_COMMENT)
+    @PutMapping("/equipment")
+    public AjaxResult equipmentEdit(@Validated(AddGroup.class) @RequestBody DevEquipmentBo bo) {
+        return AjaxResult.success(iDevEquipmentService.equipmentEdit(bo));
+    }
+}
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 eb87d3f..385e851 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.QueryWrapper;
 import com.ruoyi.common.annotation.DataDictClass;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.annotation.RepeatSubmit;
@@ -56,6 +57,15 @@
     }
 
     /**
+     * 瀛︽牎涓嬫媺鍒楄〃
+     */
+    @ApiOperation("瀛︽牎涓嬫媺鍒楄〃")
+    @GetMapping("/select")
+    public AjaxResult selectList() {
+        return AjaxResult.success(iBsSchoolService.list(new QueryWrapper<>()));
+    }
+
+    /**
      * 瀵煎嚭瀛︽牎鍒楄〃
      */
     @ApiOperation("瀵煎嚭瀛︽牎鍒楄〃")
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevBatchController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevBatchController.java
new file mode 100644
index 0000000..84b158d
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevBatchController.java
@@ -0,0 +1,127 @@
+package com.ruoyi.web.controller.oa;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.common.enums.EquipmentLog;
+import com.ruoyi.common.enums.LogType;
+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.DevBatchVo;
+import com.ruoyi.oa.domain.bo.DevBatchBo;
+import com.ruoyi.oa.service.IDevBatchService;
+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 2021-12-05
+ */
+@Validated
+@Api(value = "鐢熶骇鎵规鎺у埗鍣�", tags = {"鐢熶骇鎵规绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/batch")
+public class DevBatchController extends BaseController {
+
+    private final IDevBatchService iDevBatchService;
+
+    /**
+     * 鏌ヨ鐢熶骇鎵规鍒楄〃
+     */
+    @ApiOperation("鏌ヨ鐢熶骇鎵规鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:batch:list')")
+    @GetMapping("/list")
+    public TableDataInfo<DevBatchVo> list(@Validated(QueryGroup.class) DevBatchBo bo) {
+        return iDevBatchService.queryPageList(bo);
+    }
+
+    /**
+     * 鐢熶骇鎵规涓嬫媺鍒楄〃
+     */
+    @ApiOperation("鐢熶骇鎵规涓嬫媺鍒楄〃")
+    @GetMapping("/select")
+    public AjaxResult selectList() {
+        return AjaxResult.success(iDevBatchService.list(new QueryWrapper<>()));
+    }
+
+    /**
+     * 瀵煎嚭鐢熶骇鎵规鍒楄〃
+     */
+    @ApiOperation("瀵煎嚭鐢熶骇鎵规鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:batch:export')")
+    @Log(title = "鐢熶骇鎵规", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public void export(@Validated DevBatchBo bo, HttpServletResponse response) {
+        List<DevBatchVo> list = iDevBatchService.queryList(bo);
+        ExcelUtil.exportExcel(list, "鐢熶骇鎵规", DevBatchVo.class, response);
+    }
+
+    /**
+     * 鑾峰彇鐢熶骇鎵规璇︾粏淇℃伅
+     */
+    @ApiOperation("鑾峰彇鐢熶骇鎵规璇︾粏淇℃伅")
+    @PreAuthorize("@ss.hasPermi('oa:batch:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<DevBatchVo> getInfo(@ApiParam("涓婚敭")
+                                                  @NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                                  @PathVariable("id") Long id) {
+        return AjaxResult.success(iDevBatchService.queryById(id));
+    }
+
+    /**
+     * 鏂板鐢熶骇鎵规
+     */
+    @ApiOperation("鏂板鐢熶骇鎵规")
+    @PreAuthorize("@ss.hasPermi('oa:batch:add')")
+    @Log(title = "鐢熶骇鎵规", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody DevBatchBo bo) {
+        return toAjax(iDevBatchService.insertByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 淇敼鐢熶骇鎵规
+     */
+    @ApiOperation("淇敼鐢熶骇鎵规")
+    @PreAuthorize("@ss.hasPermi('oa:batch:edit')")
+    @Log(title = "鐢熶骇鎵规", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody DevBatchBo bo) {
+        return toAjax(iDevBatchService.updateByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 鍒犻櫎鐢熶骇鎵规
+     */
+    @ApiOperation("鍒犻櫎鐢熶骇鎵规")
+    @PreAuthorize("@ss.hasPermi('oa:batch:remove')")
+    @Log(title = "鐢熶骇鎵规" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@ApiParam("涓婚敭涓�")
+                                       @NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                                       @PathVariable Long[] ids) {
+        return toAjax(iDevBatchService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentCodeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentCodeController.java
new file mode 100644
index 0000000..907ba84
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentCodeController.java
@@ -0,0 +1,23 @@
+package com.ruoyi.web.controller.oa;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.core.controller.BaseController;
+import io.swagger.annotations.Api;
+
+/**
+ * 璁惧搴忓垪鍙风淮鎶ontroller
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+@Validated
+@Api(value = "璁惧搴忓垪鍙风淮鎶ゆ帶鍒跺櫒", tags = {"璁惧搴忓垪鍙风淮鎶ょ鐞�"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/equipmentCode")
+public class DevEquipmentCodeController extends BaseController {
+
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentController.java
new file mode 100644
index 0000000..539d17e
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentController.java
@@ -0,0 +1,119 @@
+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.DevEquipmentVo;
+import com.ruoyi.oa.domain.bo.DevEquipmentBo;
+import com.ruoyi.oa.service.IDevEquipmentService;
+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 2021-12-05
+ */
+@Validated
+@Api(value = "鏅烘帶璁惧鎺у埗鍣�", tags = {"鏅烘帶璁惧绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/equipment")
+public class DevEquipmentController extends BaseController {
+
+    private final IDevEquipmentService iDevEquipmentService;
+
+    /**
+     * 鏌ヨ鏅烘帶璁惧鍒楄〃
+     */
+    @ApiOperation("鏌ヨ鏅烘帶璁惧鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:equipment:list')")
+    @GetMapping("/list")
+    @DataDictClass
+    public TableDataInfo<DevEquipmentVo> list(@Validated(QueryGroup.class) DevEquipmentBo bo) {
+        return iDevEquipmentService.queryPageList(bo);
+    }
+
+    /**
+     * 瀵煎嚭鏅烘帶璁惧鍒楄〃
+     */
+    @ApiOperation("瀵煎嚭鏅烘帶璁惧鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:equipment:export')")
+    @Log(title = "鏅烘帶璁惧", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public void export(@Validated DevEquipmentBo bo, HttpServletResponse response) {
+        List<DevEquipmentVo> list = iDevEquipmentService.queryList(bo);
+        ExcelUtil.exportExcel(list, "鏅烘帶璁惧", DevEquipmentVo.class, response);
+    }
+
+    /**
+     * 鑾峰彇鏅烘帶璁惧璇︾粏淇℃伅
+     */
+    @ApiOperation("鑾峰彇鏅烘帶璁惧璇︾粏淇℃伅")
+    @PreAuthorize("@ss.hasPermi('oa:equipment:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<DevEquipmentVo> getInfo(@ApiParam("涓婚敭")
+                                                  @NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                                  @PathVariable("id") Long id) {
+        return AjaxResult.success(iDevEquipmentService.queryById(id));
+    }
+
+//    /**
+//     * 鏂板鏅烘帶璁惧
+//     */
+//    @ApiOperation("鏂板鏅烘帶璁惧")
+//    @PreAuthorize("@ss.hasPermi('oa:equipment:add')")
+//    @Log(title = "鏅烘帶璁惧", businessType = BusinessType.INSERT)
+//    @RepeatSubmit()
+//    @PostMapping()
+//    public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody DevEquipmentBo bo) {
+//        return toAjax(iDevEquipmentService.insertByBo(bo) ? 1 : 0);
+//    }
+
+
+    /**
+     * 淇敼鏅烘帶璁惧
+     */
+    @ApiOperation("淇敼鏅烘帶璁惧")
+    @PreAuthorize("@ss.hasPermi('oa:equipment:edit')")
+    @Log(title = "鏅烘帶璁惧", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody DevEquipmentBo bo) {
+        return toAjax(iDevEquipmentService.updateByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 鍒犻櫎鏅烘帶璁惧
+     */
+    @ApiOperation("鍒犻櫎鏅烘帶璁惧")
+    @PreAuthorize("@ss.hasPermi('oa:equipment:remove')")
+    @Log(title = "鏅烘帶璁惧" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@ApiParam("涓婚敭涓�")
+                                       @NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                                       @PathVariable Long[] ids) {
+        return toAjax(iDevEquipmentService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentLogController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentLogController.java
new file mode 100644
index 0000000..ccb0bc3
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentLogController.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.DevEquipmentLogVo;
+import com.ruoyi.oa.domain.bo.DevEquipmentLogBo;
+import com.ruoyi.oa.service.IDevEquipmentLogService;
+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 2021-12-08
+ */
+@Validated
+@Api(value = "璁惧鑱旀満鏃ュ織鎺у埗鍣�", tags = {"璁惧鑱旀満鏃ュ織绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/equipmentLog")
+public class DevEquipmentLogController extends BaseController {
+
+    private final IDevEquipmentLogService iDevEquipmentLogService;
+
+    /**
+     * 鏌ヨ璁惧鑱旀満鏃ュ織鍒楄〃
+     */
+    @ApiOperation("鏌ヨ璁惧鑱旀満鏃ュ織鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:equipmentLog:list')")
+    @GetMapping("/list")
+    public TableDataInfo<DevEquipmentLogVo> list(@Validated(QueryGroup.class) DevEquipmentLogBo bo) {
+        return iDevEquipmentLogService.queryPageList(bo);
+    }
+
+    /**
+     * 瀵煎嚭璁惧鑱旀満鏃ュ織鍒楄〃
+     */
+    @ApiOperation("瀵煎嚭璁惧鑱旀満鏃ュ織鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:equipmentLog:export')")
+    @Log(title = "璁惧鑱旀満鏃ュ織", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public void export(@Validated DevEquipmentLogBo bo, HttpServletResponse response) {
+        List<DevEquipmentLogVo> list = iDevEquipmentLogService.queryList(bo);
+        ExcelUtil.exportExcel(list, "璁惧鑱旀満鏃ュ織", DevEquipmentLogVo.class, response);
+    }
+
+    /**
+     * 鑾峰彇璁惧鑱旀満鏃ュ織璇︾粏淇℃伅
+     */
+    @ApiOperation("鑾峰彇璁惧鑱旀満鏃ュ織璇︾粏淇℃伅")
+    @PreAuthorize("@ss.hasPermi('oa:equipmentLog:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<DevEquipmentLogVo> getInfo(@ApiParam("涓婚敭")
+                                                  @NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                                  @PathVariable("id") Long id) {
+        return AjaxResult.success(iDevEquipmentLogService.queryById(id));
+    }
+
+    /**
+     * 鏂板璁惧鑱旀満鏃ュ織
+     */
+    @ApiOperation("鏂板璁惧鑱旀満鏃ュ織")
+    @PreAuthorize("@ss.hasPermi('oa:equipmentLog:add')")
+    @Log(title = "璁惧鑱旀満鏃ュ織", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody DevEquipmentLogBo bo) {
+        return toAjax(iDevEquipmentLogService.insertByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 淇敼璁惧鑱旀満鏃ュ織
+     */
+    @ApiOperation("淇敼璁惧鑱旀満鏃ュ織")
+    @PreAuthorize("@ss.hasPermi('oa:equipmentLog:edit')")
+    @Log(title = "璁惧鑱旀満鏃ュ織", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody DevEquipmentLogBo bo) {
+        return toAjax(iDevEquipmentLogService.updateByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 鍒犻櫎璁惧鑱旀満鏃ュ織
+     */
+    @ApiOperation("鍒犻櫎璁惧鑱旀満鏃ュ織")
+    @PreAuthorize("@ss.hasPermi('oa:equipmentLog:remove')")
+    @Log(title = "璁惧鑱旀満鏃ュ織" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@ApiParam("涓婚敭涓�")
+                                       @NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                                       @PathVariable Long[] ids) {
+        return toAjax(iDevEquipmentLogService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevPeripheralUnitController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevPeripheralUnitController.java
new file mode 100644
index 0000000..fddc5cc
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevPeripheralUnitController.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.DevPeripheralUnitVo;
+import com.ruoyi.oa.domain.bo.DevPeripheralUnitBo;
+import com.ruoyi.oa.service.IDevPeripheralUnitService;
+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 2021-12-06
+ */
+@Validated
+@Api(value = "澶栬鍗曞厓鎺у埗鍣�", tags = {"澶栬鍗曞厓绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/peripheralUnit")
+public class DevPeripheralUnitController extends BaseController {
+
+    private final IDevPeripheralUnitService iDevPeripheralUnitService;
+
+    /**
+     * 鏌ヨ澶栬鍗曞厓鍒楄〃
+     */
+    @ApiOperation("鏌ヨ澶栬鍗曞厓鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:peripheralUnit:list')")
+    @GetMapping("/list")
+    public TableDataInfo<DevPeripheralUnitVo> list(@Validated(QueryGroup.class) DevPeripheralUnitBo bo) {
+        return iDevPeripheralUnitService.queryPageList(bo);
+    }
+
+    /**
+     * 瀵煎嚭澶栬鍗曞厓鍒楄〃
+     */
+    @ApiOperation("瀵煎嚭澶栬鍗曞厓鍒楄〃")
+    @PreAuthorize("@ss.hasPermi('oa:peripheralUnit:export')")
+    @Log(title = "澶栬鍗曞厓", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public void export(@Validated DevPeripheralUnitBo bo, HttpServletResponse response) {
+        List<DevPeripheralUnitVo> list = iDevPeripheralUnitService.queryList(bo);
+        ExcelUtil.exportExcel(list, "澶栬鍗曞厓", DevPeripheralUnitVo.class, response);
+    }
+
+    /**
+     * 鑾峰彇澶栬鍗曞厓璇︾粏淇℃伅
+     */
+    @ApiOperation("鑾峰彇澶栬鍗曞厓璇︾粏淇℃伅")
+    @PreAuthorize("@ss.hasPermi('oa:peripheralUnit:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<DevPeripheralUnitVo> getInfo(@ApiParam("涓婚敭")
+                                                  @NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+                                                  @PathVariable("id") Long id) {
+        return AjaxResult.success(iDevPeripheralUnitService.queryById(id));
+    }
+
+    /**
+     * 鏂板澶栬鍗曞厓
+     */
+    @ApiOperation("鏂板澶栬鍗曞厓")
+    @PreAuthorize("@ss.hasPermi('oa:peripheralUnit:add')")
+    @Log(title = "澶栬鍗曞厓", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody DevPeripheralUnitBo bo) {
+        return toAjax(iDevPeripheralUnitService.insertByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 淇敼澶栬鍗曞厓
+     */
+    @ApiOperation("淇敼澶栬鍗曞厓")
+    @PreAuthorize("@ss.hasPermi('oa:peripheralUnit:edit')")
+    @Log(title = "澶栬鍗曞厓", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody DevPeripheralUnitBo bo) {
+        return toAjax(iDevPeripheralUnitService.updateByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 鍒犻櫎澶栬鍗曞厓
+     */
+    @ApiOperation("鍒犻櫎澶栬鍗曞厓")
+    @PreAuthorize("@ss.hasPermi('oa:peripheralUnit:remove')")
+    @Log(title = "澶栬鍗曞厓" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@ApiParam("涓婚敭涓�")
+                                       @NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+                                       @PathVariable Long[] ids) {
+        return toAjax(iDevPeripheralUnitService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
index 194c993..307ab4d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -3,6 +3,8 @@
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.controller.BaseController;
@@ -63,6 +65,16 @@
         return userService.selectPageUserList(user);
     }
 
+    /**
+     * 鏈烘瀯鎴愬憳锛堟棤鏉冮檺锛�
+     */
+    @ApiOperation("鑾峰彇鐢ㄦ埛鍒楄〃")
+    @GetMapping("/byDept")
+    public AjaxResult byDept(@RequestParam Long deptId, @RequestParam int pageNum, @RequestParam int pageSize) {
+        Page<SysUser> page = new Page<SysUser>(pageNum, pageSize);
+        return AjaxResult.success(userService.pageList(page, deptId));
+    }
+
     @ApiOperation("瀵煎嚭鐢ㄦ埛鍒楄〃")
     @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('system:user:export')")
@@ -75,7 +87,6 @@
             SysUserExportVo vo = listVo.get(i);
             if (ObjectUtil.isNotEmpty(dept)) {
                 vo.setDeptName(dept.getDeptName());
-                vo.setLeader(dept.getLeader());
             }
         }
         ExcelUtil.exportExcel(listVo, "鐢ㄦ埛鏁版嵁", SysUserExportVo.class, response);
@@ -228,4 +239,9 @@
         userService.insertUserAuth(userId, roleIds);
         return success();
     }
+
+    @GetMapping("/select")
+    public AjaxResult selectList() {
+        return AjaxResult.success(userService.list(new QueryWrapper<SysUser>().lambda().eq(SysUser::getStatus, 0)));
+    }
 }
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index 1d680d7..c88d932 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -58,9 +58,9 @@
         # 涓诲簱鏁版嵁婧�
         master:
           driverClassName: com.mysql.cj.jdbc.Driver
-          url: jdbc:mysql://172.30.0.36:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+          url: jdbc:mysql://47.95.0.46:3307/ytsl_oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
           username: root
-          password: root
+          password: test1214
         # 浠庡簱鏁版嵁婧�
         slave:
           lazy: true
@@ -120,13 +120,13 @@
 spring:
   redis:
     # 鍦板潃
-    host: 172.30.0.48
+    host: 47.95.0.46
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
     database: 0
     # 瀵嗙爜
-    password:
+    password: test
     # 杩炴帴瓒呮椂鏃堕棿
     timeout: 10s
     # 鏄惁寮�鍚痵sl
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
index 32c39a3..1242287 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
@@ -1,6 +1,8 @@
 package com.ruoyi.common.annotation;
 
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.EquipmentLog;
+import com.ruoyi.common.enums.LogType;
 import com.ruoyi.common.enums.OperatorType;
 
 import java.lang.annotation.*;
@@ -14,6 +16,10 @@
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 public @interface Log {
+    /**
+     * 绫诲瀷锛�01绯荤粺鏃ュ織02鑱旀満鏃ュ織锛�
+     */
+    LogType type() default LogType.SYS_LOG;
     /**
      * 妯″潡
      */
@@ -38,4 +44,9 @@
      * 鏄惁淇濆瓨鍝嶅簲鐨勫弬鏁�
      */
     boolean isSaveResponseData() default true;
+
+    /**
+     * 鑱旀満-鎿嶄綔琛屼负
+     */
+    EquipmentLog operation() default EquipmentLog.LOAD;
 }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/EquipmentLogDTO.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/EquipmentLogDTO.java
new file mode 100644
index 0000000..1577a9b
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/EquipmentLogDTO.java
@@ -0,0 +1,62 @@
+package com.ruoyi.common.core.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * 璁惧鑱旀満鏃ュ織瀵硅薄 dev_equipment_log
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+@Data
+@Accessors(chain = true)
+@TableName("dev_equipment_log")
+public class EquipmentLogDTO {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     *
+     */
+    @TableId(value = "id")
+    private Long id;
+    /**
+     * 鎿嶄綔琛屼负
+     */
+    private Integer operation;
+    /**
+     * 鐢ㄦ埛璐﹀彿
+     */
+    private String userName;
+    /**
+     * 鐢ㄦ埛鍚嶇О
+     */
+    private String nickName;
+    /**
+     * ip
+     */
+    private String ip;
+    /**
+     * 鑱旀満鍦扮偣
+     */
+    private String loginLocation;
+    /**
+     * 0鎴愬姛1澶辫触
+     */
+    private Integer status;
+    /**
+     * 閿欒淇℃伅
+     */
+    private String errorMsg;
+    /**
+     * 鑱旀満鏃堕棿
+     */
+    private Date loginTime;
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
index 17ff660..d9627cd 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
@@ -1,5 +1,6 @@
 package com.ruoyi.common.core.domain.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -35,6 +36,12 @@
 	@TableId(value = "dept_id")
 	private Long deptId;
 
+    /**
+     * 鏈烘瀯缂栧彿
+     */
+    @ApiModelProperty(value = "鏈烘瀯缂栧彿")
+    private String code;
+
 	/**
 	 * 閮ㄩ棬鍚嶇О
 	 */
@@ -51,10 +58,30 @@
 	private String orderNum;
 
 	/**
-	 * 璐熻矗浜�
+	 * 涓昏礋璐d汉
 	 */
-	@ApiModelProperty(value = "璐熻矗浜�")
-	private String leader;
+	@ApiModelProperty(value = "涓昏礋璐d汉")
+	private Long leader;
+
+    @ApiModelProperty(value = "涓昏礋璐d汉濮撳悕")
+    @TableField(exist = false)
+    private String leaderName;
+
+    @ApiModelProperty(value = "鍓礋璐d汉濮撳悕")
+    @TableField(exist = false)
+    private String leaderAssistantName;
+
+    /**
+     * 鍓礋璐d汉
+     */
+    @ApiModelProperty(value = "鍓礋璐d汉")
+    private Long leaderAssistant;
+
+    /**
+     * 鏈烘瀯鑱岃兘
+     */
+    @ApiModelProperty(value = "鏈烘瀯鑱岃兘")
+    private String remarks;
 
 	/**
 	 * 鑱旂郴鐢佃瘽
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
index 2fa57f5..51f973d 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -1,6 +1,7 @@
 package com.ruoyi.common.core.domain.entity;
 
 import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ruoyi.common.core.domain.BaseEntity;
@@ -133,6 +134,25 @@
 	@ApiModelProperty(value = "澶囨敞")
 	private String remark;
 
+    /**
+     * 璇佷欢鍙风爜
+     */
+    @ApiModelProperty(value = "璇佷欢鍙风爜")
+	private String certificateNo;
+
+    /**
+     * 鐓х墖
+     */
+    @ApiModelProperty(value = "鐓х墖")
+	private String photo;
+
+    /**
+     * 鍏ヨ亴鏃堕棿
+     */
+    @ApiModelProperty(value = "鍏ヨ亴鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date entryTime;
+
 	/**
 	 * 閮ㄩ棬瀵硅薄
 	 */
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/EquipmentService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/EquipmentService.java
new file mode 100644
index 0000000..29c5c37
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/EquipmentService.java
@@ -0,0 +1,13 @@
+package com.ruoyi.common.core.service;
+
+import com.ruoyi.common.core.domain.dto.EquipmentLogDTO;
+
+/**
+ * 閫氱敤 鑱旀満璁块棶鏃ュ織
+ *
+ * @author Lion Li
+ */
+public interface EquipmentService {
+
+    void recordOper(EquipmentLogDTO dto);
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/EquipmentLog.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EquipmentLog.java
new file mode 100644
index 0000000..8654f50
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EquipmentLog.java
@@ -0,0 +1,43 @@
+package com.ruoyi.common.enums;
+/**
+ * 鎿嶄綔琛屼负
+ *
+ * @author ruoyi
+ */
+public enum EquipmentLog {
+
+    /**
+     * 鐧诲綍
+     */
+    LOGIN,
+
+    /**
+     * 鍔犺浇
+     */
+    LOAD,
+
+    /**
+     * 鏍¢獙
+     */
+    CHECK,
+
+    /**
+     * 鍐欏叆
+     */
+    WRITE,
+
+    /**
+     * 鎻愪氦澶囨敞
+     */
+    SUBMIT_COMMENT,
+
+    /**
+     * 澶嶄綅
+     */
+    RESET,
+
+    /**
+     * 鎺ㄥ嚭
+     */
+    SIGN_OUT
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/LogType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/LogType.java
new file mode 100644
index 0000000..6b6127b
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/LogType.java
@@ -0,0 +1,18 @@
+package com.ruoyi.common.enums;
+
+/**
+ * 鏃ュ織绫诲瀷
+ *
+ * @author ruoyi
+ */
+public enum LogType {
+
+    /**
+     * 绯荤粺鏃ュ織
+     */
+    SYS_LOG,
+    /**
+     * 璁惧鏃ュ織
+     */
+    EQUIPMENT_LOG,
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/OaEnums.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OaEnums.java
new file mode 100644
index 0000000..a6703b1
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OaEnums.java
@@ -0,0 +1,64 @@
+package com.ruoyi.common.enums;
+
+import lombok.Getter;
+
+/**
+ * <p>
+ * 鏋氫妇绫�
+ * </p>
+ *
+ * @author ruoyi
+ */
+public class OaEnums {
+
+    /**
+     * 鑱旀満鏃ュ織
+     */
+    @Getter
+    public enum EquipmentLog {
+        /**
+         * 鐧诲綍
+         */
+        LOGIN("01", "鐧诲綍"),
+
+        /**
+         * 鍔犺浇
+         */
+        LOAD("02", "鐧诲綍"),
+
+        /**
+         * 鍔犺浇
+         */
+        CHECK("03", "鐧诲綍"),
+
+        /**
+         * 鍐欏叆
+         */
+        WRITE("04", "鐧诲綍"),
+
+        /**
+         * 鎻愪氦澶囨敞
+         */
+        SUBMIT_COMMENT("05", "鐧诲綍"),
+
+        /**
+         * 澶嶄綅
+         */
+        RESET("06", "鐧诲綍"),
+
+        /**
+         * 鎺ㄥ嚭
+         */
+        SIGN_OUT("07", "鐧诲綍");
+
+        private String type;
+        private String name;
+
+        EquipmentLog(String type, String name) {
+            this.type = type;
+            this.name = name;
+        }
+    }
+
+}
+
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
index 642076d..db4ceac 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
@@ -1,11 +1,14 @@
 package com.ruoyi.framework.aspectj;
 
 import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.domain.dto.EquipmentLogDTO;
 import com.ruoyi.common.core.domain.dto.OperLogDTO;
 import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.service.EquipmentService;
 import com.ruoyi.common.core.service.OperLogService;
 import com.ruoyi.common.enums.BusinessStatus;
 import com.ruoyi.common.enums.HttpMethod;
+import com.ruoyi.common.enums.LogType;
 import com.ruoyi.common.utils.JsonUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.ServletUtils;
@@ -65,18 +68,28 @@
 
             // *========鏁版嵁搴撴棩蹇�=========*//
             OperLogDTO operLog = new OperLogDTO();
+            // 鑱旀満鏃ュ織
+            EquipmentLogDTO equipmentLogDTO = new EquipmentLogDTO();
+
             operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
+            equipmentLogDTO.setStatus(BusinessStatus.SUCCESS.ordinal());
+
             // 璇锋眰鐨勫湴鍧�
             String ip = ServletUtils.getClientIP();
             operLog.setOperIp(ip);
+            equipmentLogDTO.setIp(ip);
             operLog.setOperUrl(ServletUtils.getRequest().getRequestURI());
             if (loginUser != null) {
                 operLog.setOperName(loginUser.getUsername());
+                equipmentLogDTO.setUserName(loginUser.getUsername());
             }
 
             if (e != null) {
                 operLog.setStatus(BusinessStatus.FAIL.ordinal());
                 operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
+
+                equipmentLogDTO.setStatus(BusinessStatus.FAIL.ordinal());
+                equipmentLogDTO.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
             }
             // 璁剧疆鏂规硶鍚嶇О
             String className = joinPoint.getTarget().getClass().getName();
@@ -86,8 +99,15 @@
             operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
             // 澶勭悊璁剧疆娉ㄨВ涓婄殑鍙傛暟
             getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult);
-            // 淇濆瓨鏁版嵁搴�
-            SpringUtils.getBean(OperLogService.class).recordOper(operLog);
+            if (LogType.SYS_LOG.ordinal() == controllerLog.type().ordinal()) {
+                // 淇濆瓨鏁版嵁搴�
+                SpringUtils.getBean(OperLogService.class).recordOper(operLog);
+            }
+            if (LogType.EQUIPMENT_LOG.ordinal() == controllerLog.type().ordinal()) {
+                equipmentLogDTO.setOperation(controllerLog.operation().ordinal());
+                // 淇濆瓨鏁版嵁搴�
+                SpringUtils.getBean(EquipmentService.class).recordOper(equipmentLogDTO);
+            }
         } catch (Exception exp) {
             // 璁板綍鏈湴寮傚父鏃ュ織
             log.error("==鍓嶇疆閫氱煡寮傚父==");
@@ -181,6 +201,6 @@
             }
         }
         return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse
-                || o instanceof BindingResult;
+            || o instanceof BindingResult;
     }
 }
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevBatch.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevBatch.java
new file mode 100644
index 0000000..a9cb070
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevBatch.java
@@ -0,0 +1,60 @@
+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;
+
+/**
+ * 鐢熶骇鎵规瀵硅薄 dev_batch
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+@Data
+@Accessors(chain = true)
+@TableName("dev_batch")
+public class DevBatch extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * id
+     */
+    @TableId(value = "id")
+    private Long id;
+    /**
+     * 鐢熶骇鎵规
+     */
+    private String batch;
+    /**
+     * 涓嬪崟鏃ユ湡
+     */
+    private Date orderDate;
+    /**
+     * 鍒拌揣鏃ユ湡
+     */
+    private Date arrivalDate;
+    /**
+     * 鎵规璇存槑
+     */
+    private String illustrate;
+    /**
+     * 鍒犻櫎鏍囪瘑
+     */
+    @TableLogic
+    private String delFlag;
+    /**
+     * 涔愯閿�
+     */
+    @Version
+    private Integer version;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipment.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipment.java
new file mode 100644
index 0000000..39028dc
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipment.java
@@ -0,0 +1,86 @@
+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.BaseEntity;
+
+/**
+ * 鏅烘帶璁惧瀵硅薄 dev_equipment
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+@Data
+@Accessors(chain = true)
+@TableName("dev_equipment")
+public class DevEquipment extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * id
+     */
+    @TableId(value = "id")
+    private Long id;
+    /**
+     * 搴忓垪鍙�
+     */
+    private Long serialNumber;
+    /**
+     * 璁惧绫诲瀷
+     */
+    private String type;
+    /**
+     * 搴忓垪鐮�
+     */
+    private String sequenceCode;
+    /**
+     * 鐗堟湰
+     */
+    private String edition;
+    /**
+     * 瀛︽牎id
+     */
+    private Long schoolId;
+    /**
+     * 涓绘満ID
+     */
+    private String hostId;
+    /**
+     * 尾缃戠粶ID
+     */
+    private String networkId;
+    /**
+     * 尾宸ヤ綔棰戞
+     */
+    private String frequencyBand;
+    /**
+     * 鐢熶骇鎵规
+     */
+    private Long batchId;
+    /**
+     * 鍦ㄧ敤鐘舵��
+     */
+    private String useStatus;
+    /**
+     * 澶囨敞
+     */
+    private String remarks;
+    /**
+     * 鍒犻櫎鏍囪瘑
+     */
+    @TableLogic
+    private Integer delFlag;
+    /**
+     * 涔愯閿�
+     */
+    @Version
+    private Integer version;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentCode.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentCode.java
new file mode 100644
index 0000000..fc2a703
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentCode.java
@@ -0,0 +1,36 @@
+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.BaseEntity;
+
+/**
+ * 璁惧搴忓垪鍙风淮鎶ゅ璞� dev_equipment_code
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+@Data
+@Accessors(chain = true)
+@TableName("dev_equipment_code")
+public class DevEquipmentCode {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 搴忓垪鍙�
+     */
+    @TableId(value = "id")
+    private Long id;
+    /**
+     * 纭欢璁惧搴忓垪鐮�
+     */
+    private String sequenceCode;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentLog.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentLog.java
new file mode 100644
index 0000000..95d4ca7
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentLog.java
@@ -0,0 +1,66 @@
+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;
+
+/**
+ * 璁惧鑱旀満鏃ュ織瀵硅薄 dev_equipment_log
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+@Data
+@Accessors(chain = true)
+@TableName("dev_equipment_log")
+public class DevEquipmentLog {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     *
+     */
+    @TableId(value = "id")
+    private Long id;
+    /**
+     * 鎿嶄綔琛屼负
+     */
+    private Integer operation;
+    /**
+     * 鐢ㄦ埛璐﹀彿
+     */
+    private String userName;
+    /**
+     * 鐢ㄦ埛鍚嶇О
+     */
+    private String nickName;
+    /**
+     * ip
+     */
+    private String ip;
+    /**
+     * 鑱旀満鍦扮偣
+     */
+    private String loginLocation;
+    /**
+     * 0鎴愬姛1澶辫触
+     */
+    private Integer status;
+    /**
+     * 閿欒淇℃伅
+     */
+    private String errorMsg;
+    /**
+     * 鑱旀満鏃堕棿
+     */
+    private Date loginTime;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevPeripheralUnit.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevPeripheralUnit.java
new file mode 100644
index 0000000..afeb5e9
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevPeripheralUnit.java
@@ -0,0 +1,82 @@
+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.BaseEntity;
+
+/**
+ * 澶栬鍗曞厓瀵硅薄 dev_peripheral_unit
+ *
+ * @author ruoyi
+ * @date 2021-12-06
+ */
+@Data
+@Accessors(chain = true)
+@TableName("dev_peripheral_unit")
+public class DevPeripheralUnit extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * id
+     */
+    @TableId(value = "id")
+    private Long id;
+    /**
+     * 澶栬浠g爜
+     */
+    private String code;
+    /**
+     * 澶栬鍚嶇О
+     */
+    private String name;
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    private String model;
+    /**
+     * 鐢熶骇鍘傚晢
+     */
+    private String manufacturer;
+    /**
+     * 鍘傚晢浠g爜
+     */
+    private String vendorCode;
+    /**
+     * 娉㈢壒鐜�
+     */
+    private String baudRate;
+    /**
+     * 璇绘暟鎸囦护
+     */
+    private String readInstruction;
+    /**
+     * 鍥炴暟闀垮害
+     */
+    private Integer loopLength;
+    /**
+     * 鍔熻兘鎻忚堪
+     */
+    private String description;
+    /**
+     * 闄勪欢
+     */
+    private String filePath;
+    /**
+     * 鍒犻櫎鏍囪瘑
+     */
+    @TableLogic
+    private String delFlag;
+    /**
+     * 涔愯閿�
+     */
+    @Version
+    private Integer version;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevBatchBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevBatchBo.java
new file mode 100644
index 0000000..3abfc9f
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevBatchBo.java
@@ -0,0 +1,102 @@
+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 java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 鐢熶骇鎵规涓氬姟瀵硅薄 dev_batch
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("鐢熶骇鎵规涓氬姟瀵硅薄")
+public class DevBatchBo extends BaseEntity {
+
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    /**
+     * 鐢熶骇鎵规
+     */
+    @ApiModelProperty(value = "鐢熶骇鎵规", required = true)
+    @NotBlank(message = "鐢熶骇鎵规涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String batch;
+
+    /**
+     * 涓嬪崟鏃ユ湡
+     */
+    @ApiModelProperty(value = "涓嬪崟鏃ユ湡", required = true)
+    @NotNull(message = "涓嬪崟鏃ユ湡涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date orderDate;
+
+    /**
+     * 鍒拌揣鏃ユ湡
+     */
+    @ApiModelProperty(value = "鍒拌揣鏃ユ湡", required = true)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @NotNull(message = "鍒拌揣鏃ユ湡涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private Date arrivalDate;
+
+    /**
+     * 鎵规璇存槑
+     */
+    @ApiModelProperty(value = "鎵规璇存槑", required = true)
+    @NotBlank(message = "鎵规璇存槑涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String illustrate;
+
+    /**
+     * 鍒犻櫎鏍囪瘑
+     */
+    @ApiModelProperty(value = "鍒犻櫎鏍囪瘑")
+    private String delFlag;
+
+    /**
+     * 涔愯閿�
+     */
+    @ApiModelProperty(value = "涔愯閿�")
+    private Integer version;
+
+
+    /**
+     * 鍒嗛〉澶у皬
+     */
+    @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/DevEquipmentBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentBo.java
new file mode 100644
index 0000000..92e29e5
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentBo.java
@@ -0,0 +1,134 @@
+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.BaseEntity;
+
+/**
+ * 鏅烘帶璁惧涓氬姟瀵硅薄 dev_equipment
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("鏅烘帶璁惧涓氬姟瀵硅薄")
+public class DevEquipmentBo extends BaseEntity {
+
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id", required = true)
+    private Long id;
+
+    /**
+     * 搴忓垪鍙�
+     */
+    @ApiModelProperty(value = "搴忓垪鍙�", required = true)
+    @NotNull(message = "搴忓垪鍙蜂笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class })
+    private Long serialNumber;
+
+    /**
+     * 璁惧绫诲瀷
+     */
+    @ApiModelProperty(value = "璁惧绫诲瀷", required = true)
+    @NotNull(message = "璁惧绫诲瀷涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String type;
+
+    /**
+     * 搴忓垪鐮�
+     */
+    @ApiModelProperty(value = "搴忓垪鐮�", required = true)
+    @NotNull(message = "搴忓垪鐮佷笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class })
+    private String sequenceCode;
+
+    /**
+     * 鐗堟湰
+     */
+    @ApiModelProperty(value = "鐗堟湰", required = true)
+    @NotNull(message = "鐗堟湰涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String edition;
+
+    /**
+     * 瀛︽牎id
+     */
+    @ApiModelProperty(value = "瀛︽牎id", required = true)
+    @NotNull(message = "瀛︽牎id涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private Long schoolId;
+
+    /**
+     * 涓绘満ID
+     */
+    @ApiModelProperty(value = "涓绘満ID", required = true)
+    @NotNull(message = "涓绘満ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String hostId;
+
+    /**
+     * 尾缃戠粶ID
+     */
+    @ApiModelProperty(value = "尾缃戠粶ID", required = true)
+    @NotNull(message = "尾缃戠粶ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String networkId;
+
+    /**
+     * 尾宸ヤ綔棰戞
+     */
+    @ApiModelProperty(value = "尾宸ヤ綔棰戞", required = true)
+    @NotNull(message = "尾宸ヤ綔棰戞涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String frequencyBand;
+
+    /**
+     * 鐢熶骇鎵规
+     */
+    @ApiModelProperty(value = "鐢熶骇鎵规", required = true)
+    @NotNull(message = "鐢熶骇鎵规涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private Long batchId;
+
+    /**
+     * 鍦ㄧ敤鐘舵��
+     */
+    @ApiModelProperty(value = "鍦ㄧ敤鐘舵��", required = true)
+    @NotNull(message = "鍦ㄧ敤鐘舵�佷笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class })
+    private String useStatus;
+
+    /**
+     * 澶囨敞
+     */
+    @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/DevEquipmentCodeBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentCodeBo.java
new file mode 100644
index 0000000..65a9e25
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentCodeBo.java
@@ -0,0 +1,66 @@
+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.BaseEntity;
+
+/**
+ * 璁惧搴忓垪鍙风淮鎶や笟鍔″璞� dev_equipment_code
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("璁惧搴忓垪鍙风淮鎶や笟鍔″璞�")
+public class DevEquipmentCodeBo 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 sequenceCode;
+
+
+    /**
+     * 鍒嗛〉澶у皬
+     */
+    @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/DevEquipmentLogBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentLogBo.java
new file mode 100644
index 0000000..5189512
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentLogBo.java
@@ -0,0 +1,110 @@
+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 java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 璁惧鑱旀満鏃ュ織涓氬姟瀵硅薄 dev_equipment_log
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("璁惧鑱旀満鏃ュ織涓氬姟瀵硅薄")
+public class DevEquipmentLogBo 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 operation;
+
+    /**
+     * 鐢ㄦ埛璐﹀彿
+     */
+    @ApiModelProperty(value = "鐢ㄦ埛璐﹀彿", required = true)
+    @NotBlank(message = "鐢ㄦ埛璐﹀彿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String userName;
+
+    /**
+     * 鐢ㄦ埛鍚嶇О
+     */
+    @ApiModelProperty(value = "鐢ㄦ埛鍚嶇О", required = true)
+    @NotBlank(message = "鐢ㄦ埛鍚嶇О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String nickName;
+
+    /**
+     * ip
+     */
+    @ApiModelProperty(value = "ip", required = true)
+    @NotBlank(message = "ip涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String ip;
+
+    /**
+     * 鑱旀満鍦扮偣
+     */
+    @ApiModelProperty(value = "鑱旀満鍦扮偣", required = true)
+    @NotBlank(message = "鑱旀満鍦扮偣涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String loginLocation;
+
+    /**
+     * 
+     */
+    @ApiModelProperty(value = "", required = true)
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 鑱旀満鏃堕棿
+     */
+    @ApiModelProperty(value = "鑱旀満鏃堕棿", required = true)
+    @NotNull(message = "鑱旀満鏃堕棿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private Date loginTime;
+
+
+    /**
+     * 鍒嗛〉澶у皬
+     */
+    @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/DevPeripheralUnitBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevPeripheralUnitBo.java
new file mode 100644
index 0000000..70bd8e5
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevPeripheralUnitBo.java
@@ -0,0 +1,128 @@
+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.BaseEntity;
+
+/**
+ * 澶栬鍗曞厓涓氬姟瀵硅薄 dev_peripheral_unit
+ *
+ * @author ruoyi
+ * @date 2021-12-06
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("澶栬鍗曞厓涓氬姟瀵硅薄")
+public class DevPeripheralUnitBo extends BaseEntity {
+
+    /**
+     * id
+     */
+    @ApiModelProperty(value = "id", required = true)
+    @NotNull(message = "id涓嶈兘涓虹┖", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     * 澶栬浠g爜
+     */
+    @ApiModelProperty(value = "澶栬浠g爜", required = true)
+    @NotBlank(message = "澶栬浠g爜涓嶈兘涓虹┖", 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)
+    @NotBlank(message = "瑙勬牸鍨嬪彿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String model;
+
+    /**
+     * 鐢熶骇鍘傚晢
+     */
+    @ApiModelProperty(value = "鐢熶骇鍘傚晢", required = true)
+    @NotBlank(message = "鐢熶骇鍘傚晢涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String manufacturer;
+
+    /**
+     * 鍘傚晢浠g爜
+     */
+    @ApiModelProperty(value = "鍘傚晢浠g爜", required = true)
+    @NotBlank(message = "鍘傚晢浠g爜涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String vendorCode;
+
+    /**
+     * 娉㈢壒鐜�
+     */
+    @ApiModelProperty(value = "娉㈢壒鐜�", required = true)
+    @NotBlank(message = "娉㈢壒鐜囦笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class })
+    private String baudRate;
+
+    /**
+     * 璇绘暟鎸囦护
+     */
+    @ApiModelProperty(value = "璇绘暟鎸囦护", required = true)
+    @NotBlank(message = "璇绘暟鎸囦护涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String readInstruction;
+
+    /**
+     * 鍥炴暟闀垮害
+     */
+    @ApiModelProperty(value = "鍥炴暟闀垮害", required = true)
+    @NotNull(message = "鍥炴暟闀垮害涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private Integer loopLength;
+
+    /**
+     * 鍔熻兘鎻忚堪
+     */
+    @ApiModelProperty(value = "鍔熻兘鎻忚堪")
+    private String description;
+
+    /**
+     * 闄勪欢
+     */
+    @ApiModelProperty(value = "闄勪欢", required = true)
+    @NotBlank(message = "闄勪欢涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+    private String filePath;
+
+
+    /**
+     * 鍒嗛〉澶у皬
+     */
+    @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/DevBatchVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevBatchVo.java
new file mode 100644
index 0000000..6c8bdc7
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevBatchVo.java
@@ -0,0 +1,65 @@
+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.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 鐢熶骇鎵规瑙嗗浘瀵硅薄 dev_batch
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+@Data
+@ApiModel("鐢熶骇鎵规瑙嗗浘瀵硅薄")
+@ExcelIgnoreUnannotated
+public class DevBatchVo {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+	@ExcelProperty(value = "id")
+	@ApiModelProperty("id")
+	private Long id;
+
+    /**
+     * 鐢熶骇鎵规
+     */
+	@ExcelProperty(value = "鐢熶骇鎵规")
+	@ApiModelProperty("鐢熶骇鎵规")
+	private String batch;
+
+    /**
+     * 涓嬪崟鏃ユ湡
+     */
+	@ExcelProperty(value = "涓嬪崟鏃ユ湡")
+	@ApiModelProperty("涓嬪崟鏃ユ湡")
+	private Date orderDate;
+
+    /**
+     * 鍒拌揣鏃ユ湡
+     */
+	@ExcelProperty(value = "鍒拌揣鏃ユ湡")
+	@ApiModelProperty("鍒拌揣鏃ユ湡")
+	private Date arrivalDate;
+
+    /**
+     * 鎵规璇存槑
+     */
+	@ExcelProperty(value = "鎵规璇存槑")
+	@ApiModelProperty("鎵规璇存槑")
+	private String illustrate;
+
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentCodeVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentCodeVo.java
new file mode 100644
index 0000000..3bcdc66
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentCodeVo.java
@@ -0,0 +1,42 @@
+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;
+
+
+
+/**
+ * 璁惧搴忓垪鍙风淮鎶よ鍥惧璞� dev_equipment_code
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+@Data
+@ApiModel("璁惧搴忓垪鍙风淮鎶よ鍥惧璞�")
+@ExcelIgnoreUnannotated
+public class DevEquipmentCodeVo {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * 搴忓垪鍙�
+     */
+	@ExcelProperty(value = "搴忓垪鍙�")
+	@ApiModelProperty("搴忓垪鍙�")
+	private Long id;
+
+    /**
+     * 纭欢璁惧搴忓垪鐮�
+     */
+	@ExcelProperty(value = "纭欢璁惧搴忓垪鐮�")
+	@ApiModelProperty("纭欢璁惧搴忓垪鐮�")
+	private String sequenceCode;
+
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentLogVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentLogVo.java
new file mode 100644
index 0000000..31b4b5e
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentLogVo.java
@@ -0,0 +1,86 @@
+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.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 璁惧鑱旀満鏃ュ織瑙嗗浘瀵硅薄 dev_equipment_log
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+@Data
+@ApiModel("璁惧鑱旀満鏃ュ織瑙嗗浘瀵硅薄")
+@ExcelIgnoreUnannotated
+public class DevEquipmentLogVo {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     */
+	@ExcelProperty(value = "")
+	@ApiModelProperty("")
+	private Long id;
+
+    /**
+     * 鎿嶄綔琛屼负
+     */
+	@ExcelProperty(value = "鎿嶄綔琛屼负")
+	@ApiModelProperty("鎿嶄綔琛屼负")
+	private String operation;
+
+    /**
+     * 鐢ㄦ埛璐﹀彿
+     */
+	@ExcelProperty(value = "鐢ㄦ埛璐﹀彿")
+	@ApiModelProperty("鐢ㄦ埛璐﹀彿")
+	private String userName;
+
+    /**
+     * 鐢ㄦ埛鍚嶇О
+     */
+	@ExcelProperty(value = "鐢ㄦ埛鍚嶇О")
+	@ApiModelProperty("鐢ㄦ埛鍚嶇О")
+	private String nickName;
+
+    /**
+     * ip
+     */
+	@ExcelProperty(value = "ip")
+	@ApiModelProperty("ip")
+	private String ip;
+
+    /**
+     * 鑱旀満鍦扮偣
+     */
+	@ExcelProperty(value = "鑱旀満鍦扮偣")
+	@ApiModelProperty("鑱旀満鍦扮偣")
+	private String loginLocation;
+
+    /**
+     * 
+     */
+	@ExcelProperty(value = "")
+	@ApiModelProperty("")
+	private String status;
+
+    /**
+     * 鑱旀満鏃堕棿
+     */
+	@ExcelProperty(value = "鑱旀満鏃堕棿")
+	@ApiModelProperty("鑱旀満鏃堕棿")
+	private Date loginTime;
+
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentVo.java
new file mode 100644
index 0000000..46f086f
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentVo.java
@@ -0,0 +1,118 @@
+package com.ruoyi.oa.domain.vo;
+
+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;
+
+
+
+/**
+ * 鏅烘帶璁惧瑙嗗浘瀵硅薄 dev_equipment
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+@Data
+@ApiModel("鏅烘帶璁惧瑙嗗浘瀵硅薄")
+@ExcelIgnoreUnannotated
+public class DevEquipmentVo {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+	@ExcelProperty(value = "id")
+	@ApiModelProperty("id")
+	private Long id;
+
+    /**
+     * 搴忓垪鍙�
+     */
+	@ExcelProperty(value = "搴忓垪鍙�")
+	@ApiModelProperty("搴忓垪鍙�")
+	private Long serialNumber;
+
+    /**
+     * 璁惧绫诲瀷
+     */
+    @ExcelProperty(value = "璁惧绫诲瀷", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "DICT101")
+	@ApiModelProperty("璁惧绫诲瀷")
+	private String type;
+
+    /**
+     * 搴忓垪鐮�
+     */
+	@ExcelProperty(value = "搴忓垪鐮�")
+	@ApiModelProperty("搴忓垪鐮�")
+	private String sequenceCode;
+
+    /**
+     * 鐗堟湰
+     */
+	@ExcelProperty(value = "鐗堟湰")
+	@ApiModelProperty("鐗堟湰")
+	private String edition;
+
+    /**
+     * 瀛︽牎id
+     */
+	@ExcelProperty(value = "瀛︽牎id")
+	@ApiModelProperty("瀛︽牎id")
+    @Dict(dictTable = "bs_school", dicCode = "id", dicText = "name")
+	private Long schoolId;
+
+    /**
+     * 涓绘満ID
+     */
+	@ExcelProperty(value = "涓绘満ID")
+	@ApiModelProperty("涓绘満ID")
+	private String hostId;
+
+    /**
+     * 尾缃戠粶ID
+     */
+	@ExcelProperty(value = "尾缃戠粶ID")
+	@ApiModelProperty("尾缃戠粶ID")
+	private String networkId;
+
+    /**
+     * 尾宸ヤ綔棰戞
+     */
+    @ExcelProperty(value = "尾宸ヤ綔棰戞", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "DICT102")
+	@ApiModelProperty("尾宸ヤ綔棰戞")
+	private String frequencyBand;
+
+    /**
+     * 鐢熶骇鎵规
+     */
+	@ExcelProperty(value = "鐢熶骇鎵规")
+	@ApiModelProperty("鐢熶骇鎵规")
+    @Dict(dictTable = "dev_batch", dicCode = "id", dicText = "batch")
+	private Long batchId;
+
+    /**
+     * 鍦ㄧ敤鐘舵��
+     */
+    @ExcelProperty(value = "鍦ㄧ敤鐘舵��", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "DICT104")
+	@ApiModelProperty("鍦ㄧ敤鐘舵��")
+	private String useStatus;
+
+    /**
+     * 澶囨敞
+     */
+	@ExcelProperty(value = "澶囨敞")
+	@ApiModelProperty("澶囨敞")
+	private String remarks;
+
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevPeripheralUnitVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevPeripheralUnitVo.java
new file mode 100644
index 0000000..ea0359f
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevPeripheralUnitVo.java
@@ -0,0 +1,98 @@
+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;
+
+
+
+/**
+ * 澶栬鍗曞厓瑙嗗浘瀵硅薄 dev_peripheral_unit
+ *
+ * @author ruoyi
+ * @date 2021-12-06
+ */
+@Data
+@ApiModel("澶栬鍗曞厓瑙嗗浘瀵硅薄")
+@ExcelIgnoreUnannotated
+public class DevPeripheralUnitVo {
+
+	private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    /**
+     * 澶栬浠g爜
+     */
+	@ExcelProperty(value = "澶栬浠g爜")
+	@ApiModelProperty("澶栬浠g爜")
+	private String code;
+
+    /**
+     * 澶栬鍚嶇О
+     */
+	@ExcelProperty(value = "澶栬鍚嶇О")
+	@ApiModelProperty("澶栬鍚嶇О")
+	private String name;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+	@ExcelProperty(value = "瑙勬牸鍨嬪彿")
+	@ApiModelProperty("瑙勬牸鍨嬪彿")
+	private String model;
+
+    /**
+     * 鐢熶骇鍘傚晢
+     */
+	@ExcelProperty(value = "鐢熶骇鍘傚晢")
+	@ApiModelProperty("鐢熶骇鍘傚晢")
+	private String manufacturer;
+
+    /**
+     * 鍘傚晢浠g爜
+     */
+	@ExcelProperty(value = "鍘傚晢浠g爜")
+	@ApiModelProperty("鍘傚晢浠g爜")
+	private String vendorCode;
+
+    /**
+     * 娉㈢壒鐜�
+     */
+    @ExcelProperty(value = "娉㈢壒鐜�", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "DICT103")
+	@ApiModelProperty("娉㈢壒鐜�")
+	private String baudRate;
+
+    /**
+     * 璇绘暟鎸囦护
+     */
+	@ExcelProperty(value = "璇绘暟鎸囦护")
+	@ApiModelProperty("璇绘暟鎸囦护")
+	private String readInstruction;
+
+    /**
+     * 鍥炴暟闀垮害
+     */
+	@ExcelProperty(value = "鍥炴暟闀垮害")
+	@ApiModelProperty("鍥炴暟闀垮害")
+	private Integer loopLength;
+
+    /**
+     * 鍔熻兘鎻忚堪
+     */
+	@ExcelProperty(value = "鍔熻兘鎻忚堪")
+	@ApiModelProperty("鍔熻兘鎻忚堪")
+	private String description;
+
+    /**
+     * 闄勪欢
+     */
+    private String filePath;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevBatchMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevBatchMapper.java
new file mode 100644
index 0000000..8e6a449
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevBatchMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.DevBatch;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+
+/**
+ * 鐢熶骇鎵规Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+public interface DevBatchMapper extends BaseMapperPlus<DevBatch> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentCodeMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentCodeMapper.java
new file mode 100644
index 0000000..6502cb4
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentCodeMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.DevEquipmentCode;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 璁惧搴忓垪鍙风淮鎶apper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+@Mapper
+public interface DevEquipmentCodeMapper extends BaseMapperPlus<DevEquipmentCode> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentLogMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentLogMapper.java
new file mode 100644
index 0000000..1ebdfb4
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentLogMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.DevEquipmentLog;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+
+/**
+ * 璁惧鑱旀満鏃ュ織Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+public interface DevEquipmentLogMapper extends BaseMapperPlus<DevEquipmentLog> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentMapper.java
new file mode 100644
index 0000000..3f65fca
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.DevEquipment;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+
+/**
+ * 鏅烘帶璁惧Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+public interface DevEquipmentMapper extends BaseMapperPlus<DevEquipment> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevPeripheralUnitMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevPeripheralUnitMapper.java
new file mode 100644
index 0000000..ad0af17
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevPeripheralUnitMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.DevPeripheralUnit;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+
+/**
+ * 澶栬鍗曞厓Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-06
+ */
+public interface DevPeripheralUnitMapper extends BaseMapperPlus<DevPeripheralUnit> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevBatchService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevBatchService.java
new file mode 100644
index 0000000..4151d43
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevBatchService.java
@@ -0,0 +1,56 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.DevBatch;
+import com.ruoyi.oa.domain.vo.DevBatchVo;
+import com.ruoyi.oa.domain.bo.DevBatchBo;
+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 2021-12-05
+ */
+public interface IDevBatchService extends IServicePlus<DevBatch, DevBatchVo> {
+	/**
+	 * 鏌ヨ鍗曚釜
+	 * @return
+	 */
+	DevBatchVo queryById(Long id);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+    TableDataInfo<DevBatchVo> queryPageList(DevBatchBo bo);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+	List<DevBatchVo> queryList(DevBatchBo bo);
+
+	/**
+	 * 鏍规嵁鏂板涓氬姟瀵硅薄鎻掑叆鐢熶骇鎵规
+	 * @param bo 鐢熶骇鎵规鏂板涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean insertByBo(DevBatchBo bo);
+
+	/**
+	 * 鏍规嵁缂栬緫涓氬姟瀵硅薄淇敼鐢熶骇鎵规
+	 * @param bo 鐢熶骇鎵规缂栬緫涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean updateByBo(DevBatchBo 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/IDevEquipmentCodeService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentCodeService.java
new file mode 100644
index 0000000..33f95ff
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentCodeService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.DevEquipmentCode;
+import com.ruoyi.oa.domain.vo.DevEquipmentCodeVo;
+import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
+
+/**
+ * 璁惧搴忓垪鍙风淮鎶ervice鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+public interface IDevEquipmentCodeService extends IServicePlus<DevEquipmentCode, DevEquipmentCodeVo> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentLogService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentLogService.java
new file mode 100644
index 0000000..2e7ec8e
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentLogService.java
@@ -0,0 +1,56 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.DevEquipmentLog;
+import com.ruoyi.oa.domain.vo.DevEquipmentLogVo;
+import com.ruoyi.oa.domain.bo.DevEquipmentLogBo;
+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 2021-12-08
+ */
+public interface IDevEquipmentLogService extends IServicePlus<DevEquipmentLog, DevEquipmentLogVo> {
+	/**
+	 * 鏌ヨ鍗曚釜
+	 * @return
+	 */
+	DevEquipmentLogVo queryById(Long id);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+    TableDataInfo<DevEquipmentLogVo> queryPageList(DevEquipmentLogBo bo);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+	List<DevEquipmentLogVo> queryList(DevEquipmentLogBo bo);
+
+	/**
+	 * 鏍规嵁鏂板涓氬姟瀵硅薄鎻掑叆璁惧鑱旀満鏃ュ織
+	 * @param bo 璁惧鑱旀満鏃ュ織鏂板涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean insertByBo(DevEquipmentLogBo bo);
+
+	/**
+	 * 鏍规嵁缂栬緫涓氬姟瀵硅薄淇敼璁惧鑱旀満鏃ュ織
+	 * @param bo 璁惧鑱旀満鏃ュ織缂栬緫涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean updateByBo(DevEquipmentLogBo 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/IDevEquipmentService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentService.java
new file mode 100644
index 0000000..e865e11
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentService.java
@@ -0,0 +1,60 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.DevEquipment;
+import com.ruoyi.oa.domain.vo.DevEquipmentVo;
+import com.ruoyi.oa.domain.bo.DevEquipmentBo;
+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 2021-12-05
+ */
+public interface IDevEquipmentService extends IServicePlus<DevEquipment, DevEquipmentVo> {
+	/**
+	 * 鏌ヨ鍗曚釜
+	 * @return
+	 */
+	DevEquipmentVo queryById(Long id);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+    TableDataInfo<DevEquipmentVo> queryPageList(DevEquipmentBo bo);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+	List<DevEquipmentVo> queryList(DevEquipmentBo bo);
+
+	/**
+	 * 鏍规嵁鏂板涓氬姟瀵硅薄鎻掑叆鏅烘帶璁惧
+	 * @param bo 鏅烘帶璁惧鏂板涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean insertByBo(DevEquipmentBo bo);
+
+	/**
+	 * 鏍规嵁缂栬緫涓氬姟瀵硅薄淇敼鏅烘帶璁惧
+	 * @param bo 鏅烘帶璁惧缂栬緫涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean updateByBo(DevEquipmentBo bo);
+
+	/**
+	 * 鏍¢獙骞跺垹闄ゆ暟鎹�
+	 * @param ids 涓婚敭闆嗗悎
+	 * @param isValid 鏄惁鏍¢獙,true-鍒犻櫎鍓嶆牎楠�,false-涓嶆牎楠�
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    DevEquipment externalAdd(DevEquipmentBo bo);
+
+    DevEquipment equipmentEdit(DevEquipmentBo bo);
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevPeripheralUnitService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevPeripheralUnitService.java
new file mode 100644
index 0000000..4d75b2b
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevPeripheralUnitService.java
@@ -0,0 +1,56 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.DevPeripheralUnit;
+import com.ruoyi.oa.domain.vo.DevPeripheralUnitVo;
+import com.ruoyi.oa.domain.bo.DevPeripheralUnitBo;
+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 2021-12-06
+ */
+public interface IDevPeripheralUnitService extends IServicePlus<DevPeripheralUnit, DevPeripheralUnitVo> {
+	/**
+	 * 鏌ヨ鍗曚釜
+	 * @return
+	 */
+	DevPeripheralUnitVo queryById(Long id);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+    TableDataInfo<DevPeripheralUnitVo> queryPageList(DevPeripheralUnitBo bo);
+
+	/**
+	 * 鏌ヨ鍒楄〃
+	 */
+	List<DevPeripheralUnitVo> queryList(DevPeripheralUnitBo bo);
+
+	/**
+	 * 鏍规嵁鏂板涓氬姟瀵硅薄鎻掑叆澶栬鍗曞厓
+	 * @param bo 澶栬鍗曞厓鏂板涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean insertByBo(DevPeripheralUnitBo bo);
+
+	/**
+	 * 鏍规嵁缂栬緫涓氬姟瀵硅薄淇敼澶栬鍗曞厓
+	 * @param bo 澶栬鍗曞厓缂栬緫涓氬姟瀵硅薄
+	 * @return
+	 */
+	Boolean updateByBo(DevPeripheralUnitBo 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/DevBatchServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevBatchServiceImpl.java
new file mode 100644
index 0000000..6560869
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevBatchServiceImpl.java
@@ -0,0 +1,91 @@
+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.DevBatchBo;
+import com.ruoyi.oa.domain.vo.DevBatchVo;
+import com.ruoyi.oa.domain.DevBatch;
+import com.ruoyi.oa.mapper.DevBatchMapper;
+import com.ruoyi.oa.service.IDevBatchService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 鐢熶骇鎵规Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+@Service
+public class DevBatchServiceImpl extends ServicePlusImpl<DevBatchMapper, DevBatch, DevBatchVo> implements IDevBatchService {
+
+    @Override
+    public DevBatchVo queryById(Long id){
+        return getVoById(id);
+    }
+
+    @Override
+    public TableDataInfo<DevBatchVo> queryPageList(DevBatchBo bo) {
+        PagePlus<DevBatch, DevBatchVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo));
+        return PageUtils.buildDataInfo(result);
+    }
+
+    @Override
+    public List<DevBatchVo> queryList(DevBatchBo bo) {
+        return listVo(buildQueryWrapper(bo));
+    }
+
+    private LambdaQueryWrapper<DevBatch> buildQueryWrapper(DevBatchBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<DevBatch> lqw = Wrappers.lambdaQuery();
+        lqw.like(StringUtils.isNotBlank(bo.getBatch()), DevBatch::getBatch, bo.getBatch());
+        lqw.eq(bo.getOrderDate() != null, DevBatch::getOrderDate, bo.getOrderDate());
+        lqw.eq(bo.getArrivalDate() != null, DevBatch::getArrivalDate, bo.getArrivalDate());
+        lqw.eq(StringUtils.isNotBlank(bo.getIllustrate()), DevBatch::getIllustrate, bo.getIllustrate());
+        return lqw;
+    }
+
+    @Override
+    public Boolean insertByBo(DevBatchBo bo) {
+        DevBatch add = BeanUtil.toBean(bo, DevBatch.class);
+        validEntityBeforeSave(add);
+        boolean flag = save(add);
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    @Override
+    public Boolean updateByBo(DevBatchBo bo) {
+        DevBatch update = BeanUtil.toBean(bo, DevBatch.class);
+        validEntityBeforeSave(update);
+        return updateById(update);
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     *
+     * @param entity 瀹炰綋绫绘暟鎹�
+     */
+    private void validEntityBeforeSave(DevBatch 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/DevEquipmentCodeServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentCodeServiceImpl.java
new file mode 100644
index 0000000..64c00bc
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentCodeServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.oa.service.impl;
+
+import org.springframework.stereotype.Service;
+import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import com.ruoyi.oa.domain.vo.DevEquipmentCodeVo;
+import com.ruoyi.oa.domain.DevEquipmentCode;
+import com.ruoyi.oa.mapper.DevEquipmentCodeMapper;
+import com.ruoyi.oa.service.IDevEquipmentCodeService;
+
+/**
+ * 璁惧搴忓垪鍙风淮鎶ervice涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+@Service
+public class DevEquipmentCodeServiceImpl extends ServicePlusImpl<DevEquipmentCodeMapper, DevEquipmentCode, DevEquipmentCodeVo> implements IDevEquipmentCodeService {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentLogServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentLogServiceImpl.java
new file mode 100644
index 0000000..05dd2c6
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentLogServiceImpl.java
@@ -0,0 +1,107 @@
+package com.ruoyi.oa.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.ruoyi.common.core.domain.dto.EquipmentLogDTO;
+import com.ruoyi.common.core.service.EquipmentService;
+import com.ruoyi.common.utils.DateUtils;
+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 com.ruoyi.common.utils.ip.AddressUtils;
+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.DevEquipmentLogBo;
+import com.ruoyi.oa.domain.vo.DevEquipmentLogVo;
+import com.ruoyi.oa.domain.DevEquipmentLog;
+import com.ruoyi.oa.mapper.DevEquipmentLogMapper;
+import com.ruoyi.oa.service.IDevEquipmentLogService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 璁惧鑱旀満鏃ュ織Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2021-12-08
+ */
+@Service
+public class DevEquipmentLogServiceImpl extends ServicePlusImpl<DevEquipmentLogMapper, DevEquipmentLog, DevEquipmentLogVo> implements IDevEquipmentLogService, EquipmentService {
+
+    @Override
+    public DevEquipmentLogVo queryById(Long id){
+        return getVoById(id);
+    }
+
+    @Override
+    public TableDataInfo<DevEquipmentLogVo> queryPageList(DevEquipmentLogBo bo) {
+        PagePlus<DevEquipmentLog, DevEquipmentLogVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo));
+        return PageUtils.buildDataInfo(result);
+    }
+
+    @Override
+    public List<DevEquipmentLogVo> queryList(DevEquipmentLogBo bo) {
+        return listVo(buildQueryWrapper(bo));
+    }
+
+    private LambdaQueryWrapper<DevEquipmentLog> buildQueryWrapper(DevEquipmentLogBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<DevEquipmentLog> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StringUtils.isNotBlank(bo.getOperation()), DevEquipmentLog::getOperation, bo.getOperation());
+        lqw.like(StringUtils.isNotBlank(bo.getUserName()), DevEquipmentLog::getUserName, bo.getUserName());
+        lqw.like(StringUtils.isNotBlank(bo.getNickName()), DevEquipmentLog::getNickName, bo.getNickName());
+        lqw.eq(StringUtils.isNotBlank(bo.getIp()), DevEquipmentLog::getIp, bo.getIp());
+        lqw.eq(StringUtils.isNotBlank(bo.getLoginLocation()), DevEquipmentLog::getLoginLocation, bo.getLoginLocation());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), DevEquipmentLog::getStatus, bo.getStatus());
+        lqw.eq(bo.getLoginTime() != null, DevEquipmentLog::getLoginTime, bo.getLoginTime());
+        return lqw;
+    }
+
+    @Override
+    public Boolean insertByBo(DevEquipmentLogBo bo) {
+        DevEquipmentLog add = BeanUtil.toBean(bo, DevEquipmentLog.class);
+        validEntityBeforeSave(add);
+        boolean flag = save(add);
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    @Override
+    public Boolean updateByBo(DevEquipmentLogBo bo) {
+        DevEquipmentLog update = BeanUtil.toBean(bo, DevEquipmentLog.class);
+        validEntityBeforeSave(update);
+        return updateById(update);
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     *
+     * @param entity 瀹炰綋绫绘暟鎹�
+     */
+    private void validEntityBeforeSave(DevEquipmentLog entity){
+        //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
+        }
+        return removeByIds(ids);
+    }
+
+    @Override
+    public void recordOper(EquipmentLogDTO dto){
+        DevEquipmentLog po = BeanUtil.toBean(dto, DevEquipmentLog.class);
+        // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣
+        po.setLoginLocation(AddressUtils.getRealAddressByIP(po.getIp()));
+        po.setLoginTime(DateUtils.getNowDate());
+        baseMapper.insert(po);
+    }
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentServiceImpl.java
new file mode 100644
index 0000000..4bfe12a
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentServiceImpl.java
@@ -0,0 +1,167 @@
+package com.ruoyi.oa.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.http.HttpStatus;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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 com.ruoyi.oa.domain.DevEquipmentCode;
+import com.ruoyi.oa.mapper.DevEquipmentCodeMapper;
+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.DevEquipmentBo;
+import com.ruoyi.oa.domain.vo.DevEquipmentVo;
+import com.ruoyi.oa.domain.DevEquipment;
+import com.ruoyi.oa.mapper.DevEquipmentMapper;
+import com.ruoyi.oa.service.IDevEquipmentService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 鏅烘帶璁惧Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2021-12-05
+ */
+@Service
+public class DevEquipmentServiceImpl extends ServicePlusImpl<DevEquipmentMapper, DevEquipment, DevEquipmentVo> implements IDevEquipmentService {
+
+    @Autowired
+    private DevEquipmentCodeMapper devEquipmentCodeMapper;
+
+    @Override
+    public DevEquipmentVo queryById(Long id) {
+        return getVoById(id);
+    }
+
+    @Override
+    public TableDataInfo<DevEquipmentVo> queryPageList(DevEquipmentBo bo) {
+        PagePlus<DevEquipment, DevEquipmentVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo));
+        return PageUtils.buildDataInfo(result);
+    }
+
+    @Override
+    public List<DevEquipmentVo> queryList(DevEquipmentBo bo) {
+        return listVo(buildQueryWrapper(bo));
+    }
+
+    private LambdaQueryWrapper<DevEquipment> buildQueryWrapper(DevEquipmentBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<DevEquipment> lqw = Wrappers.lambdaQuery();
+        lqw.like(bo.getSerialNumber() != null, DevEquipment::getSerialNumber, bo.getSerialNumber());
+        lqw.eq(bo.getType() != null, DevEquipment::getType, bo.getType());
+        lqw.like(bo.getSequenceCode() != null, DevEquipment::getSequenceCode, bo.getSequenceCode());
+        lqw.like(bo.getEdition() != null, DevEquipment::getEdition, bo.getEdition());
+        lqw.eq(bo.getSchoolId() != null, DevEquipment::getSchoolId, bo.getSchoolId());
+        lqw.like(bo.getHostId() != null, DevEquipment::getHostId, bo.getHostId());
+        lqw.like(bo.getNetworkId() != null, DevEquipment::getNetworkId, bo.getNetworkId());
+        lqw.eq(bo.getFrequencyBand() != null, DevEquipment::getFrequencyBand, bo.getFrequencyBand());
+        lqw.eq(bo.getUseStatus() != null, DevEquipment::getUseStatus, bo.getUseStatus());
+        lqw.orderByDesc(DevEquipment::getUpdateTime);
+        return lqw;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean insertByBo(DevEquipmentBo bo) {
+        List<DevEquipment> list = baseMapper.selectList(new QueryWrapper<DevEquipment>().lambda()
+            .eq(DevEquipment::getSequenceCode, bo.getSequenceCode()));
+        if (list.size() > 0) {
+            throw new ServiceException("纭欢搴忓垪鐮侀噸澶�", HttpStatus.HTTP_PARTIAL);
+        }
+        DevEquipment add = BeanUtil.toBean(bo, DevEquipment.class);
+        validEntityBeforeSave(add);
+        boolean flag = save(add);
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    @Override
+    public Boolean updateByBo(DevEquipmentBo bo) {
+        List<DevEquipment> list = baseMapper.selectList(new QueryWrapper<DevEquipment>().lambda()
+            .eq(DevEquipment::getSequenceCode, bo.getSequenceCode())
+            .ne(DevEquipment::getId, bo.getId()));
+        if (list.size() > 0) {
+            throw new ServiceException("纭欢搴忓垪鐮侀噸澶�", HttpStatus.HTTP_PARTIAL);
+        }
+        DevEquipment update = BeanUtil.toBean(bo, DevEquipment.class);
+        validEntityBeforeSave(update);
+        return updateById(update);
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     *
+     * @param entity 瀹炰綋绫绘暟鎹�
+     */
+    private void validEntityBeforeSave(DevEquipment entity) {
+        //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if (isValid) {
+            //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
+        }
+        return removeByIds(ids);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public DevEquipment externalAdd(DevEquipmentBo bo) {
+        DevEquipment po = baseMapper.selectOne(new QueryWrapper<DevEquipment>().lambda()
+            .eq(DevEquipment::getSequenceCode, bo.getSequenceCode()));
+        // 璁惧瀛樺湪锛岀洿鎺ヨ繑鍥炶澶囦俊鎭�
+        if (StringUtils.isEmpty(po)) {
+            return po;
+        }
+        // 璁惧涓嶅瓨鍦ㄥ垯鏂板缓
+        else {
+            // 鍏堟牴鎹簭鍒楃爜鐢熸垚搴忓垪鍙�
+            DevEquipmentCode c = new DevEquipmentCode();
+            c.setSequenceCode(bo.getSequenceCode());
+            devEquipmentCodeMapper.insert(c);
+            // 娣诲姞璁惧
+            DevEquipment add = BeanUtil.toBean(bo, DevEquipment.class);
+            add.setSerialNumber(c.getId());
+            baseMapper.insert(add);
+            return add;
+        }
+    }
+
+    @Override
+    public DevEquipment equipmentEdit(DevEquipmentBo bo) {
+        DevEquipment po = baseMapper.selectById(bo.getId());
+        if (null != bo.getSchoolId()) {
+            po.setSchoolId(bo.getSchoolId());
+        }
+        if (StringUtils.isEmpty(bo.getHostId())) {
+            po.setHostId(bo.getHostId());
+        }
+        if (StringUtils.isEmpty(bo.getNetworkId())) {
+            po.setNetworkId(bo.getNetworkId());
+        }
+        if (StringUtils.isEmpty(bo.getFrequencyBand())) {
+            po.setFrequencyBand(bo.getFrequencyBand());
+        }
+        if (null != bo.getBatchId()) {
+            po.setBatchId(bo.getBatchId());
+        }
+        if (StringUtils.isEmpty(bo.getRemarks())) {
+            po.setRemarks(bo.getRemarks());
+        }
+        baseMapper.updateById(po);
+        return po;
+    }
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevPeripheralUnitServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevPeripheralUnitServiceImpl.java
new file mode 100644
index 0000000..ca1ac90
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevPeripheralUnitServiceImpl.java
@@ -0,0 +1,103 @@
+package com.ruoyi.oa.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.http.HttpStatus;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.DevPeripheralUnitBo;
+import com.ruoyi.oa.domain.vo.DevPeripheralUnitVo;
+import com.ruoyi.oa.domain.DevPeripheralUnit;
+import com.ruoyi.oa.mapper.DevPeripheralUnitMapper;
+import com.ruoyi.oa.service.IDevPeripheralUnitService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 澶栬鍗曞厓Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2021-12-06
+ */
+@Service
+public class DevPeripheralUnitServiceImpl extends ServicePlusImpl<DevPeripheralUnitMapper, DevPeripheralUnit, DevPeripheralUnitVo> implements IDevPeripheralUnitService {
+
+    @Override
+    public DevPeripheralUnitVo queryById(Long id){
+        return getVoById(id);
+    }
+
+    @Override
+    public TableDataInfo<DevPeripheralUnitVo> queryPageList(DevPeripheralUnitBo bo) {
+        PagePlus<DevPeripheralUnit, DevPeripheralUnitVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo));
+        return PageUtils.buildDataInfo(result);
+    }
+
+    @Override
+    public List<DevPeripheralUnitVo> queryList(DevPeripheralUnitBo bo) {
+        return listVo(buildQueryWrapper(bo));
+    }
+
+    private LambdaQueryWrapper<DevPeripheralUnit> buildQueryWrapper(DevPeripheralUnitBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<DevPeripheralUnit> lqw = Wrappers.lambdaQuery();
+        lqw.like(StringUtils.isNotBlank(bo.getCode()), DevPeripheralUnit::getCode, bo.getCode());
+        lqw.like(StringUtils.isNotBlank(bo.getName()), DevPeripheralUnit::getName, bo.getName());
+        lqw.like(StringUtils.isNotBlank(bo.getModel()), DevPeripheralUnit::getModel, bo.getModel());
+        lqw.like(StringUtils.isNotBlank(bo.getManufacturer()), DevPeripheralUnit::getManufacturer, bo.getManufacturer());
+        lqw.like(StringUtils.isNotBlank(bo.getVendorCode()), DevPeripheralUnit::getVendorCode, bo.getVendorCode());
+        lqw.eq(StringUtils.isNotBlank(bo.getBaudRate()), DevPeripheralUnit::getBaudRate, bo.getBaudRate());
+        return lqw;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean insertByBo(DevPeripheralUnitBo bo) {
+        List<DevPeripheralUnit> list = baseMapper.selectList(new QueryWrapper<DevPeripheralUnit>().lambda()
+            .eq(DevPeripheralUnit::getVendorCode, bo.getVendorCode()));
+        if (list.size() > 0) {
+            throw new ServiceException("鍘傚晢浠g爜閲嶅", HttpStatus.HTTP_PARTIAL);
+        }
+        DevPeripheralUnit add = BeanUtil.toBean(bo, DevPeripheralUnit.class);
+        validEntityBeforeSave(add);
+        boolean flag = save(add);
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    @Override
+    public Boolean updateByBo(DevPeripheralUnitBo bo) {
+        DevPeripheralUnit update = BeanUtil.toBean(bo, DevPeripheralUnit.class);
+        validEntityBeforeSave(update);
+        return updateById(update);
+    }
+
+    /**
+     * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+     *
+     * @param entity 瀹炰綋绫绘暟鎹�
+     */
+    private void validEntityBeforeSave(DevPeripheralUnit 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/DevBatchMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/DevBatchMapper.xml
new file mode 100644
index 0000000..a9cb60c
--- /dev/null
+++ b/ruoyi-oa/src/main/resources/mapper/oa/DevBatchMapper.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.DevBatchMapper">
+
+    <resultMap type="com.ruoyi.oa.domain.DevBatch" id="DevBatchResult">
+        <result property="id" column="id"/>
+        <result property="batch" column="batch"/>
+        <result property="orderDate" column="order_date"/>
+        <result property="arrivalDate" column="arrival_date"/>
+        <result property="illustrate" column="illustrate"/>
+        <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"/>
+        <result property="version" column="version"/>
+    </resultMap>
+
+
+</mapper>
diff --git a/ruoyi-oa/src/main/resources/mapper/oa/DevEquipmentMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/DevEquipmentMapper.xml
new file mode 100644
index 0000000..91c857f
--- /dev/null
+++ b/ruoyi-oa/src/main/resources/mapper/oa/DevEquipmentMapper.xml
@@ -0,0 +1,29 @@
+<?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.DevEquipmentMapper">
+
+    <resultMap type="com.ruoyi.oa.domain.DevEquipment" id="DevEquipmentResult">
+        <result property="id" column="id"/>
+        <result property="serialNumber" column="serial_number"/>
+        <result property="type" column="type"/>
+        <result property="sequenceCode" column="sequence_code"/>
+        <result property="edition" column="edition"/>
+        <result property="schoolId" column="school_id"/>
+        <result property="hostId" column="host_id"/>
+        <result property="networkId" column="network_id"/>
+        <result property="frequencyBand" column="frequency_band"/>
+        <result property="batchId" column="batch_id"/>
+        <result property="useStatus" column="use_status"/>
+        <result property="remarks" column="remarks"/>
+        <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"/>
+        <result property="version" column="version"/>
+    </resultMap>
+
+
+</mapper>
diff --git a/ruoyi-oa/src/main/resources/mapper/oa/DevPeripheralUnitMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/DevPeripheralUnitMapper.xml
new file mode 100644
index 0000000..3591c3d
--- /dev/null
+++ b/ruoyi-oa/src/main/resources/mapper/oa/DevPeripheralUnitMapper.xml
@@ -0,0 +1,28 @@
+<?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.DevPeripheralUnitMapper">
+
+    <resultMap type="com.ruoyi.oa.domain.DevPeripheralUnit" id="DevPeripheralUnitResult">
+        <result property="id" column="id"/>
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="model" column="model"/>
+        <result property="manufacturer" column="manufacturer"/>
+        <result property="vendorCode" column="vendor_code"/>
+        <result property="baudRate" column="baud_rate"/>
+        <result property="readInstruction" column="read_instruction"/>
+        <result property="loopLength" column="loop_length"/>
+        <result property="description" column="description"/>
+        <result property="filePath" column="file_path"/>
+        <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"/>
+        <result property="version" column="version"/>
+    </resultMap>
+
+
+</mapper>
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index a901e0a..e0fea04 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -1,5 +1,7 @@
 package com.ruoyi.system.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
@@ -212,4 +214,6 @@
      * @return 缁撴灉
      */
     String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
+
+    Page<SysUser> pageList(Page<SysUser> page, Long deptId);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index 995bd2d..e8686c1 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -2,7 +2,9 @@
 
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.http.HttpStatus;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
@@ -175,7 +177,11 @@
         SysDept info = getById(dept.getParentId());
         // 濡傛灉鐖惰妭鐐逛笉涓烘甯哥姸鎬�,鍒欎笉鍏佽鏂板瀛愯妭鐐�
         if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) {
-            throw new ServiceException("閮ㄩ棬鍋滅敤锛屼笉鍏佽鏂板");
+            throw new ServiceException("鏈烘瀯鍋滅敤锛屼笉鍏佽鏂板");
+        }
+        List<SysDept> list = baseMapper.selectList(new QueryWrapper<SysDept>().lambda().eq(SysDept::getCode, dept.getCode()));
+        if (list.size() > 0) {
+            throw new ServiceException("鏈烘瀯缂栧彿閲嶅", HttpStatus.HTTP_PARTIAL);
         }
         dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
         return baseMapper.insert(dept);
@@ -189,6 +195,12 @@
      */
     @Override
     public int updateDept(SysDept dept) {
+        List<SysDept> list = baseMapper.selectList(new QueryWrapper<SysDept>().lambda()
+            .eq(SysDept::getCode, dept.getCode())
+            .ne(SysDept::getDeptId, dept.getDeptId()));
+        if (list.size() > 0) {
+            throw new ServiceException("鏈烘瀯缂栧彿閲嶅", HttpStatus.HTTP_PARTIAL);
+        }
         SysDept newParentDept = getById(dept.getParentId());
         SysDept oldDept = getById(dept.getDeptId());
         if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 86f4642..be86f1f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -1,7 +1,9 @@
 package com.ruoyi.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysRole;
@@ -516,4 +518,9 @@
         }
         return successMsg.toString();
     }
+
+    @Override
+    public Page<SysUser> pageList(Page<SysUser> page, Long deptId) {
+        return baseMapper.selectPage(page, new QueryWrapper<SysUser>().eq("dept_id", deptId));
+    }
 }
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index 889982a..0908a15 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -11,6 +11,7 @@
         <result property="deptName" column="dept_name"/>
         <result property="orderNum" column="order_num"/>
         <result property="leader" column="leader"/>
+        <result property="leaderAssistant" column="leader_assistant"/>
         <result property="phone" column="phone"/>
         <result property="email" column="email"/>
         <result property="status" column="status"/>
@@ -23,7 +24,10 @@
     </resultMap>
 
     <sql id="selectDeptVo">
-        select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time
+        select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.leader_assistant
+                        , d.code, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.remarks,
+            (select u.nick_name from sys_user u where u.user_id = d.leader) as leaderName,
+            (select u.nick_name from sys_user u where u.user_id = d.leader_assistant) as leaderAssistantName
         from sys_dept d
     </sql>
 
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index 5d9a185..9f4ead6 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -23,6 +23,9 @@
         <result property="updateBy" column="update_by"/>
         <result property="updateTime" column="update_time"/>
         <result property="remark" column="remark"/>
+        <result property="entryTime" column="entry_time"/>
+        <result property="photo" column="photo"/>
+        <result property="certificateNo" column="certificate_no"/>
         <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/>
         <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
     </resultMap>
@@ -62,6 +65,9 @@
                u.create_by,
                u.create_time,
                u.remark,
+               u.entry_time,
+               u.photo,
+               u.certificate_no,
                d.dept_id,
                d.parent_id,
                d.dept_name,

--
Gitblit v1.9.1