diff --git a/das/src/main/java/com/das/common/utils/StringUtils.java b/das/src/main/java/com/das/common/utils/StringUtils.java index 6b29264b..2b9ce2e6 100644 --- a/das/src/main/java/com/das/common/utils/StringUtils.java +++ b/das/src/main/java/com/das/common/utils/StringUtils.java @@ -6,6 +6,7 @@ import cn.hutool.core.lang.Validator; import cn.hutool.core.util.StrUtil; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.springframework.boot.configurationprocessor.json.JSONTokener; import org.springframework.util.AntPathMatcher; import java.util.*; @@ -347,4 +348,18 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { return str.matches("[a-zA-Z]+"); } + /** + * 判断是否为JSON + * @param jsonString + * @return + */ + public static boolean isJsonString(String jsonString) { + try { + new JSONTokener(jsonString).nextValue(); + return true; + } catch (Exception e) { + return false; + } + } + } diff --git a/das/src/main/java/com/das/modules/page/controller/ReportTemplateController.java b/das/src/main/java/com/das/modules/page/controller/ReportTemplateController.java new file mode 100644 index 00000000..df5cf5ba --- /dev/null +++ b/das/src/main/java/com/das/modules/page/controller/ReportTemplateController.java @@ -0,0 +1,81 @@ +package com.das.modules.page.controller; + +import cn.dev33.satoken.stp.StpUtil; +import com.das.common.constant.SysAuthorityIds; +import com.das.common.exceptions.ServiceException; +import com.das.common.result.R; +import com.das.common.utils.PageDataInfo; +import com.das.modules.page.domian.dto.SysReportTemplateDto; +import com.das.modules.page.domian.vo.SysReportTemplateVo; +import com.das.modules.page.service.ReportTemplateService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 报表相关Controller + */ +@Slf4j +@RequestMapping("/api/report/template") +@RestController +public class ReportTemplateController { + + + @Autowired + private ReportTemplateService reportTemplateService; + + /** + * 根据模板分类查询模板列表 + * @return 模板列表 + */ + @PostMapping("/getList") + public R> getReportTemplateList(@RequestBody SysReportTemplateDto sysReportTemplateDto) { + if (sysReportTemplateDto.getPageNum() == null) { + sysReportTemplateDto.setPageNum(1); + } + if (sysReportTemplateDto.getPageSize() == null) { + sysReportTemplateDto.setPageSize(30); + } + PageDataInfo reportTemplateList = reportTemplateService.getReportTemplateList(sysReportTemplateDto); + return R.success(reportTemplateList); + } + + + /** + * 新增报表模板; + */ + @PostMapping("/add") + public R addReportTemplate(@RequestBody SysReportTemplateDto sysReportTemplateDto) { + //判断是否有权限 + boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_CTRL.toString()); + if(!hasPermission){ + return R.fail("没有控制权限"); + } + if (StringUtils.isBlank(sysReportTemplateDto.getTemplate()) || StringUtils.isBlank(sysReportTemplateDto.getCategory())){ + throw new ServiceException("参数缺失"); + } + SysReportTemplateVo sysReportTemplateVo = reportTemplateService.addReportTemplate(sysReportTemplateDto); + return R.success(sysReportTemplateVo); + } + + /** + * 新增报表模板; + */ + @PostMapping("/del") + public R delReportTemplate(@RequestBody SysReportTemplateDto sysReportTemplateDto) { + //判断是否有权限 + boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_CTRL.toString()); + if(!hasPermission){ + return R.fail("没有控制权限"); + } + if (sysReportTemplateDto.getId() ==null){ + throw new ServiceException("参数缺失"); + } + reportTemplateService.delReportTemplate(sysReportTemplateDto); + return R.success(); + } +} diff --git a/das/src/main/java/com/das/modules/page/domian/dto/SysReportTemplateDto.java b/das/src/main/java/com/das/modules/page/domian/dto/SysReportTemplateDto.java new file mode 100644 index 00000000..233694e4 --- /dev/null +++ b/das/src/main/java/com/das/modules/page/domian/dto/SysReportTemplateDto.java @@ -0,0 +1,40 @@ +package com.das.modules.page.domian.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SysReportTemplateDto implements Serializable { + + + + /** + * id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + *报表分类;如:单机报表;多机报表 + */ + private String category; + + /** + * 模板内容 + */ + private String template; + + /** + * 分页大小 + */ + private Integer pageSize; + + /** + * 当前页数 + */ + private Integer pageNum; + +} diff --git a/das/src/main/java/com/das/modules/page/domian/vo/SysReportTemplateVo.java b/das/src/main/java/com/das/modules/page/domian/vo/SysReportTemplateVo.java new file mode 100644 index 00000000..a93fe3a9 --- /dev/null +++ b/das/src/main/java/com/das/modules/page/domian/vo/SysReportTemplateVo.java @@ -0,0 +1,29 @@ +package com.das.modules.page.domian.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; + +@Data +public class SysReportTemplateVo { + + + + /** + * id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + *报表分类;如:单机报表;多机报表 + */ + private String category; + + /** + * 模板内容 + */ + private String template; +} diff --git a/das/src/main/java/com/das/modules/page/entity/SysReportTemplate.java b/das/src/main/java/com/das/modules/page/entity/SysReportTemplate.java new file mode 100644 index 00000000..03e01c64 --- /dev/null +++ b/das/src/main/java/com/das/modules/page/entity/SysReportTemplate.java @@ -0,0 +1,39 @@ +package com.das.modules.page.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.das.common.constant.BaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; + +@TableName("sys_report_template") +@Data +public class SysReportTemplate extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + *报表分类;如:单机报表;多机报表 + */ + @TableField("category") + private String category; + + /** + * 模板内容 + */ + @TableField("template") + private String template; +} diff --git a/das/src/main/java/com/das/modules/page/mapper/SysReportTemplateMapper.java b/das/src/main/java/com/das/modules/page/mapper/SysReportTemplateMapper.java new file mode 100644 index 00000000..d936058d --- /dev/null +++ b/das/src/main/java/com/das/modules/page/mapper/SysReportTemplateMapper.java @@ -0,0 +1,15 @@ +package com.das.modules.page.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.das.modules.auth.mapper.BaseMapperPlus; +import com.das.modules.page.domian.dto.SysReportTemplateDto; +import com.das.modules.page.domian.vo.SysReportTemplateVo; +import com.das.modules.page.entity.SysReportTemplate; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface SysReportTemplateMapper extends BaseMapperPlus { + + IPage queryReportTemplateListInPage(IPage page, @Param("info") SysReportTemplateDto sysReportTemplateDto); +} diff --git a/das/src/main/java/com/das/modules/page/service/ReportTemplateService.java b/das/src/main/java/com/das/modules/page/service/ReportTemplateService.java new file mode 100644 index 00000000..a734ecc2 --- /dev/null +++ b/das/src/main/java/com/das/modules/page/service/ReportTemplateService.java @@ -0,0 +1,27 @@ +package com.das.modules.page.service; + +import com.das.common.utils.PageDataInfo; +import com.das.modules.page.domian.dto.SysReportTemplateDto; +import com.das.modules.page.domian.vo.SysReportTemplateVo; + +public interface ReportTemplateService { + + /** + * 根据模板分类查询模板列表 + * @return 模板列表 + */ + PageDataInfo getReportTemplateList( SysReportTemplateDto sysReportTemplateDto); + + /** + * 新增报表模板 + * @param sysReportTemplateDto + * @return报表模板 + */ + SysReportTemplateVo addReportTemplate(SysReportTemplateDto sysReportTemplateDto); + + /** + * 删除模板 + * @param sysReportTemplateDto + */ + void delReportTemplate(SysReportTemplateDto sysReportTemplateDto); +} diff --git a/das/src/main/java/com/das/modules/page/service/impl/ReportTemplateServiceImpl.java b/das/src/main/java/com/das/modules/page/service/impl/ReportTemplateServiceImpl.java new file mode 100644 index 00000000..0ac8e64b --- /dev/null +++ b/das/src/main/java/com/das/modules/page/service/impl/ReportTemplateServiceImpl.java @@ -0,0 +1,61 @@ +package com.das.modules.page.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.das.common.config.SessionUtil; +import com.das.common.exceptions.ServiceException; +import com.das.common.utils.BeanCopyUtils; +import com.das.common.utils.PageDataInfo; +import com.das.common.utils.PageQuery; +import com.das.common.utils.StringUtils; +import com.das.modules.auth.domain.vo.SysUserVo; +import com.das.modules.page.domian.dto.SysReportTemplateDto; +import com.das.modules.page.domian.vo.SysReportTemplateVo; +import com.das.modules.page.entity.SysReportTemplate; +import com.das.modules.page.mapper.SysReportTemplateMapper; +import com.das.modules.page.service.ReportTemplateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Service +public class ReportTemplateServiceImpl implements ReportTemplateService { + + @Autowired + private SysReportTemplateMapper sysReportTemplateMapper; + + @Override + public PageDataInfo getReportTemplateList(SysReportTemplateDto sysReportTemplateDto) { + PageQuery pageQuery = new PageQuery(); + pageQuery.setPageNum(sysReportTemplateDto.getPageNum()); + pageQuery.setPageSize(sysReportTemplateDto.getPageSize()); + IPage iPage = sysReportTemplateMapper.queryReportTemplateListInPage(pageQuery.build(), sysReportTemplateDto); + return PageDataInfo.build(iPage.getRecords(), iPage.getTotal()); + } + + + @Override + public SysReportTemplateVo addReportTemplate(SysReportTemplateDto sysReportTemplateDto) { + if (!StringUtils.isJsonString(sysReportTemplateDto.getTemplate())){ + throw new ServiceException("模板内容格式错误"); + } + SysReportTemplate sysReportTemplate = new SysReportTemplate(); + BeanCopyUtils.copy(sysReportTemplateDto, sysReportTemplate); + SysUserVo sysUserVo = (SysUserVo) StpUtil.getTokenSession().get(SessionUtil.SESSION_USER_KEY); + sysReportTemplate.setCreatedBy(sysUserVo.getAccount()); + sysReportTemplate.setUpdatedBy(sysUserVo.getAccount()); + sysReportTemplate.setCreatedTime(new Date()); + sysReportTemplate.setUpdatedTime(new Date()); + sysReportTemplate.setRevision(1); + sysReportTemplateMapper.insert(sysReportTemplate); + SysReportTemplateVo sysReportTemplateVo = new SysReportTemplateVo(); + BeanCopyUtils.copy(sysReportTemplate, sysReportTemplateVo); + return sysReportTemplateVo; + } + + @Override + public void delReportTemplate(SysReportTemplateDto sysReportTemplateDto) { + sysReportTemplateMapper.deleteById(sysReportTemplateDto.getId()); + } +} diff --git a/das/src/main/resources/mapper/SysReportTemplateMapper.xml b/das/src/main/resources/mapper/SysReportTemplateMapper.xml new file mode 100644 index 00000000..85412548 --- /dev/null +++ b/das/src/main/resources/mapper/SysReportTemplateMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/docs/api/pages/report.md b/docs/api/pages/report.md new file mode 100644 index 00000000..71e1f9c4 --- /dev/null +++ b/docs/api/pages/report.md @@ -0,0 +1,141 @@ +# 首页 + +## API接口-报表模板 + +| 接口分类 | 接口描述 | API接口 | 权限 | +|----------|--------------------|------------------------------| ---------------------------- | +| 2.1 报表模板 | 2.1.1 新增报表模板 | /api/report/template/add | SYS_AUTHORITY_ID_DEVICE_CTRL | +| | 2.1.2 根据模板分类查询模板列表 | /api/report/template/getList | | +| | 2.1.3 删除报表模板 | /api/report/template/del | SYS_AUTHORITY_ID_DEVICE_CTRL| + + +## 2.1 报表模板相关接口 + +### 2.1.1 新增报表模板 + +POST 请求接口 + +> /api/report/template/add + +请求参数 + +```json +{ + "category": "单机报表", + "template": "{\"name\":\"测试模板1\",\"startTime\":\"2024-11-04 14:15:00\"}" +} +``` +入参描述 + +| 参数名 | 参数类型 | 可选 | 描述 | +| ------------ |--------|----|------------------| +| category | String | NO | 报表分类;如:单机报表;多机报表 | +| template | String | NO | 模板内容(必须为:JSON格式) | + +返回报文 + +```json +{ + "code": 200, + "success": true, + "data": { + "id": "1853330292178747393", + "category": "单机报表", + "template": "{\"name\":\"测试模板1\",\"startTime\":\"2024-11-04 14:15:00\"}" + }, + "msg": "操作成功" +} +``` +返参描述 + +| 参数名 | 参数类型 | 可选 | 描述 | +| ------------ |--------| ---- |--------| +| category | String | 否 | 报表分类 | +| template | String | 否 | 模板内容 | + + + + + +### 2.1.2 根据模板分类查询模板列表 + +POST 请求接口 + +> /api/report/template/getList + +请求参数 +```json +{ + "category": "单机报表", + "pageNum":1, + "pageSize":2 +} +``` +入参描述 + +| 参数名 | 参数类型 | 可选 | 描述 | +| ------------ |---------|-----|------------------| +| category | String | YES | 报表分类;如:单机报表;多机报表 | +| pageNum | Integer | NO | 当前页 | +| pageSize | Integer | NO | 每页显示大小| + +返回报文 + +```json +{ + "code": 200, + "success": true, + "data": { + "total": 3, + "rows": [ + { + "id": "1853320886498217986", + "category": "单机报表", + "template": "{\"name\":\"测试模板2\",\"startTime\":\"2024-11-04 14:15:00\"}" + }, + { + "id": "1853328049337548801", + "category": "单机报表", + "template": "{\"name\":\"测试模板3\",\"startTime\":\"2024-11-04 14:15:00\"}" + } + ], + "code": 200, + "msg": "查询成功" + }, + "msg": "操作成功" +} +``` +返参描述 + +| 参数名 | 参数类型 | 可选 | 描述 | +| ------------ |--------| ---- |--------| +| category | String | 否 | 报表分类 | +| template | String | 否 | 模板内容 | + +### 2.1.3 删除报表模板 + +POST 请求接口 + +> /api/report/template/del + +请求参数 +```json +{ + "id": "1853320886498217986" +} +``` +入参描述 + +| 参数名 | 参数类型 | 可选 | 描述 | +| ------------ | -------- | ---- |------------------------------------------------------------------| +| id | String | no | 报表模板id | + +返回报文 + +```json +{ + "code": 200, + "success": true, + "msg": "操作成功" +} +```