From b16bb2db8711850563439bce0ee4623ce08c5536 Mon Sep 17 00:00:00 2001 From: zhouyl <583641232@qq.com> Date: Mon, 17 Jun 2024 16:09:21 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=201.=E5=85=BC=E5=AE=B9=E5=8F=AF?= =?UTF-8?q?=E9=9D=A0=E6=80=A7=E6=B5=8B=E8=AF=95=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E5=A4=9A=E5=AA=92=E4=BD=93=E6=96=87=E4=BB=B6=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E6=80=A7=E6=B5=8B=E8=AF=95=E5=B7=A5=E5=85=B7=202.=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E5=8F=AF=E9=9D=A0=E6=80=A7=E6=B5=8B=E8=AF=95=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F-=E5=BA=94=E7=94=A8=E7=A8=8B=E5=BA=8F=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E6=80=A7=E6=B5=8B=E8=AF=95=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 12 +- tp-admin/pom.xml | 14 +- .../src/main/resources/application-dev.yml | 13 +- .../src/main/resources/application-prod.yml | 11 +- .../controller/FuncCarAppController.java | 141 ++++++++++++++++++ .../controller/FuncCarMediaController.java | 56 +++++++ .../functional/domain/FuncCarApp.java | 45 ++++++ .../functional/domain/FuncCarAppPg.java | 46 ++++++ .../functional/mapper/FuncCarAppMapper.java | 14 ++ .../functional/mapper/FuncCarAppPgMapper.java | 16 ++ .../service/IFuncCarAppService.java | 37 +++++ .../service/impl/FuncCarAppServiceImpl.java | 134 +++++++++++++++++ 12 files changed, 516 insertions(+), 23 deletions(-) create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/controller/FuncCarAppController.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/controller/FuncCarMediaController.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/domain/FuncCarApp.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/domain/FuncCarAppPg.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/mapper/FuncCarAppMapper.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/mapper/FuncCarAppPgMapper.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/service/IFuncCarAppService.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/service/impl/FuncCarAppServiceImpl.java diff --git a/pom.xml b/pom.xml index 877f198..846d37c 100644 --- a/pom.xml +++ b/pom.xml @@ -299,11 +299,11 @@ - - com.inscloudtech - tp-demo - ${test-platform-service.version} - + + + + + @@ -321,7 +321,7 @@ tp-system tp-generator tp-common - tp-demo + tp-oss tp-sms tp-functional diff --git a/tp-admin/pom.xml b/tp-admin/pom.xml index 6bab4ab..76bdc64 100644 --- a/tp-admin/pom.xml +++ b/tp-admin/pom.xml @@ -30,6 +30,12 @@ mysql-connector-j + + + org.postgresql + postgresql + 42.6.2 + @@ -54,10 +60,10 @@ - - com.inscloudtech - tp-demo - + + + + com.inscloudtech diff --git a/tp-admin/src/main/resources/application-dev.yml b/tp-admin/src/main/resources/application-dev.yml index 5c7d15a..f9d88e0 100644 --- a/tp-admin/src/main/resources/application-dev.yml +++ b/tp-admin/src/main/resources/application-dev.yml @@ -17,17 +17,16 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:mysql://192.168.3.20:3306/test_platform?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true + url: jdbc:mysql://localhost:3306/test_platform?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true username: root password: 123456 # 从库数据源 - slave: - lazy: true + postgresql: type: ${spring.datasource.type} - driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true - username: - password: + driverClassName: org.postgresql.Driver + url: jdbc:postgresql://192.168.3.20:5432/chng_wuzi_data + username: dev + password: 123456 hikari: # 最大连接池数量 maxPoolSize: 20 diff --git a/tp-admin/src/main/resources/application-prod.yml b/tp-admin/src/main/resources/application-prod.yml index 0cd78ee..3ee2fb8 100644 --- a/tp-admin/src/main/resources/application-prod.yml +++ b/tp-admin/src/main/resources/application-prod.yml @@ -24,13 +24,12 @@ spring: username: root password: 123456 # 从库数据源 - slave: - lazy: true + postgresql: type: ${spring.datasource.type} - driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true - username: - password: + driverClassName: org.postgresql.Driver + url: jdbc:postgresql://localhost:5432/chng_wuzi_data + username: dev + password: 123456 hikari: # 最大连接池数量 maxPoolSize: 20 diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/controller/FuncCarAppController.java b/tp-functional/src/main/java/com/inscloudtech/functional/controller/FuncCarAppController.java new file mode 100644 index 0000000..453880b --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/controller/FuncCarAppController.java @@ -0,0 +1,141 @@ +package com.inscloudtech.functional.controller; + +import com.inscloudtech.common.annotation.RepeatSubmit; +import com.inscloudtech.common.config.ProjectConfig; +import com.inscloudtech.common.core.controller.BaseController; +import com.inscloudtech.common.core.domain.PageQuery; +import com.inscloudtech.common.core.domain.R; +import com.inscloudtech.common.core.page.TableDataInfo; +import com.inscloudtech.common.core.validate.AddGroup; +import com.inscloudtech.common.core.validate.EditGroup; +import com.inscloudtech.common.utils.StringUtils; +import com.inscloudtech.common.utils.file.FileUtils; +import com.inscloudtech.functional.domain.FuncCarApp; +import com.inscloudtech.functional.service.IFuncCarApiService; +import com.inscloudtech.functional.service.IFuncCarAppService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.NotEmpty; +import java.util.Arrays; +import java.util.Random; + +/** + * 兼容可靠性测试系统-应用程序兼容性测试工具 + * + * @author inscloudtech + * @date 2024-06-11 + */ +@RequiredArgsConstructor +@RestController +@RequestMapping("/functional/carApp") +public class FuncCarAppController extends BaseController { + + private String DEMO_APP_STATUS = "STOP"; + + private String DATA_SOURCE = "MYSQL"; + + private final IFuncCarAppService iFuncCarAppService; + + /** + * 数据库测试-示例应用状态 + */ + @GetMapping("/status") + public R status() { + return R.ok(DEMO_APP_STATUS); + } + + /** + * 数据库测试-启动示例应用程序 + */ + @GetMapping("/start") + public R start() { + // 模拟网络延迟 + Random random = new Random(); + int delayMillis = random.nextInt(2000); // 随机延迟0-500毫秒 + try { + Thread.sleep(delayMillis); + } catch (InterruptedException e) { + e.printStackTrace(); + } + DEMO_APP_STATUS = "START"; + return R.ok("示例应用已启动!"); + } + + /** + * 数据库测试-停止示例应用程序 + */ + @GetMapping("/stop") + public R stop() { + DEMO_APP_STATUS = "STOP"; + return R.ok("示例应用已停止!"); + } + + /** + * 数据库测试-1.当前数据源 + */ + @GetMapping("/getDS") + public R getDS() { + return R.ok("当前数据源为【" +DATA_SOURCE+ "】"); + } + + /** + * 数据库测试-2.切换数据源 + */ + @GetMapping("/changeDS/{ds}") + public R changeDS(@PathVariable int ds) { + if(ds == 0){ + DATA_SOURCE = "MYSQL"; + }else if (ds == 1){ + DATA_SOURCE = "POSTGRESQL"; + }else { + throw new RuntimeException("未提供该类数据源!"); + } + + return R.ok("数据源已切换为【" +DATA_SOURCE+ "】"); + } + + + /** + * 数据库测试-3查询示例数据列表 + */ + @GetMapping("/demoDataList") + public TableDataInfo list(FuncCarApp bo, PageQuery pageQuery) { + return iFuncCarAppService.queryPageList(bo, pageQuery,DATA_SOURCE); + } + + + /** + * 数据库测试-4新增示例数据列表 + */ + @RepeatSubmit() + @PostMapping("/demoData") + public R add(@Validated(AddGroup.class) @RequestBody FuncCarApp bo) { + return toAjax(iFuncCarAppService.insertByBo(bo,DATA_SOURCE)); + } + + /** + * 数据库测试-5修改示例数据列表 + */ + @RepeatSubmit() + @PutMapping("/demoData") + public R edit(@Validated(EditGroup.class) @RequestBody FuncCarApp bo) { + return toAjax(iFuncCarAppService.updateByBo(bo,DATA_SOURCE)); + } + + /** + * 数据库测试-6删除示例数据列表 + * + * @param operIds 主键串 + */ + @DeleteMapping("/demoData/{operIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] operIds) { + return toAjax(iFuncCarAppService.deleteWithValidByIds(Arrays.asList(operIds), true,DATA_SOURCE)); + } + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/controller/FuncCarMediaController.java b/tp-functional/src/main/java/com/inscloudtech/functional/controller/FuncCarMediaController.java new file mode 100644 index 0000000..d6734fc --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/controller/FuncCarMediaController.java @@ -0,0 +1,56 @@ +package com.inscloudtech.functional.controller; + +import com.inscloudtech.common.config.ProjectConfig; +import com.inscloudtech.common.core.controller.BaseController; +import com.inscloudtech.common.utils.StringUtils; +import com.inscloudtech.common.utils.file.FileUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 兼容可靠性测试系统-多媒体文件兼容性测试工具 + * + * @author inscloudtech + * @date 2024-06-11 + */ +@RequiredArgsConstructor +@RestController +@RequestMapping("/functional/carMedia") +public class FuncCarMediaController extends BaseController { + + private final ProjectConfig projectConfig; + + private final static String FFMPEG_FILE_NAME = "ffmpeg.zip"; + + + /** + * 文件格式验证-编码格式支持-分辨率与比特率-帧率-音频声道数和采样率-工具下载 + */ + @GetMapping("/ffDownload") + public void jmDownload(HttpServletResponse response, HttpServletRequest request) { + doDownLoad(FFMPEG_FILE_NAME,response); + } + + + void doDownLoad(String filename,HttpServletResponse response){ + try { + if (!FileUtils.checkAllowDownload(filename)) { + throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", filename)); + } + String realFileName = System.currentTimeMillis() + filename.substring(filename.indexOf("_") + 1); + String filePath = projectConfig.getDownloadPath() + filename; + + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, realFileName); + FileUtils.writeBytes(filePath, response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/domain/FuncCarApp.java b/tp-functional/src/main/java/com/inscloudtech/functional/domain/FuncCarApp.java new file mode 100644 index 0000000..2e5fc85 --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/domain/FuncCarApp.java @@ -0,0 +1,45 @@ +package com.inscloudtech.functional.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.inscloudtech.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + + +/** + * 兼容可靠性测试系统-应用程序兼容性测试工具对象 func_car_app + * + * @author inscloudtech + * @date 2024-06-17 + */ +@Data +@TableName("func_car_app") +public class FuncCarApp { + + private static final long serialVersionUID=1L; + + /** + * 主键 + */ + @TableId(value = "oper_id") + private Long operId; + /** + * 商品名称 + */ + private String name; + /** + * 状态 + */ + private Long status; + /** + * + */ + private Long userId; + + private Date createTime; + + private Date updateTime; + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/domain/FuncCarAppPg.java b/tp-functional/src/main/java/com/inscloudtech/functional/domain/FuncCarAppPg.java new file mode 100644 index 0000000..fc3d1ff --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/domain/FuncCarAppPg.java @@ -0,0 +1,46 @@ +package com.inscloudtech.functional.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.inscloudtech.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + + +/** + * 兼容可靠性测试系统-应用程序兼容性测试工具对象 func_car_app + * + * @author inscloudtech + * @date 2024-06-17 + */ +@Data +@TableName("public.func_car_app") +public class FuncCarAppPg { + + private static final long serialVersionUID=1L; + + /** + * 主键 + */ + @TableId(value = "oper_id") + private Long operId; + /** + * 商品名称 + */ + private String name; + /** + * 状态 + */ + private Long status; + /** + * + */ + private Long userId; + + private Date createTime; + + private Date updateTime; + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/mapper/FuncCarAppMapper.java b/tp-functional/src/main/java/com/inscloudtech/functional/mapper/FuncCarAppMapper.java new file mode 100644 index 0000000..277e59b --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/mapper/FuncCarAppMapper.java @@ -0,0 +1,14 @@ +package com.inscloudtech.functional.mapper; + +import com.inscloudtech.common.core.mapper.BaseMapperPlus; +import com.inscloudtech.functional.domain.FuncCarApp; + +/** + * 兼容可靠性测试系统-API接口兼容性测试工具Mapper接口 + * + * @author inscloudtech + * @date 2024-06-11 + */ +public interface FuncCarAppMapper extends BaseMapperPlus { + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/mapper/FuncCarAppPgMapper.java b/tp-functional/src/main/java/com/inscloudtech/functional/mapper/FuncCarAppPgMapper.java new file mode 100644 index 0000000..62f39cc --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/mapper/FuncCarAppPgMapper.java @@ -0,0 +1,16 @@ +package com.inscloudtech.functional.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.inscloudtech.common.core.mapper.BaseMapperPlus; +import com.inscloudtech.functional.domain.FuncCarAppPg; + +/** + * 兼容可靠性测试系统-API接口兼容性测试工具Mapper接口 + * + * @author inscloudtech + * @date 2024-06-11 + */ +@DS("postgresql") +public interface FuncCarAppPgMapper extends BaseMapperPlus { + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/service/IFuncCarAppService.java b/tp-functional/src/main/java/com/inscloudtech/functional/service/IFuncCarAppService.java new file mode 100644 index 0000000..1c36667 --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/service/IFuncCarAppService.java @@ -0,0 +1,37 @@ +package com.inscloudtech.functional.service; + +import com.inscloudtech.functional.domain.FuncCarApp; +import com.inscloudtech.common.core.page.TableDataInfo; +import com.inscloudtech.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 兼容可靠性测试系统-应用程序兼容性测试工具Service接口 + * + * @author inscloudtech + * @date 2024-06-17 + */ +public interface IFuncCarAppService { + + /** + * 查询兼容可靠性测试系统-应用程序兼容性测试工具列表 + */ + TableDataInfo queryPageList(FuncCarApp bo, PageQuery pageQuery,String dataSource); + + /** + * 新增兼容可靠性测试系统-应用程序兼容性测试工具 + */ + Boolean insertByBo(FuncCarApp bo,String dataSource); + + /** + * 修改兼容可靠性测试系统-应用程序兼容性测试工具 + */ + Boolean updateByBo(FuncCarApp bo,String dataSource); + + /** + * 校验并批量删除兼容可靠性测试系统-应用程序兼容性测试工具信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid,String dataSource); +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/service/impl/FuncCarAppServiceImpl.java b/tp-functional/src/main/java/com/inscloudtech/functional/service/impl/FuncCarAppServiceImpl.java new file mode 100644 index 0000000..57578cf --- /dev/null +++ b/tp-functional/src/main/java/com/inscloudtech/functional/service/impl/FuncCarAppServiceImpl.java @@ -0,0 +1,134 @@ +package com.inscloudtech.functional.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.inscloudtech.common.core.domain.model.LoginUser; +import com.inscloudtech.common.core.page.TableDataInfo; +import com.inscloudtech.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.inscloudtech.common.helper.LoginHelper; +import com.inscloudtech.common.utils.StringUtils; +import com.inscloudtech.functional.domain.FuncCarAppPg; +import com.inscloudtech.functional.mapper.FuncCarAppPgMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.inscloudtech.functional.domain.FuncCarApp; +import com.inscloudtech.functional.mapper.FuncCarAppMapper; +import com.inscloudtech.functional.service.IFuncCarAppService; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 兼容可靠性测试系统-应用程序兼容性测试工具Service业务层处理 + * + * @author inscloudtech + * @date 2024-06-17 + */ +@RequiredArgsConstructor +@Service +public class FuncCarAppServiceImpl implements IFuncCarAppService { + + private final FuncCarAppMapper baseMapper; + + private final FuncCarAppPgMapper pgBaseMapper; + + + /** + * 查询兼容可靠性测试系统-应用程序兼容性测试工具列表 + */ + @Override + public TableDataInfo queryPageList(FuncCarApp bo, PageQuery pageQuery,String dataSource) { + + if(dataSource.equals("MYSQL")){ + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + }else { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getName()), FuncCarAppPg::getName, bo.getName()); + lqw.eq(bo.getStatus() != null, FuncCarAppPg::getStatus, bo.getStatus()); + LoginUser loginUser = LoginHelper.getLoginUser(); + lqw.eq(FuncCarAppPg::getUserId, loginUser.getUserId()); + Page result = pgBaseMapper.selectPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + + } + + + + private LambdaQueryWrapper buildQueryWrapper(FuncCarApp bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getName()), FuncCarApp::getName, bo.getName()); + lqw.eq(bo.getStatus() != null, FuncCarApp::getStatus, bo.getStatus()); + LoginUser loginUser = LoginHelper.getLoginUser(); + lqw.eq(FuncCarApp::getUserId, loginUser.getUserId()); + return lqw; + } + + /** + * 新增兼容可靠性测试系统-应用程序兼容性测试工具 + */ + @Override + public Boolean insertByBo(FuncCarApp add,String dataSource) { + validEntityBeforeSave(add); + LoginUser loginUser = LoginHelper.getLoginUser(); + add.setUserId(loginUser.getUserId()); + add.setCreateTime(new Date()); + boolean flag ; + if(dataSource.equals("MYSQL")){ + flag = baseMapper.insert(add) > 0; + }else { + FuncCarAppPg pgAdd = BeanUtil.toBean(add, FuncCarAppPg.class); + flag = pgBaseMapper.insert(pgAdd) > 0; + } + + return flag; + } + + /** + * 修改兼容可靠性测试系统-应用程序兼容性测试工具 + */ + @Override + public Boolean updateByBo(FuncCarApp bo,String dataSource) { + validEntityBeforeSave(bo); + bo.setUpdateTime(new Date()); + boolean flag ; + if(dataSource.equals("MYSQL")){ + flag = baseMapper.updateById(bo) > 0; + }else { + FuncCarAppPg pgAdd = BeanUtil.toBean(bo, FuncCarAppPg.class); + flag = pgBaseMapper.updateById(pgAdd) > 0; + } + return flag; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(FuncCarApp entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除兼容可靠性测试系统-应用程序兼容性测试工具 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid,String dataSource) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + boolean flag ; + if(dataSource.equals("MYSQL")){ + flag = baseMapper.deleteBatchIds(ids) > 0; + }else { + flag = pgBaseMapper.deleteBatchIds(ids) > 0; + } + return flag; + } +}