ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SgAiController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SgAi.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SgAiBo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SgAiVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SgAiMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISgAiService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SgAiServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-oa/src/main/resources/mapper/oa/SgAiMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SgAiController.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 com.ruoyi.common.annotation.Dict; 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.SgAiVo; import com.ruoyi.oa.domain.bo.SgAiBo; import com.ruoyi.oa.service.ISgAiService; import com.ruoyi.common.core.page.TableDataInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiOperation; /** * AI设备Controller * * @author ruoyi * @date 2022-05-12 */ @Validated @Api(value = "AI设备控制器", tags = {"AI设备管理"}) @RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/oa/ai") public class SgAiController extends BaseController { private final ISgAiService iSgAiService; /** * 查询AI设备列表 */ @DataDictClass @ApiOperation("查询AI设备列表") @PreAuthorize("@ss.hasPermi('oa:ai:list')") @GetMapping("/list") public TableDataInfo<SgAiVo> list(@Validated(QueryGroup.class) SgAiBo bo) { return iSgAiService.queryPageList(bo); } /** * 导出AI设备列表 */ @ApiOperation("导出AI设备列表") @PreAuthorize("@ss.hasPermi('oa:ai:export')") @Log(title = "AI设备", businessType = BusinessType.EXPORT) @GetMapping("/export") public void export(@Validated SgAiBo bo, HttpServletResponse response) { List<SgAiVo> list = iSgAiService.queryList(bo); ExcelUtil.exportExcel(list, "AI设备", SgAiVo.class, response); } /** * 获取AI设备详细信息 */ @ApiOperation("获取AI设备详细信息") @PreAuthorize("@ss.hasPermi('oa:ai:query')") @GetMapping("/{id}") public AjaxResult<SgAiVo> getInfo(@ApiParam("主键") @NotNull(message = "主键不能为空") @PathVariable("id") Long id) { return AjaxResult.success(iSgAiService.queryById(id)); } /** * 新增AI设备 */ @ApiOperation("新增AI设备") @PreAuthorize("@ss.hasPermi('oa:ai:add')") @Log(title = "AI设备", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody SgAiBo bo) { return toAjax(iSgAiService.insertByBo(bo) ? 1 : 0); } /** * 修改AI设备 */ @ApiOperation("修改AI设备") @PreAuthorize("@ss.hasPermi('oa:ai:edit')") @Log(title = "AI设备", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody SgAiBo bo) { return toAjax(iSgAiService.updateByBo(bo) ? 1 : 0); } /** * 删除AI设备 */ @ApiOperation("删除AI设备") @PreAuthorize("@ss.hasPermi('oa:ai:remove')") @Log(title = "AI设备" , businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult<Void> remove(@ApiParam("主键串") @NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { return toAjax(iSgAiService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0); } } ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SgAi.java
New file @@ -0,0 +1,93 @@ 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; /** * AI设备对象 sg_ai * * @author ruoyi * @date 2022-05-12 */ @Data @Accessors(chain = true) @TableName("sg_ai") public class SgAi extends BaseEntity { private static final long serialVersionUID=1L; /** * */ @TableId(value = "id") private Long id; /** * 高校 */ private Long schoolId; /** * 部署名称 */ private String deploymentName; /** * 通道 */ private String passageway; /** * LAN1 */ private String lanOne; /** * IP1 */ private String ipOne; /** * LAN2 */ private String lanTwo; /** * IP2 */ private String ipTwo; /** * 登录账户 */ private String loginAccount; /** * 安装位置 */ private Long buildingId; /** * 所属单位 */ private Long organizationId; /** * 施工批次 */ private Long constructionBatchId; /** * 序列号 */ private String serialNumber; /** * 型号 */ private String model; /** * 生产厂商 */ private Long manufacturerId; /** * */ @TableLogic private String delFlag; } ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SgAiBo.java
New file @@ -0,0 +1,148 @@ 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; /** * AI设备业务对象 sg_ai * * @author ruoyi * @date 2022-05-12 */ @Data @EqualsAndHashCode(callSuper = true) @ApiModel("AI设备业务对象") public class SgAiBo extends BaseEntity { /** * */ @ApiModelProperty(value = "", required = true) @NotNull(message = "不能为空", groups = { EditGroup.class }) private Long id; /** * 高校 */ private Long schoolId; /** * 部署名称 */ @ApiModelProperty(value = "部署名称", required = true) @NotBlank(message = "部署名称不能为空", groups = { AddGroup.class, EditGroup.class }) private String deploymentName; /** * 通道 */ @ApiModelProperty(value = "通道", required = true) @NotBlank(message = "通道不能为空", groups = { AddGroup.class, EditGroup.class }) private String passageway; /** * LAN1 */ @ApiModelProperty(value = "LAN1", required = true) @NotBlank(message = "LAN1不能为空", groups = { AddGroup.class, EditGroup.class }) private String lanOne; /** * IP1 */ @ApiModelProperty(value = "IP1", required = true) @NotBlank(message = "IP1不能为空", groups = { AddGroup.class, EditGroup.class }) private String ipOne; /** * LAN2 */ @ApiModelProperty(value = "LAN2", required = true) @NotBlank(message = "LAN2不能为空", groups = { AddGroup.class, EditGroup.class }) private String lanTwo; /** * IP2 */ @ApiModelProperty(value = "IP2") private String ipTwo; /** * 登录账户 */ @ApiModelProperty(value = "登录账户") private String loginAccount; /** * 安装位置 */ @ApiModelProperty(value = "安装位置", required = true) @NotNull(message = "安装位置不能为空", groups = { AddGroup.class, EditGroup.class }) private Long buildingId; /** * 所属单位 */ @ApiModelProperty(value = "所属单位", required = true) @NotNull(message = "所属单位不能为空", groups = { AddGroup.class, EditGroup.class }) private Long organizationId; /** * 施工批次 */ @ApiModelProperty(value = "施工批次", required = true) @NotNull(message = "施工批次不能为空", groups = { AddGroup.class, EditGroup.class }) private Long constructionBatchId; /** * 序列号 */ @ApiModelProperty(value = "序列号") private String serialNumber; /** * 型号 */ @ApiModelProperty(value = "型号") private String model; /** * 生产厂商 */ @ApiModelProperty(value = "生产厂商") private Long manufacturerId; /** * 分页大小 */ @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/SgAiVo.java
New file @@ -0,0 +1,135 @@ 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; /** * AI设备视图对象 sg_ai * * @author ruoyi * @date 2022-05-12 */ @Data @ApiModel("AI设备视图对象") @ExcelIgnoreUnannotated public class SgAiVo { private static final long serialVersionUID = 1L; /** * */ @ExcelProperty(value = "") @ApiModelProperty("") private Long id; /** * 高校 */ private Long schoolId; /** * 部署名称 */ @ExcelProperty(value = "部署名称") @ApiModelProperty("部署名称") private String deploymentName; /** * 通道 */ @ExcelProperty(value = "通道", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "DICT112") @ApiModelProperty("通道") private String passageway; /** * LAN1 */ @ExcelProperty(value = "LAN1") @ApiModelProperty("LAN1") private String lanOne; /** * IP1 */ @ExcelProperty(value = "IP1") @ApiModelProperty("IP1") private String ipOne; /** * LAN2 */ @ExcelProperty(value = "LAN2") @ApiModelProperty("LAN2") private String lanTwo; /** * IP2 */ @ExcelProperty(value = "IP2") @ApiModelProperty("IP2") private String ipTwo; /** * 登录账户 */ @ExcelProperty(value = "登录账户") @ApiModelProperty("登录账户") private String loginAccount; /** * 安装位置 */ @ExcelProperty(value = "安装位置") @ApiModelProperty("安装位置") @Dict(dictTable = "bs_building", dicCode = "id", dicText = "detailed_name") private Long buildingId; /** * 所属单位 */ @ExcelProperty(value = "所属单位") @ApiModelProperty("所属单位") @Dict(dictTable = "bs_organization", dicCode = "id", dicText = "detailed_name") private Long organizationId; /** * 施工批次 */ @ExcelProperty(value = "施工批次") @ApiModelProperty("施工批次") @Dict(dictTable = "sg_construction_batch", dicCode = "id", dicText = "batch") private Long constructionBatchId; /** * 序列号 */ @ExcelProperty(value = "序列号") @ApiModelProperty("序列号") private String serialNumber; /** * 型号 */ @ExcelProperty(value = "型号") @ApiModelProperty("型号") private String model; /** * 生产厂商 */ @ExcelProperty(value = "生产厂商") @ApiModelProperty("生产厂商") @Dict(dictTable = "dev_manufacturer", dicCode = "id", dicText = "name") private Long manufacturerId; } ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SgAiMapper.java
New file @@ -0,0 +1,14 @@ package com.ruoyi.oa.mapper; import com.ruoyi.oa.domain.SgAi; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; /** * AI设备Mapper接口 * * @author ruoyi * @date 2022-05-12 */ public interface SgAiMapper extends BaseMapperPlus<SgAi> { } ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISgAiService.java
New file @@ -0,0 +1,56 @@ package com.ruoyi.oa.service; import com.ruoyi.oa.domain.SgAi; import com.ruoyi.oa.domain.vo.SgAiVo; import com.ruoyi.oa.domain.bo.SgAiBo; import com.ruoyi.common.core.mybatisplus.core.IServicePlus; import com.ruoyi.common.core.page.TableDataInfo; import java.util.Collection; import java.util.List; /** * AI设备Service接口 * * @author ruoyi * @date 2022-05-12 */ public interface ISgAiService extends IServicePlus<SgAi, SgAiVo> { /** * 查询单个 * @return */ SgAiVo queryById(Long id); /** * 查询列表 */ TableDataInfo<SgAiVo> queryPageList(SgAiBo bo); /** * 查询列表 */ List<SgAiVo> queryList(SgAiBo bo); /** * 根据新增业务对象插入AI设备 * @param bo AI设备新增业务对象 * @return */ Boolean insertByBo(SgAiBo bo); /** * 根据编辑业务对象修改AI设备 * @param bo AI设备编辑业务对象 * @return */ Boolean updateByBo(SgAiBo 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/SgAiServiceImpl.java
New file @@ -0,0 +1,113 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.http.HttpStatus; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.stereotype.Service; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.oa.domain.bo.SgAiBo; import com.ruoyi.oa.domain.vo.SgAiVo; import com.ruoyi.oa.domain.SgAi; import com.ruoyi.oa.mapper.SgAiMapper; import com.ruoyi.oa.service.ISgAiService; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.Collection; /** * AI设备Service业务层处理 * * @author ruoyi * @date 2022-05-12 */ @Service public class SgAiServiceImpl extends ServicePlusImpl<SgAiMapper, SgAi, SgAiVo> implements ISgAiService { @Override public SgAiVo queryById(Long id){ return getVoById(id); } @Override public TableDataInfo<SgAiVo> queryPageList(SgAiBo bo) { PagePlus<SgAi, SgAiVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo)); return PageUtils.buildDataInfo(result); } @Override public List<SgAiVo> queryList(SgAiBo bo) { return listVo(buildQueryWrapper(bo)); } private LambdaQueryWrapper<SgAi> buildQueryWrapper(SgAiBo bo) { Map<String, Object> params = bo.getParams(); LambdaQueryWrapper<SgAi> lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getBuildingId() != null, SgAi::getBuildingId, bo.getBuildingId()); lqw.eq(bo.getOrganizationId() != null, SgAi::getOrganizationId, bo.getOrganizationId()); lqw.eq(bo.getConstructionBatchId() != null, SgAi::getConstructionBatchId, bo.getConstructionBatchId()); lqw.like(StringUtils.isNotBlank(bo.getModel()), SgAi::getModel, bo.getModel()); lqw.eq(bo.getManufacturerId() != null, SgAi::getManufacturerId, bo.getManufacturerId()); lqw.eq(SgAi::getSchoolId, bo.getSchoolId()); lqw.orderByDesc(SgAi::getUpdateTime); return lqw; } @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(SgAiBo bo) { List<SgAi> list = baseMapper.selectList(new LambdaQueryWrapper<SgAi>() .eq(SgAi::getDeploymentName, bo.getDeploymentName()) .eq(SgAi::getSchoolId, bo.getSchoolId())); if (list.size() > 0) { throw new ServiceException("部署名称重复", HttpStatus.HTTP_PARTIAL); } SgAi add = BeanUtil.toBean(bo, SgAi.class); validEntityBeforeSave(add); boolean flag = save(add); if (flag) { bo.setId(add.getId()); } return flag; } @Override @Transactional(rollbackFor = Exception.class) public Boolean updateByBo(SgAiBo bo) { List<SgAi> list = baseMapper.selectList(new LambdaQueryWrapper<SgAi>() .eq(SgAi::getDeploymentName, bo.getDeploymentName()) .eq(SgAi::getSchoolId, bo.getSchoolId()) .ne(SgAi::getId, bo.getId())); if (list.size() > 0) { throw new ServiceException("部署名称重复", HttpStatus.HTTP_PARTIAL); } SgAi update = BeanUtil.toBean(bo, SgAi.class); validEntityBeforeSave(update); return updateById(update); } /** * 保存前的数据校验 * * @param entity 实体类数据 */ private void validEntityBeforeSave(SgAi entity){ //TODO 做一些数据校验,如唯一约束 } @Override @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } return removeByIds(ids); } } ruoyi-oa/src/main/resources/mapper/oa/SgAiMapper.xml
New file @@ -0,0 +1,30 @@ <?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.SgAiMapper"> <resultMap type="com.ruoyi.oa.domain.SgAi" id="SgAiResult"> <result property="id" column="id"/> <result property="deploymentName" column="deployment_name"/> <result property="passageway" column="passageway"/> <result property="lanOne" column="lan_one"/> <result property="ipOne" column="ip_one"/> <result property="lanTwo" column="lan_two"/> <result property="ipTwo" column="ip_two"/> <result property="loginAccount" column="login_account"/> <result property="buildingId" column="building_id"/> <result property="organizationId" column="organization_id"/> <result property="constructionBatchId" column="construction_batch_id"/> <result property="serialNumber" column="serial_number"/> <result property="model" column="model"/> <result property="manufacturerId" column="manufacturer_id"/> <result property="createTime" column="create_time"/> <result property="createBy" column="create_by"/> <result property="updateBy" column="update_by"/> <result property="updateTime" column="update_time"/> <result property="delFlag" column="del_flag"/> </resultMap> </mapper>