src/main/java/com/whyc/controller/AFECtrlController.java
@@ -1,15 +1,15 @@ package com.whyc.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.pagehelper.Page; import com.github.pagehelper.PageInfo; import com.whyc.dto.Response; import com.whyc.pojo.AFEInverterControl; import com.whyc.service.AFECtrlService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("afeCtrl") src/main/java/com/whyc/controller/AFEInverterController.java
@@ -17,7 +17,7 @@ @RestController @RequestMapping("afeInverter") @Api(tags = "afe变频器-逆变器的实时数据信息") @Api(tags = "afe变频器-逆变器的数据信息") public class AFEInverterController { @Autowired @@ -36,7 +36,7 @@ } @GetMapping("tableNames") @ApiOperation(value = "查询历史记录存在的表格") @ApiOperation(value = "查询历史记录存在的表") public Response<String> getTableNames(){ return service.getTableNames(); } @@ -44,11 +44,12 @@ /** * ======History====== * 历史查询时,因为历史记录是按照日期分表的,如果查询所有的日期表(union)后再分页,会导致速度极慢,故查询按照单个日期查询 * TODO 待确定是否需要加上日期 * */ @GetMapping("history/all") @ApiOperation(value = "获取所有历史记录") public Response<PageInfo<AFEInverterState>> getHistory(@RequestParam int pageNum, int pageSize,String tablePrefixTime){ return service.getHistory(pageNum,pageSize,tablePrefixTime); @ApiOperation(value = "查询历史记录") public Response<PageInfo<AFEInverterState>> getHistory(@RequestParam int pageNum, int pageSize,int devId){ return service.getHistory(pageNum,pageSize,devId); } } src/main/java/com/whyc/controller/AFERectifierController.java
@@ -1,7 +1,9 @@ package com.whyc.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.pagehelper.PageInfo; import com.whyc.dto.Response; import com.whyc.pojo.AFEInverterState; import com.whyc.pojo.AFERectifierState; import com.whyc.service.AFERectifierService; import io.swagger.annotations.Api; @@ -21,15 +23,26 @@ AFERectifierService service; @GetMapping("all") @ApiOperation(value = "获取所有数据信息") @ApiOperation(value = "查询所有数据信息") public Response<IPage<AFERectifierState>> getAll(@RequestParam int pageNum, int pageSize){ return service.getAll(pageNum,pageSize); } @GetMapping("infoByDevId") @ApiOperation(value = "获取单个数据信息:根据设备id") @ApiOperation(value = "查询单个数据信息:根据设备id") public Response<AFERectifierState> getInfoByDevId(@RequestParam int devId){ return service.getInfoByDevId(devId); } /** * ======History====== * 历史查询时,因为历史记录是按照日期分表的,如果查询所有的日期表(union)后再分页,会导致速度极慢,故查询按照单个日期查询 * TODO 待确定是否需要加上日期 * */ @GetMapping("history/all") @ApiOperation(value = "查询历史记录") public Response<PageInfo<AFERectifierState>> getHistory(@RequestParam int pageNum, int pageSize, int devId){ return service.getHistory(pageNum,pageSize,devId); } } src/main/java/com/whyc/controller/TestController.java
New file @@ -0,0 +1,30 @@ package com.whyc.controller; import com.whyc.dto.Response; import com.whyc.dto.multiTree.MultiTree; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; /** * 作为功能测试接口,实际项目不可调用! */ @RestController @RequestMapping("test") @ApiIgnore public class TestController { @GetMapping("test") public Response<MultiTree> test(){ MultiTree multiTree = new MultiTree(); String dates = "2020-01-02,2020-01-03,2020-02-03,2021-06-06,2021-05-06"; String[] dateArr = dates.split(","); MultiTree tree = new MultiTree().saveAsTree(dateArr); return new Response<MultiTree>().set(1,tree); } } src/main/java/com/whyc/dto/binaryTree/BinaryTree.java
New file @@ -0,0 +1,113 @@ package com.whyc.dto.binaryTree; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 二叉树 */ public class BinaryTree { TreeNode root =null; public BinaryTree() { this.root = new TreeNode(0,"A"); } public BinaryTree(TreeNode root) { this.root = root; } @Override public String toString() { return "BinaryTree{" + "root=" + root + '}'; } /** * 创建二叉树,手动传统 */ public BinaryTree createBinaryTree(){ TreeNode nodeB = new TreeNode(2, "B"); TreeNode nodeC = new TreeNode(3, "C"); TreeNode nodeD = new TreeNode(4, "D"); TreeNode nodeE = new TreeNode(5, "E"); TreeNode nodeF = new TreeNode(6, "F"); root.leftChild = nodeB; root.rightChild = nodeC; nodeB.leftChild = nodeD; nodeB.rightChild =nodeF; BinaryTree binaryTree = new BinaryTree(root); return binaryTree; } public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException { Class<BinaryTree> binaryTreeClass = BinaryTree.class; Method method = binaryTreeClass.getDeclaredMethod("createBinaryTree"); BinaryTree root = (BinaryTree) method.invoke(binaryTreeClass.newInstance()); } class TreeNode{ private int index; private String data; private TreeNode leftChild; private TreeNode rightChild; public TreeNode(int index, String data) { this.index = index; this.data = data; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public String getData() { return data; } public void setData(String data) { this.data = data; } public TreeNode getLeftChild() { return leftChild; } public void setLeftChild(TreeNode leftChild) { this.leftChild = leftChild; } public TreeNode getRightChild() { return rightChild; } public void setRightChild(TreeNode rightChild) { this.rightChild = rightChild; } @Override public String toString() { return "TreeNode{" + "index=" + index + ", data='" + data + '\'' + ", leftChild=" + leftChild + ", rightChild=" + rightChild + '}'; } } } src/main/java/com/whyc/dto/multiTree/MultiTree.java
New file @@ -0,0 +1,184 @@ package com.whyc.dto.multiTree; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 多叉树之三层 */ public class MultiTree { TreeNode root = null; public MultiTree(TreeNode root) { this.root = root; } public MultiTree() { } TreeNode getIndex(TreeNode node,int index){ if(node==null){ return null; }else{ List<TreeNode> node1 = node.getNode(); for (int i = 0; i < node1.size(); i++) { if(node1.get(i).getIndex()==index){ return node1.get(i); }else{ getIndex(node1.get(i),index); } } } return null; } class TreeNode { private int index; private String data; private List<TreeNode> node; public TreeNode(int index, String data) { this.index = index; this.data = data; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public String getData() { return data; } public void setData(String data) { this.data = data; } public List<TreeNode> getNode() { return node; } public void setNode(List<TreeNode> node) { this.node = node; } } public TreeNode getRoot() { return root; } public void setRoot(TreeNode root) { this.root = root; } public static void main(String[] args) { String dates = "2020-01-02,2020-01-03,2020-02-03,2021-06-06,2021-05-06"; String[] dateArr = dates.split(","); MultiTree tree = new MultiTree().saveAsTree(dateArr); System.out.println(tree); } /** * 处理3层数据结构 * @param dateArr * @return */ public MultiTree saveAsTree(String[] dateArr) { root = new TreeNode(0,"0"); int index = 0; for (int i = 0; i < dateArr.length; i++) { //dataArr[i]="2020-01-02" String[] date = dateArr[i].split("-"); String year = date[0]; String month = date[1]; String day = date[2]; //查看第一层year层是否存在,不存在则添加节点到year节点list中 TreeNode currTreeNode = null; if(root.getNode()==null){ ArrayList<TreeNode> level1Nodes = new ArrayList<>(); level1Nodes.add(new TreeNode(++index, year)); root.setNode(level1Nodes); //直接存储第二层month ArrayList<TreeNode> level2Nodes = new ArrayList<>(); level2Nodes.add(new TreeNode(++index, month)); level1Nodes.get(0).setNode(level2Nodes); //直接存储第三层day ArrayList<TreeNode> level3Nodes = new ArrayList<>(); level3Nodes.add(new TreeNode(++index, day)); level2Nodes.get(0).setNode(level3Nodes); }else{ List<TreeNode> level1Nodes = root.getNode(); boolean lv1Exist = false; //int lv1ExistIndex = 0; for (int j = 0; j < level1Nodes.size(); j++) { //第一层year层 if(level1Nodes.get(j).getData().equals(year)){ lv1Exist = true; //lv1ExistIndex = level1Nodes.get(j).getIndex(); currTreeNode = level1Nodes.get(j); break; } } //第一层year层存在 if(lv1Exist){ //判断第二层month是否存在 TreeNode level1TreeNode = currTreeNode; List<TreeNode> level2Nodes = level1TreeNode.getNode(); boolean lv2Exist = false; //int lv2ExistIndex = 0; for (int j = 0; j < level2Nodes.size(); j++) { //第二层month层 if(level2Nodes.get(j).getData().equals(month)){ lv2Exist = true; //lv2ExistIndex = level2Nodes.get(j).getIndex(); currTreeNode = level2Nodes.get(j); break; } } //第二层month层存在 if(lv2Exist){ //判断第三层day层直接添加 //TreeNode level3TreeNode = level2Nodes.get(lv2ExistIndex); TreeNode level2TreeNode = currTreeNode; List<TreeNode> level3Nodes = level2TreeNode.getNode(); level3Nodes.add(new TreeNode(++index,day)); level2TreeNode.setNode(level3Nodes); }else{ //month层不存在 level2Nodes.add(new TreeNode(++index,month)); //直接存储第二层month层 //直接存储第三层day level2Nodes.get(level2Nodes.size()-1).setNode(Arrays.asList(new TreeNode(++index,day))); } }else{ //year层不存在 level1Nodes.add(new TreeNode(++index,year)); //直接存储第二层month层 ArrayList<TreeNode> level2Nodes = new ArrayList<>(); level2Nodes.add(new TreeNode(++index, month)); level1Nodes.get(level1Nodes.size()-1).setNode(level2Nodes); //直接存储第三层day ArrayList<TreeNode> level3Nodes = new ArrayList<>(); level3Nodes.add(new TreeNode(++index,day)); level2Nodes.get(0).setNode(level3Nodes); } } } return this; } } src/main/java/com/whyc/mapper/AFERectifierHistoryMapper.java
New file @@ -0,0 +1,11 @@ package com.whyc.mapper; import com.whyc.pojo.AFERectifierState; import java.util.List; public interface AFERectifierHistoryMapper { List<AFERectifierState> getHistory(List<String> tableNames); } src/main/java/com/whyc/service/AFECtrlService.java
@@ -1,8 +1,6 @@ package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.dto.Response; src/main/java/com/whyc/service/AFEInverterService.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.dto.Response; @@ -31,7 +31,7 @@ /**分页*/ public Response getAll(int pageNum,int pageSize) { IPage<AFEInverterState> afeInverterStateIPage = mapper.selectPage(new Page<>(pageNum, pageSize), null); IPage<AFEInverterState> afeInverterStateIPage = mapper.selectPage(new Page(pageNum, pageSize), null); return new Response().set(1,afeInverterStateIPage); } @@ -46,18 +46,17 @@ /**======History======*/ public Response<PageInfo<AFEInverterState>> getHistory(int pageNum, int pageSize,String tablePrefixTime) { public Response<PageInfo<AFEInverterState>> getHistory(int pageNum, int pageSize,int devId) { List<String> tableNames = commonMapper.getTableName("db_3.5mw_motor_history", "tb_afe_inverter_state_" + devId); PageHelper.startPage(pageNum,pageSize); List<AFEInverterState> afeInverterStates = historyMapper.getHistory(tableNames); PageInfo<AFEInverterState> afeInverterStatePageInfo = new PageInfo<>(afeInverterStates); return new Response<PageInfo<AFEInverterState>>().set(1,afeInverterStatePageInfo); } /**采用二叉树*/ /**采用N叉树(二叉树的特殊版)*/ public Response<String> getTableNames() { List<String> tableNames = commonMapper.getTableName("`db_3.5mw_motor`", "tb_afe_inverter_state"); List<String> tableNames = commonMapper.getTableName("db_3.5mw_motor_history", "tb_afe_inverter_state"); for (int i = 0; i < tableNames.size(); i++) { String tableName = tableNames.get(i); String year = tableName.split("_")[4]; src/main/java/com/whyc/service/AFERectifierService.java
@@ -4,19 +4,31 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.dto.Response; import com.whyc.mapper.AFERectifierHistoryMapper; import com.whyc.mapper.AFERectifierMapper; import com.whyc.mapper.CommonMapper; import com.whyc.pojo.AFEInverterState; import com.whyc.pojo.AFERectifierState; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.sql.Wrapper; import java.util.List; @Service public class AFERectifierService { @Resource private AFERectifierMapper mapper; @Resource private AFERectifierHistoryMapper historyMapper; @Resource private CommonMapper commonMapper; /**分页*/ public Response<IPage<AFERectifierState>> getAll(int pageNum,int pageSize) { @@ -30,4 +42,12 @@ AFERectifierState afeRectifierState = mapper.selectOne(query); return new Response<AFERectifierState>().set(1,afeRectifierState); } public Response<PageInfo<AFERectifierState>> getHistory(int pageNum, int pageSize, int devId) { List<String> tableNames = commonMapper.getTableName("db_3.5mw_motor_history", "tb_afe_rectifier_state_" + devId); PageHelper.startPage(pageNum,pageSize); List<AFERectifierState> afeInverterStates = historyMapper.getHistory(tableNames); PageInfo<AFERectifierState> afeInverterStatePageInfo = new PageInfo<>(afeInverterStates); return new Response<PageInfo<AFERectifierState>>().set(1,afeInverterStatePageInfo); } } src/main/resources/mapper/AFEInverterHistoryMapper.xml
@@ -4,6 +4,8 @@ <select id="getHistory" resultType="com.whyc.pojo.AFEInverterState"> <foreach collection="list" item="tableName" separator="union all"> select * from `db_3.5mw_motor_history`.${tableName} </foreach> </select> </mapper> src/main/resources/mapper/AFERecitfierHistoryMapper.xml
New file @@ -0,0 +1,10 @@ <?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.whyc.mapper.AFERectifierHistoryMapper" > <select id="getHistory" resultType="com.whyc.pojo.AFERectifierState"> <foreach collection="list" item="tableName" separator="union all"> select * from `db_3.5mw_motor_history`.${tableName} </foreach> </select> </mapper>