From 9fd6afe3f2bf722f144007e6bb9fb1480add8ac2 Mon Sep 17 00:00:00 2001 From: "yunhao.wang" Date: Mon, 25 Feb 2019 13:57:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=80=A7=E8=83=BD=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/busi/ISysLogSystemService.java | 6 + .../core/api/iservice/busi/ISysToolService.java | 12 + .../core/api/iservice/busi/ITestService.java | 19 + .../core/apiservice/controller/busi/ComputePi.java | 101 ++++ .../apiservice/controller/busi/TestController.java | 617 +++++++++++++++++++++ .../apiservice/controller/busi/TestThread.java | 31 ++ .../core/apiservice/controller/busi/Text.java | 52 ++ .../estsh/i3plus/core/apiservice/dao/ITestDao.java | 17 + .../core/apiservice/daoimpl/TestDaoImpl.java | 36 ++ .../core/apiservice/schedulejob/DemoJob.java | 1 + .../serviceimpl/busi/SysLocaleLanguageService.java | 2 +- .../serviceimpl/busi/SysLogSystemService.java | 35 ++ .../serviceimpl/busi/SysToolService.java | 29 + .../apiservice/serviceimpl/busi/TestService.java | 30 + 14 files changed, 987 insertions(+), 1 deletion(-) create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/ComputePi.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TestController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TestThread.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/Text.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/ITestDao.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/TestDaoImpl.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogSystemService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogSystemService.java index 29dfa2f..9313c1a 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogSystemService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogSystemService.java @@ -20,6 +20,9 @@ public interface ISysLogSystemService { @ApiOperation(value = "添加系统日志",notes = "添加系统日志") void insertSysLogSystem(SysLogSystem logSystem); + @ApiOperation(value = "造数据系统日志",notes = "造数据") + void insertSysLogBatch(int num,int waitTime); + @ApiOperation(value = "删除日志",notes = "删除日志") void deleteSysLogSystemById(Long id); @@ -31,4 +34,7 @@ public interface ISysLogSystemService { @ApiOperation(value = "系统日志分页复杂查询",notes = "系统日志分页复杂查询") ListPager querySysLogSystemByPager(SysLogSystem logSystem, Pager pager); + + @ApiOperation(value = "系统日志批量删除",notes = "系统日志批量删除") + void deleteSysLogSystemByIds(Long[] ids); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolService.java index 5f21c4a..572e371 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolService.java @@ -32,6 +32,12 @@ public interface ISysToolService { void updateSysTool(SysTool tool); /** + * 修改硬件 + */ + @ApiOperation(value = "造数据") + void insertBatch(int num,int waitTime); + + /** * 查找全部硬件 * @return */ @@ -84,4 +90,10 @@ public interface ISysToolService { */ @ApiOperation(value = "更新设备信息",notes = "根据 ID 批量修改硬件状态信息") void updateSysToolStatusByIds(Long[] ids,Integer status); + + /** + * 查询指定数量设备信息 + */ + @ApiOperation(value = "查询指定数量设备信息",notes = "查询指定数量设备信息") + List findSysToolByTop(int topNum); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java new file mode 100644 index 0000000..6af881d --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.common.Pager; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-02-20 21:23 + * @Modify: + **/ +public interface ITestService { + + @ApiOperation(value = "多表查询") + List queryToolAndToolType(Pager pager); +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/ComputePi.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/ComputePi.java new file mode 100644 index 0000000..b757e75 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/ComputePi.java @@ -0,0 +1,101 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import java.math.BigDecimal; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-02-22 17:40 + * @Modify: + **/ +public class ComputePi { + /** + * 较著名的表示π的级数有莱布尼茨级数   π/4=1-1/3+1/5-1/7+1/9…… + * 以及威廉姆斯无穷乘积式   π/2=2*2/3*4/3*4/5*6/5*6/7*8/7*8/9…… + */ + + /** + * constants used in pi computation + */ + private static final BigDecimal FOUR = BigDecimal.valueOf(4); + + /** + * rounding mode to use during pi computation + */ + private static final int roundingMode = BigDecimal.ROUND_HALF_EVEN; + + /** + * Compute the value of pi to the specified number of + * digits after the decimal point. The value is + * computed using Machin's formula: + *

+ * pi/4 = 4*arctan(1/5) - arctan(1/239) + *

+ * and a power series expansion of arctan(x) to + * sufficient precision. + */ + + public static void main(String[] args) { + int digits = 8; //精度10万位 + String pi = computePi(digits).toString(); + System.out.println("length: " + pi.length()); + System.out.println(pi); + + } + + public static void computePiByLBNZ() { + + } + + public static void computePiByWLMS() { + + } + + public static BigDecimal computePi(int digits) { + int scale = digits + 5; + BigDecimal arctan1_5 = arctan(5, scale); + BigDecimal arctan1_239 = arctan(239, scale); + BigDecimal pi = arctan1_5.multiply(FOUR).subtract(arctan1_239).multiply(FOUR); + return pi.setScale(digits, BigDecimal.ROUND_HALF_UP); + } + + + /** + * Compute the value, in radians, of the arctangent of + * the inverse of the supplied integer to the specified + * number of digits after the decimal point. The value + * is computed using the power series expansion for the + * arc tangent: + *

+ * arctan(x) = x - (x^3)/3 + (x^5)/5 - (x^7)/7 + + * (x^9)/9 ... + */ + public static BigDecimal arctan(int inverseX, int scale) { + BigDecimal result, numer, term; + BigDecimal invX = BigDecimal.valueOf(inverseX); + BigDecimal invX2 = BigDecimal.valueOf(inverseX * inverseX); + + numer = BigDecimal.ONE.divide(invX, scale, roundingMode); + + result = numer; + int i = 1; + do { + numer = + numer.divide(invX2, scale, roundingMode); + int denom = 2 * i + 1; + term = + numer.divide(BigDecimal.valueOf(denom), + scale, roundingMode); + if ((i % 2) != 0) { + result = result.subtract(term); + } else { + result = result.add(term); + } + i++; + } while (term.compareTo(BigDecimal.ZERO) != 0); + + return result; + } + +} \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TestController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TestController.java new file mode 100644 index 0000000..b543479 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TestController.java @@ -0,0 +1,617 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogSystemService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysToolService; +import cn.estsh.i3plus.core.api.iservice.busi.ISystemResourceService; +import cn.estsh.i3plus.core.api.iservice.busi.ITestService; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.*; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem; +import cn.estsh.impp.framework.boot.eureka.EurekaClientHealthCheck; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.persistence.EntityManager; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-02-19 11:29 + * @Modify: + **/ +@RestController +@Api(description = "IMPP性能测试") +@RequestMapping("/impp/white/sys-test") +public class TestController { + public static final Logger LOGGER = LoggerFactory.getLogger(TestController.class); + + @Autowired + private ISysLogSystemService syslogSystemService; + + @Autowired + private ISysToolService sysToolService; + + @Autowired + private EntityManager entityManager; + + @Autowired + public ISystemResourceService systemResourceService; + + @Autowired + private ITestService testService; + + @Autowired + private EurekaClientHealthCheck healthCheck; + + @Resource(name = "redisRes") + private ImppRedis redisRes; + + /** + * 压力测试 + * + * @param num 对象生成数量/π计算线程数 + * @param cpu 是否进行cpu测试 + * @param piLength π精确位数 + * @param ram 是否进行内存测试 + * @return + */ + @GetMapping(value = "/test-pressure") + @ApiOperation(value = "压力测试", notes = "压力测试") + public ResultBean testPressure(int num, boolean cpu, int piLength, boolean ram) { + try { + long time = System.currentTimeMillis(); + //测试内存 + if (ram) { + SysUser user; + SysDepartment sysDepartment; + List userList = new ArrayList(); + List deptList = new ArrayList(); + + for (int i = 0; i < num; i++) { + // 生成部门计划 + for (int j = 0; j < 10; j++) { + sysDepartment = new SysDepartment(); + sysDepartment.setName("部门名称"); + sysDepartment.setDepartmentCode("code"); + sysDepartment.setDepartmentSort(j); + deptList.add(sysDepartment); + } + + user = new SysUser(); + user.setDepartmentList(deptList); + userList.add(user); + } + } + + // 测试cpu性能 + if (cpu) { + for (int i = 0; i < num; i++) { + TestThread th1 = new TestThread(piLength); + th1.start(); + } + } + + return ResultBean.success("查询成功").setResultObject("耗时:" + (System.currentTimeMillis() - time)) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 数据库操作测试 + * + * @param num 操作数量 + * @param insert 是否进行新增测试 + * @param update 是否进行修改测试 + * @param batchUpdate 是否批量修改 + * @param delete 是否进行删除测试 + * @param batchDelete 是否批量删除 + * @return + */ + @GetMapping(value = "/test-db") + @ApiOperation(value = "数据库操作测试", notes = "数据库操作测试") + public ResultBean testDBCRUD(int num, boolean mongo, boolean insert, boolean update, boolean batchUpdate, boolean delete, boolean batchDelete,int waitTime) { + try { + long time = System.currentTimeMillis(); + Pager page = new Pager(); + page.setCurrentPage(1); + page.setPageSize(num); + List list; + SysTool sysTool; + SysLogSystem sysLogSystem; + + long t1 = System.currentTimeMillis(); + + // 新增数据 + if (insert) { + for (int i = 0; i < num * 1000; i++) { + t1 = System.currentTimeMillis(); + if (!mongo) { + sysTool = new SysTool(); + sysTool.setName("新增测试"); + sysTool.setToolTypeId(1073140662133723136L); + sysTool.setToolIp("192.168.1.35"); + sysTool.setToolPort(8888); + sysTool.setToolDescription("描述新增测试"); + + sysToolService.insertSysTool(sysTool); + + this.wait(waitTime); + } else { + sysLogSystem = new SysLogSystem(); + sysLogSystem.setLogClass("新增测试class"); + sysLogSystem.setLogMethod("新增测试method"); + sysLogSystem.setLogArgs("新增测试参数"); + sysLogSystem.setExecuteTime(0L); + sysLogSystem.setArgsCount(1); + sysLogSystem.setLogDetail("2333"); + sysLogSystem.setLogLevel(ImppEnumUtil.LOG_LEVEL.DEBUG.getValue()); + sysLogSystem.setLogModuleId(CommonEnumUtil.SOFT_TYPE.CORE.getValue()); + sysLogSystem.setLogTitle("新增测试"); + + syslogSystemService.insertSysLogSystem(sysLogSystem); + + this.wait(waitTime); + } + + LOGGER.info("插入耗时:" + (System.currentTimeMillis() - t1) + ",idx:" + i); + } + } + + if (update || delete) { + // 查询批量修改或删除的数据 + if(mongo){ + list = syslogSystemService.querySysLogSystemByPager(null,page).getObjectList(); + }else { + list = sysToolService.findSysToolByTop(num); + } + + // 是否进行修改测试,并判断进行批量或逐次修改 + if (!mongo && update && batchUpdate) { + Long[] ids = new Long[num]; + for (int i = 0; i < num; i++) { + ids[i] = ((SysTool) list.get(i)).getId(); + } + sysToolService.updateSysToolStatusByIds(ids, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } else if (!mongo && update) { + for (Object obj : list) { + sysTool = (SysTool) obj; + sysTool.setName("修改测试"+System.currentTimeMillis()); + sysTool.setToolTypeId(1073140662133723136L); + sysTool.setToolIp("192.168.1.35"); + sysTool.setToolPort(8888); + sysTool.setToolDescription("描述修改测试"+System.currentTimeMillis()); + + sysToolService.updateSysTool(sysTool); + } + } + + // 是否进行删除测试,并判断进行批量或逐次删除 + if (delete && batchDelete) { + Long[] ids = new Long[num]; + for (int i = 0; i < num; i++) { + if (mongo) { + ids[i] = ((SysLogSystem) list.get(i)).getId(); + } else { + ids[i] = ((SysTool) list.get(i)).getId(); + } + } + if (mongo) { + syslogSystemService.deleteSysLogSystemByIds(ids); + } else { + sysToolService.deleteSysToolByIds(ids); + } + } else if (delete) { + for (Object obj : list) { + if (mongo) { + sysLogSystem = (SysLogSystem) obj; + syslogSystemService.deleteSysLogSystemById(sysLogSystem.getId()); + } else { + sysTool = (SysTool) obj; + sysToolService.deleteSysToolById(sysTool.getId()); + } + } + } + } + + return ResultBean.success("调用完成-耗时:" + (System.currentTimeMillis() - time) + ",数据量:" + num) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + + /** + * 数据库操作测试 + * + * @param num 操作数量 + * @return + */ + @GetMapping(value = "/data-insert") + @ApiOperation(value = "数据库造数据", notes = "数据库造数据") + public ResultBean dateInsert(int num, + boolean mongo, + int waitTime) { + try { + long time = System.currentTimeMillis(); + SysTool sysTool; + SysLogSystem sysLogSystem; + long t1 = System.currentTimeMillis(); + + // 新增数据 + if (!mongo) { + sysToolService.insertBatch(num,waitTime); + } else { + syslogSystemService.insertSysLogBatch(num,waitTime); + } + + return ResultBean.success("调用完成-耗时:" + (System.currentTimeMillis() - time) + ",数据量:" + num) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 缓存操作效率 + * + * @param redisKey 缓存key + * @param num 操作数量 + * @param batchPutCache 是否批量操作缓存 + * @param putCache 是否进行放入缓存操作 + * @param db 是否从数据库查询数据 + * @param mongo 是否从mongodb查询数据 + * @param cacheTime 缓存时间 + * @param deleteCache 是否进行缓存删除操作 + * @return + */ + @GetMapping(value = "/test-db-redis") + @ApiOperation(value = "缓存操作测试", notes = "数据库操作测试") + public ResultBean testDBRedis(String redisKey, int num, boolean batchPutCache, boolean putCache, boolean db, boolean mongo, int cacheTime, boolean deleteCache) { + try { + long time = System.currentTimeMillis(); + List list = null; + + // 是否放入缓存 + if (putCache) { + // 是否需要从数据库中查询 + if (db) { + Pager page = new Pager(); + page.setCurrentPage(1); + page.setPageSize(num); + + //是否对mongodb操作 + if (mongo) { + list = sysToolService.findSysToolByTop(num); + } else { + list = syslogSystemService.querySysLogSystemByPager(null, page).getObjectList(); + } + } else { + // 缓存测试 + list = new ArrayList(); + SysTool sysTool; + for (int i = 0; i < num; i++) { + sysTool = new SysTool(); + sysTool.setName("缓存对象"); + sysTool.setToolTypeId(1073141149285355520L); + sysTool.setToolIp("192.168.1.1"); + sysTool.setToolPort(8080); + sysTool.setToolStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + sysTool.setToolConnType(ImppEnumUtil.TOOL_CONN_TYPE.USB.getValue()); + sysTool.setToolDataType(ImppEnumUtil.TOOL_DATA_TYPE.STRING.getValue()); + sysTool.setToolDescription("描述"); + + list.add(sysTool); + } + } + + // 批量或是逐次放入缓存 + if (batchPutCache) { + redisRes.putList(redisKey, list, cacheTime); + } else { + for (int i = 0; i < list.size(); i++) { + redisRes.putObject(redisKey + i, list.get(i), cacheTime); + } + } + } + + if (deleteCache && batchPutCache) { + redisRes.deleteKey(redisKey); + } else if (deleteCache) { + for (int i = 0; i < list.size(); i++) { + redisRes.putObject(redisKey + i, list.get(i), cacheTime); + } + } + + return ResultBean.success("调用完成-耗时:" + (System.currentTimeMillis() - time) + ",数据量:" + list.size()) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 数据库查询测试 + * + * @param num 操作数据量 + * @param mongo 是否使用mongodb + * @param needCache 是否使用缓存 + * @param cacheTime 缓存时间 + * @return + */ + @GetMapping(value = "/test-db-query") + @ApiOperation(value = "数据库查询测试", notes = "数据库查询测试") + public ResultBean testDBQuery(int num, boolean mongo, boolean needCache, int cacheTime) { + try { + long time = System.currentTimeMillis(); + Pager page = new Pager(); + page.setCurrentPage(1); + page.setPageSize(num); + List list; + + // 是否放入缓存 + if (needCache) { + // 是否使用mongodb + if (mongo) { + list = redisRes.getList(SysLogSystem.class.getSimpleName() + num, 0, num); + if (list == null || list.size() == 0) { + list = syslogSystemService.querySysLogSystemByPager(null, page).getObjectList(); + redisRes.putList(SysLogSystem.class.getSimpleName() + num, list, cacheTime); + } + } else { + list = redisRes.getList(SysTool.class.getSimpleName() + num, 0, num); + if (list == null || list.size() == 0) { + list = sysToolService.findSysToolByTop(num); + redisRes.putList(SysTool.class.getSimpleName() + num, list, cacheTime); + } + } + } else { + // 是否使用mongodb + if (mongo) { + list = syslogSystemService.querySysLogSystemByPager(null, page).getObjectList(); + } else { + list = sysToolService.findSysToolByTop(num); + } + } + + return ResultBean.success("调用完成 耗时:" + (System.currentTimeMillis() - time) + ",数据量:" + list.size()) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 吞吐量测试 + * + * @param num 对象数量 + * @param objectLevel 对象等级 1.单对象,2.大对象,3.复杂对象 + * @return + */ + @GetMapping(value = "/test-throughput") + @ApiOperation(value = "吞吐量测试", notes = "吞吐量测试") + public ResultBean testThroughput(int num, int objectLevel) { + try { + long time = System.currentTimeMillis(); + List list = new ArrayList(); + + SysTool sysTool; + SessionUser sessionUser; + SysUser sysUser; + SysUserInfo sysUserInfo; + SysDepartment sysDept; + List deptList; + + for (int i = 0; i < num; i++) { + switch (objectLevel) { + // 单对象 + case 1: + sysTool = new SysTool(); + sysTool.setName("单对象测试"); + sysTool.setToolTypeId(1073141149285355520L); + sysTool.setToolIp("192.168.1.1"); + sysTool.setToolPort(8080); + sysTool.setToolStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + sysTool.setToolConnType(ImppEnumUtil.TOOL_CONN_TYPE.USB.getValue()); + sysTool.setToolDataType(ImppEnumUtil.TOOL_DATA_TYPE.STRING.getValue()); + sysTool.setToolDescription("描述"); + + list.add(sysTool); + break; + // 大对象 + case 2: + deptList = new ArrayList<>(); + + for (int j = 0; j < 300; j++) { + sysDept = new SysDepartment(); + sysDept.setName("部门名称"); + sysDept.setDepartmentCode("部门code"); + sysDept.setParentNameRdd("上级部门名称"); + + deptList.add(sysDept); + } + + sysUser = new SysUser(); + sysUser.setUserName("用户名"); + sysUser.setUserStatus(CommonEnumUtil.USER_STATUS.ENABLE.getValue()); + sysUser.setUserLoginPassword("123456"); + sysUser.setDepartmentId(1L); + sysUser.setOrganizeId(1L); + sysUser.setDepartmentNameRdd("部门名称"); + sysUser.setOrganizeNameRdd("组织名称"); + sysUser.setUserLoginNum(1); + sysUser.setDepartmentList(deptList); + + list.add(sysUser); + break; + // 复杂对象 + case 3: + deptList = new ArrayList<>(); + sysDept = new SysDepartment(); + sysDept.setName("部门名称"); + sysDept.setDepartmentCode("部门code"); + sysDept.setParentNameRdd("上级部门名称"); + deptList.add(sysDept); + + sysDept.setChildList(deptList); + + sysUser = new SysUser(); + sysUser.setUserName("用户名"); + sysUser.setUserStatus(CommonEnumUtil.USER_STATUS.ENABLE.getValue()); + sysUser.setUserLoginPassword("123456"); + sysUser.setDepartmentId(1L); + sysUser.setOrganizeId(1L); + sysUser.setDepartmentNameRdd("部门名称"); + sysUser.setOrganizeNameRdd("组织名称"); + sysUser.setUserLoginNum(1); + sysUser.setDepartment(sysDept); + sysUser.setDepartmentList(deptList); + + sysUserInfo = new SysUserInfo(); + sysUserInfo.setName("yonghuming"); + sysUserInfo.setOrganizeId(1L); + sysUserInfo.setPositionId(1L); + sysUserInfo.setDepartmentNameRdd("部门名称"); + sysUserInfo.setOrganizeNameRdd("组织名称"); + + sessionUser = new SessionUser(); + sessionUser.setUserName("用户名"); + sessionUser.setLanguageCode("zh/CN"); + sessionUser.setUserCode("10086"); + sessionUser.setUserType("测试用户"); + sessionUser.setUserId(1L); + sessionUser.setUser(sysUser); + sessionUser.setUserInfo(sysUserInfo); + + list.add(sessionUser); + break; + } + } + + return ResultBean.success("调用完成-耗时:" + (System.currentTimeMillis() - time) + ",数量:" + list.size()) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(list); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + + /** + * 可靠性测试 + * @param needChangeHealth 是否需要修改健康状态 + * @param serverHealth 设置微服务健康状态 + * @param needSleep 是否需要线程睡眠 + * @param sleepTime 睡眠时间ms + * @return + */ + @GetMapping(value = "/test-network") + @ApiOperation(value = "网络测试", notes = "网络测试") + public ResultBean testNetwork(boolean needChangeHealth,boolean serverHealth,boolean needSleep, int sleepTime) { + try { + long time = System.currentTimeMillis(); + + if(needChangeHealth){ + healthCheck.setHealth(serverHealth); + } + + if (needSleep) { + Thread.sleep(sleepTime); + } + + return ResultBean.success("调用完成-耗时:" + (System.currentTimeMillis() - time)) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 多表查询 + * @param num 查询数量 + * @param needCache 是否使用缓存 + * @param cacheTime 缓存时间 + * @return + */ + @GetMapping(value = "/test-complex-query") + @ApiOperation(value = "多表查询", notes = "多表查询") + public ResultBean testComplexQuery(int num, boolean needCache, int cacheTime) { + try { + long time = System.currentTimeMillis(); + Pager page = new Pager(); + page.setCurrentPage(1); + page.setPageSize(num); + List list; + + if (needCache) { + list = redisRes.getList(Object.class.getSimpleName() + num, 0, num); + if (list == null || list.size() == 0) { + list = testService.queryToolAndToolType(page); + redisRes.putList(SysTool.class.getSimpleName() + num, list, cacheTime); + } + } else { + list = testService.queryToolAndToolType(page); + } + + return ResultBean.success("调用完成-耗时:" + (System.currentTimeMillis() - time) + ",数量:" + list.size()) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/test-gc") + @ApiOperation(value = "垃圾回收", notes = "垃圾回收") + public ResultBean gc() { + try { + System.gc(); + return ResultBean.success("调用完成").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TestThread.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TestThread.java new file mode 100644 index 0000000..54f1394 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/TestThread.java @@ -0,0 +1,31 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-02-19 18:13 + * @Modify: + **/ +public class TestThread implements Runnable { + + private Thread t; + private int piLength = 0; + + public TestThread (int piLength){ + this.piLength = piLength; + } + + @Override + public void run() { + ComputePi.computePi(piLength); + } + + public void start () { + if (t == null) { + t = new Thread (this); + t.start (); + } + } +} + diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/Text.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/Text.java new file mode 100644 index 0000000..9c1499c --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/Text.java @@ -0,0 +1,52 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import java.lang.management.ManagementFactory; +import java.util.Random; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-02-19 11:41 + * @Modify: + **/ +public class Text { + + public static void main(String[] args) { + + String name = ManagementFactory.getRuntimeMXBean().getName(); + System.out.println(name); +// get pid + String pid = name.split("@")[0]; + System.out.println("Pid is:" + pid); + for (int i = 0; i < 1; i++) { + TestThread th1 = new TestThread(i); + th1.start(); + } + + +// System.out.println("Please input times: "); +// caculatePI(100000000); + } + + + public static void caculatePI(int countInSquarel) { + int countInCircle = 0, i, resulttimes; + double x, y; /* 坐标 */ + Random s = new Random(); + for (resulttimes = 0; resulttimes < 10; resulttimes++) { /* 输出十次结果 */ + for (i = 1; i <= countInSquarel; i++) { + x = s.nextDouble(); /* 在0~1之间产生一个随机x坐标 */ + y = s.nextDouble(); /* 在0~1之间产生一个随机y坐标 */ + if (caculateAcreage(x, y) <= 1.0) + countInCircle++; /* 统计落入单位圆中的点数 */ + } + System.out.println("The result of pai is " + (double) countInCircle / countInSquarel * 4); /* 计算出π的值 */ + countInCircle = 0; + } + } + + private static double caculateAcreage(double xPosition, double yPosition) { + return xPosition * xPosition + yPosition * yPosition; + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/ITestDao.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/ITestDao.java new file mode 100644 index 0000000..696fda5 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/ITestDao.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.core.apiservice.dao; + +import cn.estsh.i3plus.pojo.base.common.Pager; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-02-20 21:15 + * @Modify: + **/ +public interface ITestDao { + + List queryToolAndToolType(Pager pager); +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/TestDaoImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/TestDaoImpl.java new file mode 100644 index 0000000..d788613 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/TestDaoImpl.java @@ -0,0 +1,36 @@ +package cn.estsh.i3plus.core.apiservice.daoimpl; + +import cn.estsh.i3plus.core.apiservice.dao.ITestDao; +import cn.estsh.i3plus.pojo.base.common.Pager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityManager; +import java.util.List; + +/** + * @Description : 多表测试 + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-02-20 21:17 + * @Modify: + **/ +@Service +public class TestDaoImpl implements ITestDao { + public static final Logger LOGGER = LoggerFactory.getLogger(UserPermissionDaoImpl.class); + + @Autowired + private EntityManager entityManager; + + @Override + public List queryToolAndToolType(Pager pager) { + String hql = "select t,tt from SysTool as t " + + " left join SysToolType as tt on t.toolTypeId = tt.id " + + " where 1=1"; + + return entityManager.createQuery(hql).setFirstResult(pager.getStartRow()) + .setMaxResults(pager.getPageSize()).getResultList(); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java index 047a4b7..4d3de1d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java @@ -7,6 +7,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.platform.bean.SysMessage; import cn.estsh.impp.framework.base.schedule.BaseImppScheduleJob; import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.alibaba.fastjson.JSON; import io.swagger.annotations.ApiOperation; import org.quartz.JobExecutionContext; import org.slf4j.Logger; diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleLanguageService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleLanguageService.java index 14498be..2ed87eb 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleLanguageService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleLanguageService.java @@ -199,6 +199,6 @@ public class SysLocaleLanguageService implements ISysLocaleLanguageService { @Override @ApiOperation(value = "根据语言状态查询语言信息") public List findSysLocaleLanguageByStatus(Integer status) { - return sysLocaleLanguageRDao.findByProperty("isDefault",status); + return sysLocaleLanguageRDao.findByProperty("languageStatus",status); } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogSystemService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogSystemService.java index 53ca703..56fd50e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogSystemService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogSystemService.java @@ -5,6 +5,9 @@ import cn.estsh.i3plus.core.apiservice.dao.ISysLogSystemDao; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysTool; import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem; import cn.estsh.i3plus.pojo.platform.platrepositorymongo.SysLogSystemRepository; import cn.estsh.i3plus.pojo.platform.sqlpack.CoreBsonPack; @@ -39,6 +42,33 @@ public class SysLogSystemService implements ISysLogSystemService { logSystemRDao.insert(logSystem); } + + @Override + public void insertSysLogBatch(int num,int waitTime){ + long t1 = System.currentTimeMillis(); + SysLogSystem sysLogSystem = null; + for (int i = 0; i < num * 1000; i++) { + sysLogSystem = new SysLogSystem(); + sysLogSystem.setLogClass("新增测试class"); + sysLogSystem.setLogMethod("新增测试method" +System.currentTimeMillis()); + sysLogSystem.setLogArgs("新增测试参数" + System.currentTimeMillis()); + sysLogSystem.setExecuteTime(0L); + sysLogSystem.setArgsCount(1); + sysLogSystem.setLogDetail("2333"); + sysLogSystem.setLogLevel(ImppEnumUtil.LOG_LEVEL.DEBUG.getValue()); + sysLogSystem.setLogModuleId(CommonEnumUtil.SOFT_TYPE.CORE.getValue()); + sysLogSystem.setLogTitle("新增测试"); + + logSystemRDao.insert(sysLogSystem); + try { + this.wait(waitTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + LOGGER.info("插入SysLog耗时:" + (System.currentTimeMillis() - t1) + ",idx:" + i); + } + } + @Override @ApiOperation(value = "删除日志",notes = "删除日志") public void deleteSysLogSystemById(Long id) { @@ -70,4 +100,9 @@ public class SysLogSystemService implements ISysLogSystemService { ,logSystem.getAscOrDesc()),pager); } } + + @Override + public void deleteSysLogSystemByIds(Long[] ids) { + logSystemRDao.deleteByIds(ids); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolService.java index 9bdcf72..0c60803 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolService.java @@ -74,6 +74,31 @@ public class SysToolService implements ISysToolService { } @Override + public void insertBatch(int num,int waitTime){ + long t1 = System.currentTimeMillis(); + SysTool sysTool = new SysTool(); + for (int i = 0; i < num * 1000; i++) { + sysTool = new SysTool(); + //sysTool.setId(System.currentTimeMillis()); + sysTool.setName("新增测试"); + sysTool.setToolTypeId(1073140662133723136L); + sysTool.setToolIp("192.168.1.35"); + sysTool.setToolPort(8888); + sysTool.setToolDescription("描述新增测试"); + + toolRDao.insert(sysTool); + + try { +// wait(waitTime); + Thread.sleep(waitTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + LOGGER.info("插入耗时:" + (System.currentTimeMillis() - t1) + ",idx:" + i); + } + } + + @Override @ApiOperation(value = "查询设备信息",notes = "查询所有设备信息") public List listSysTool() { LOGGER.info("硬件 TOOL list"); @@ -124,4 +149,8 @@ public class SysToolService implements ISysToolService { toolRDao.updateByHqlWhere(where.toString(), "toolStatus", status); } + + public List findSysToolByTop(int topNum) { + return toolRDao.findByHqlTopWhere("",topNum); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java new file mode 100644 index 0000000..b2b1b82 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ITestService; +import cn.estsh.i3plus.core.apiservice.dao.ITestDao; +import cn.estsh.i3plus.pojo.base.common.Pager; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-02-20 21:24 + * @Modify: + **/ +@Service +public class TestService implements ITestService { + + @Autowired + ITestDao testDao; + + @Override + @ApiOperation(value = "多表查询") + public List queryToolAndToolType(Pager pager) { + return testDao.queryToolAndToolType(pager); + } +}