唐耀东
2021-12-09 eeeddf0836a5a5aa03a3342d34318c7202313e93
提交代码
12个文件已修改
44个文件已添加
3141 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/ExternaController.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevBatchController.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentCodeController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentController.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentLogController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevPeripheralUnitController.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-prod.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/EquipmentLogDTO.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/service/EquipmentService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/enums/EquipmentLog.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/enums/LogType.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/enums/OaEnums.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevBatch.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipment.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentCode.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentLog.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevPeripheralUnit.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevBatchBo.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentBo.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentCodeBo.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentLogBo.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevPeripheralUnitBo.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevBatchVo.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentCodeVo.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentLogVo.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentVo.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevPeripheralUnitVo.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevBatchMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentCodeMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentLogMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevPeripheralUnitMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevBatchService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentCodeService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentLogService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentService.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevPeripheralUnitService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevBatchServiceImpl.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentCodeServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentLogServiceImpl.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentServiceImpl.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevPeripheralUnitServiceImpl.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/resources/mapper/oa/DevBatchMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/resources/mapper/oa/DevEquipmentMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-oa/src/main/resources/mapper/oa/DevPeripheralUnitMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/ExternaController.java
New file
@@ -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));
    }
}
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("导出学校列表")
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevBatchController.java
New file
@@ -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);
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentCodeController.java
New file
@@ -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;
/**
 * 设备序列号维护Controller
 *
 * @author ruoyi
 * @date 2021-12-08
 */
@Validated
@Api(value = "设备序列号维护控制器", tags = {"设备序列号维护管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/oa/equipmentCode")
public class DevEquipmentCodeController extends BaseController {
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentController.java
New file
@@ -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);
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevEquipmentLogController.java
New file
@@ -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);
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/DevPeripheralUnitController.java
New file
@@ -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);
    }
}
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)));
    }
}
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
    # 是否开启ssl
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;
}
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/EquipmentLogDTO.java
New file
@@ -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;
}
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;
    /**
     * 负责人
     * 主负责人
     */
    @ApiModelProperty(value = "负责人")
    private String leader;
    @ApiModelProperty(value = "主负责人")
    private Long leader;
    @ApiModelProperty(value = "主负责人姓名")
    @TableField(exist = false)
    private String leaderName;
    @ApiModelProperty(value = "副负责人姓名")
    @TableField(exist = false)
    private String leaderAssistantName;
    /**
     * 副负责人
     */
    @ApiModelProperty(value = "副负责人")
    private Long leaderAssistant;
    /**
     * 机构职能
     */
    @ApiModelProperty(value = "机构职能")
    private String remarks;
    /**
     * 联系电话
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;
    /**
     * 部门对象
     */
ruoyi-common/src/main/java/com/ruoyi/common/core/service/EquipmentService.java
New file
@@ -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);
}
ruoyi-common/src/main/java/com/ruoyi/common/enums/EquipmentLog.java
New file
@@ -0,0 +1,43 @@
package com.ruoyi.common.enums;
/**
 * 操作行为
 *
 * @author ruoyi
 */
public enum EquipmentLog {
    /**
     * 登录
     */
    LOGIN,
    /**
     * 加载
     */
    LOAD,
    /**
     * 校验
     */
    CHECK,
    /**
     * 写入
     */
    WRITE,
    /**
     * 提交备注
     */
    SUBMIT_COMMENT,
    /**
     * 复位
     */
    RESET,
    /**
     * 推出
     */
    SIGN_OUT
}
ruoyi-common/src/main/java/com/ruoyi/common/enums/LogType.java
New file
@@ -0,0 +1,18 @@
package com.ruoyi.common.enums;
/**
 * 日志类型
 *
 * @author ruoyi
 */
public enum LogType {
    /**
     * 系统日志
     */
    SYS_LOG,
    /**
     * 设备日志
     */
    EQUIPMENT_LOG,
}
ruoyi-common/src/main/java/com/ruoyi/common/enums/OaEnums.java
New file
@@ -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;
        }
    }
}
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;
    }
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevBatch.java
New file
@@ -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;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipment.java
New file
@@ -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;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentCode.java
New file
@@ -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;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevEquipmentLog.java
New file
@@ -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;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/DevPeripheralUnit.java
New file
@@ -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;
    /**
     * 外设代码
     */
    private String code;
    /**
     * 外设名称
     */
    private String name;
    /**
     * 规格型号
     */
    private String model;
    /**
     * 生产厂商
     */
    private String manufacturer;
    /**
     * 厂商代码
     */
    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;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevBatchBo.java
New file
@@ -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;
    /**
     * 排序的方向desc或者asc
     */
    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
    private String isAsc;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentBo.java
New file
@@ -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;
    /**
     * 排序的方向desc或者asc
     */
    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
    private String isAsc;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentCodeBo.java
New file
@@ -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;
    /**
     * 排序的方向desc或者asc
     */
    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
    private String isAsc;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevEquipmentLogBo.java
New file
@@ -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;
    /**
     * 排序的方向desc或者asc
     */
    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
    private String isAsc;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/DevPeripheralUnitBo.java
New file
@@ -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;
    /**
     * 外设代码
     */
    @ApiModelProperty(value = "外设代码", required = true)
    @NotBlank(message = "外设代码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String code;
    /**
     * 外设名称
     */
    @ApiModelProperty(value = "外设名称", required = true)
    @NotBlank(message = "外设名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String name;
    /**
     * 规格型号
     */
    @ApiModelProperty(value = "规格型号", required = true)
    @NotBlank(message = "规格型号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String model;
    /**
     * 生产厂商
     */
    @ApiModelProperty(value = "生产厂商", required = true)
    @NotBlank(message = "生产厂商不能为空", groups = { AddGroup.class, EditGroup.class })
    private String manufacturer;
    /**
     * 厂商代码
     */
    @ApiModelProperty(value = "厂商代码", required = true)
    @NotBlank(message = "厂商代码不能为空", 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;
    /**
     * 排序的方向desc或者asc
     */
    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
    private String isAsc;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevBatchVo.java
New file
@@ -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;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentCodeVo.java
New file
@@ -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;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentLogVo.java
New file
@@ -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;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevEquipmentVo.java
New file
@@ -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;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DevPeripheralUnitVo.java
New file
@@ -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;
    /**
     * 外设代码
     */
    @ExcelProperty(value = "外设代码")
    @ApiModelProperty("外设代码")
    private String code;
    /**
     * 外设名称
     */
    @ExcelProperty(value = "外设名称")
    @ApiModelProperty("外设名称")
    private String name;
    /**
     * 规格型号
     */
    @ExcelProperty(value = "规格型号")
    @ApiModelProperty("规格型号")
    private String model;
    /**
     * 生产厂商
     */
    @ExcelProperty(value = "生产厂商")
    @ApiModelProperty("生产厂商")
    private String manufacturer;
    /**
     * 厂商代码
     */
    @ExcelProperty(value = "厂商代码")
    @ApiModelProperty("厂商代码")
    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;
}
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevBatchMapper.java
New file
@@ -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> {
}
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentCodeMapper.java
New file
@@ -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;
/**
 * 设备序列号维护Mapper接口
 *
 * @author ruoyi
 * @date 2021-12-08
 */
@Mapper
public interface DevEquipmentCodeMapper extends BaseMapperPlus<DevEquipmentCode> {
}
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentLogMapper.java
New file
@@ -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> {
}
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevEquipmentMapper.java
New file
@@ -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> {
}
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/DevPeripheralUnitMapper.java
New file
@@ -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> {
}
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevBatchService.java
New file
@@ -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);
}
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentCodeService.java
New file
@@ -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;
/**
 * 设备序列号维护Service接口
 *
 * @author ruoyi
 * @date 2021-12-08
 */
public interface IDevEquipmentCodeService extends IServicePlus<DevEquipmentCode, DevEquipmentCodeVo> {
}
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentLogService.java
New file
@@ -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);
}
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevEquipmentService.java
New file
@@ -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);
}
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IDevPeripheralUnitService.java
New file
@@ -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);
}
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevBatchServiceImpl.java
New file
@@ -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);
    }
}
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentCodeServiceImpl.java
New file
@@ -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;
/**
 * 设备序列号维护Service业务层处理
 *
 * @author ruoyi
 * @date 2021-12-08
 */
@Service
public class DevEquipmentCodeServiceImpl extends ServicePlusImpl<DevEquipmentCodeMapper, DevEquipmentCode, DevEquipmentCodeVo> implements IDevEquipmentCodeService {
}
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentLogServiceImpl.java
New file
@@ -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);
    }
}
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevEquipmentServiceImpl.java
New file
@@ -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;
    }
}
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/DevPeripheralUnitServiceImpl.java
New file
@@ -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("厂商代码重复", 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);
    }
}
ruoyi-oa/src/main/resources/mapper/oa/DevBatchMapper.xml
New file
@@ -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>
ruoyi-oa/src/main/resources/mapper/oa/DevEquipmentMapper.xml
New file
@@ -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>
ruoyi-oa/src/main/resources/mapper/oa/DevPeripheralUnitMapper.xml
New file
@@ -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>
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);
}
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)) {
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));
    }
}
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>
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,