src/main/java/com/whyc/controller/AbeTestDataController.java
New file @@ -0,0 +1,22 @@ package com.whyc.controller; import com.github.pagehelper.PageInfo; import com.whyc.dto.Response; import com.whyc.pojo.db_abe_testdata.AbeTestDataInf; import com.whyc.service.AbeTestDataInfService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; 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; @Api(tags = "活化测试单体记录") @RestController @RequestMapping("abeTestData") public class AbeTestDataController { @Autowired private AbeTestDataInfService service; } src/main/java/com/whyc/controller/AbeTestDataInfController.java
New file @@ -0,0 +1,30 @@ package com.whyc.controller; import com.github.pagehelper.PageInfo; import com.whyc.dto.Response; import com.whyc.pojo.db_abe_testdata.AbeTestDataInf; import com.whyc.service.AbeTestDataInfService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; 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; @Api(tags = "活化测试数据") @RestController @RequestMapping("abeTestDataInf") public class AbeTestDataInfController { @Autowired private AbeTestDataInfService service; @ApiOperation("查询分页") @GetMapping("getPage") public Response<PageInfo<AbeTestDataInf>> getPage(@RequestParam int pageNum, @RequestParam int pageSize){ return service.getPage(pageNum,pageSize); } } src/main/java/com/whyc/mapper/AbeRamMapper.java
New file @@ -0,0 +1,6 @@ package com.whyc.mapper; import com.whyc.pojo.db_abe_ram.AbeRam; public interface AbeRamMapper extends CustomMapper<AbeRam>{ } src/main/java/com/whyc/mapper/AbeStateMapper.java
New file @@ -0,0 +1,6 @@ package com.whyc.mapper; import com.whyc.pojo.db_abe_ram.AbeState; public interface AbeStateMapper extends CustomMapper<AbeState>{ } src/main/java/com/whyc/mapper/AbeTestDataInfMapper.java
New file @@ -0,0 +1,6 @@ package com.whyc.mapper; import com.whyc.pojo.db_abe_testdata.AbeTestDataInf; public interface AbeTestDataInfMapper extends CustomMapper<AbeTestDataInf>{ } src/main/java/com/whyc/pojo/db_abe_ram/AbeInf.java
New file @@ -0,0 +1,18 @@ package com.whyc.pojo.db_abe_ram; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.ToString; @TableName(schema = "db_abe_ram",value = "tb_abe_inf") @ToString @Data public class AbeInf { private Integer id; private String abeIp; private String abeName; @ApiModelProperty("abe设备对应的单体编号") private Integer abeMonId; } src/main/java/com/whyc/pojo/db_abe_ram/AbeRam.java
New file @@ -0,0 +1,48 @@ package com.whyc.pojo.db_abe_ram; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.ToString; import java.util.Date; /** * 活化状态表 */ @TableName(schema = "db_abe_ram",value = "tb_abe_ram") @ToString @Data public class AbeRam { @ApiModelProperty("自增主键") private Integer num; @ApiModelProperty("单体编号") private Integer monId; @ApiModelProperty("记录时间") private Date recordTime; @ApiModelProperty("单体电压") private Float monVol; @ApiModelProperty("单体温度") private Float monTmp; @ApiModelProperty("单体内阻") private Float monRes; @ApiModelProperty("被测单体编号") private Integer testMonNum; @ApiModelProperty("测试状态") private Integer testState; @ApiModelProperty("电池电压") private Float groupVol; @ApiModelProperty("电池电流") private Float groupCurr; @ApiModelProperty("测试时长") private Integer testTimeLong; @ApiModelProperty("测试容量") private Float testCap; @ApiModelProperty("静置时间") private Integer waitTime; @ApiModelProperty("活化次数") private Integer cycCount; @ApiModelProperty("工作状态[0-无测试 253-放电测试 252-充电测试 249-活化测试]") private Integer nowTestState; } src/main/java/com/whyc/pojo/db_abe_ram/AbeState.java
New file @@ -0,0 +1,69 @@ package com.whyc.pojo.db_abe_ram; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.ToString; import java.util.Date; /** * 活化状态表 * CREATE TABLE db_abe_ram.tb_abe_state( * num bigint NOT NULL DEFAULT nextval('db_abe_ram.tb_abe_state_auto'::regclass), * abe_id bigint NOT NULL DEFAULT 1, * record_time timestamp without time zone NOT NULL DEFAULT '2000-01-01 00:00:00'::timestamp without time zone, * now_mon_id integer NOT NULL DEFAULT 1, * cnn_state integer NOT NULL DEFAULT 0, * comm_errcount integer NOT NULL DEFAULT 0, * comm_totalcount integer NOT NULL DEFAULT 0, * PRIMARY KEY (num), * CONSTRAINT idx_abe_id UNIQUE ( abe_id) * ) * * ; * * ALTER TABLE db_abe_ram.tb_abe_state * OWNER TO sysdba; * * COMMENT ON COLUMN db_abe_ram.tb_abe_state.num IS '自增主键'; * * COMMENT ON COLUMN db_abe_ram.tb_abe_state.abe_id IS 'ABE的id号'; * * COMMENT ON COLUMN db_abe_ram.tb_abe_state.record_time IS '更新下时间'; * * COMMENT ON COLUMN db_abe_ram.tb_abe_state.now_mon_id IS '当前接入单体编号'; * * COMMENT ON COLUMN db_abe_ram.tb_abe_state.cnn_state IS '连接状态(0-未连接 1-已连接)'; * * COMMENT ON COLUMN db_abe_ram.tb_abe_state.comm_errcount IS '通信错误计数'; * * COMMENT ON COLUMN db_abe_ram.tb_abe_state.comm_totalcount IS '通信计数'; * * COMMENT ON CONSTRAINT idx_abe_id ON db_abe_ram.tb_abe_state IS '设备ID'; */ @TableName(schema = "db_abe_ram",value = "tb_abe_state") @ToString @Data public class AbeState { @ApiModelProperty("自增主键") private Integer num; @ApiModelProperty("ABE的id号") private Integer abeId; @ApiModelProperty("更新下时间") private Date recordTime; @ApiModelProperty("当前接入单体编号") private Integer nowMonId; @ApiModelProperty("连接状态(0-未连接 1-已连接)") private Integer cnnState; @ApiModelProperty("通信错误计数") @TableField("comm_errcount") private Integer commErrCount; @ApiModelProperty("通信计数") @TableField("comm_totalcount") private Integer commTotalCount; } src/main/java/com/whyc/pojo/db_abe_testdata/AbeTestData.java
New file @@ -0,0 +1,50 @@ package com.whyc.pojo.db_abe_testdata; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.ToString; import java.util.Date; /** * */ @TableName(schema = "db_abe_testdata",value = "tb_abe_testdata") @ToString @Data public class AbeTestData { @ApiModelProperty("自增主键") private Integer num; @ApiModelProperty("单体ID") private Integer monId; @ApiModelProperty("测试次数") private Integer testRecordCount; @ApiModelProperty("记录时间") private Date recordTime; @ApiModelProperty("测试开始时间") @TableField("test_starttime") private Date testStartTime; @ApiModelProperty("测试类型") private Integer testType; @ApiModelProperty("记录笔数") private Integer recordNum; @ApiModelProperty("测试时长") @TableField("test_timelong") private Integer testTimeLong; @ApiModelProperty("电池电压") private Float groupVol; @ApiModelProperty("测试电流") private Float testCurr; @ApiModelProperty("测试容量") private Float testCap; @ApiModelProperty("单体电压") private Float monVol; @ApiModelProperty("单体温度") private Float monTmp; @ApiModelProperty("单体内阻") private Float monRes; } src/main/java/com/whyc/pojo/db_abe_testdata/AbeTestDataInf.java
New file @@ -0,0 +1,54 @@ package com.whyc.pojo.db_abe_testdata; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.ToString; import java.util.Date; /** * 测试信息表 */ @TableName(schema = "db_abe_testdata",value = "tb_abe_testdata_inf") @ToString @Data public class AbeTestDataInf { @ApiModelProperty("自增主键") private Integer num; @ApiModelProperty("单体ID") private Integer monId; @ApiModelProperty("测试笔数") private Integer testRecordCount; @ApiModelProperty("记录时间") private Date recordTime; @ApiModelProperty("记录笔数") private Integer recordNum; @ApiModelProperty("测试开始时间") @TableField("test_starttime") private Date testStartTime; @ApiModelProperty("测试类型[2-充电 3-放电 4-活化]") private Integer testType; @ApiModelProperty(" 测试时长") @TableField("test_timelong") private Integer testTimeLong; @ApiModelProperty("停止原因") @TableField("test_stoptype") private Integer testStopType; @ApiModelProperty("组端电压") private Float groupVol; @ApiModelProperty("测试电流") private Float testCurr; @ApiModelProperty("测试容量") private Float testCap; @TableField(exist = false) private Float monVol; @TableField(exist = false) private Float monTmp; @TableField(exist = false) private Float monRes; } src/main/java/com/whyc/service/AbeRamService.java
New file @@ -0,0 +1,24 @@ package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.whyc.dto.Response; import com.whyc.mapper.AbeRamMapper; import com.whyc.pojo.db_abe_ram.AbeRam; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class AbeRamService { @Resource private AbeRamMapper mapper; public Response<AbeRam> get() { QueryWrapper<AbeRam> query = Wrappers.query(); query.last(" limit 1"); AbeRam abeRam = mapper.selectOne(query); return new Response<AbeRam>().set(1,abeRam); } } src/main/java/com/whyc/service/AbeStateService.java
New file @@ -0,0 +1,24 @@ package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.whyc.dto.Response; import com.whyc.mapper.AbeStateMapper; import com.whyc.pojo.db_abe_ram.AbeState; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class AbeStateService { @Resource private AbeStateMapper mapper; public Response<AbeState> get() { QueryWrapper<AbeState> query = Wrappers.query(); query.last(" limit 1"); AbeState abeState = mapper.selectOne(query); return new Response<AbeState>().set(1,abeState); } } src/main/java/com/whyc/service/AbeTestDataInfService.java
New file @@ -0,0 +1,83 @@ package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.dto.Response; import com.whyc.mapper.AbeTestDataInfMapper; import com.whyc.mapper.CallBack; import com.whyc.pojo.db_abe_testdata.AbeTestData; import com.whyc.pojo.db_abe_testdata.AbeTestDataInf; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.sql.ResultSet; import java.sql.SQLException; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service public class AbeTestDataInfService { @Resource private AbeTestDataInfMapper mapper; @Autowired private JdbcSqlExecuteService jdbcSqlExecuteService; public Response<PageInfo<AbeTestDataInf>> getPage(int pageNum, int pageSize) { PageHelper.startPage(pageNum,pageSize); QueryWrapper<AbeTestDataInf> query = Wrappers.query(); query.orderByDesc("record_time"); List<AbeTestDataInf> list = mapper.selectList(query); //对list进行monId分类,来进行单体表查询 Map<Integer, List<AbeTestDataInf>> monIdMap = list.stream().collect(Collectors.groupingBy(AbeTestDataInf::getMonId)); for (Integer monId : monIdMap.keySet()) { List<AbeTestDataInf> dataList = monIdMap.get(monId); List<Integer> testRecordCountList = dataList.stream().map(AbeTestDataInf::getTestRecordCount).collect(Collectors.toList()); List<AbeTestData> monDataList = getList(monId, testRecordCountList); for (AbeTestDataInf data : dataList) { for (AbeTestData monData : monDataList) { if (data.getTestRecordCount().equals(monData.getTestRecordCount())) { data.setMonVol(monData.getMonVol()); data.setMonTmp(monData.getMonTmp()); data.setMonRes(monData.getMonRes()); } } } } //分页 PageInfo<AbeTestDataInf> pageInfo = new PageInfo(list); return new Response<PageInfo<AbeTestDataInf>>().set(1,pageInfo); } private List<AbeTestData> getList(int monId,List<Integer> testRecordCountList) { String testRecordCount = testRecordCountList.stream().map(String::valueOf).collect(Collectors.joining(",","(",")")); String sql = "select test_record_count,mon_vol,mon_tmp,mon_res from db_abe_testdata.tb_abe_testdata_"+monId +" where test_record_count in "+testRecordCount; List<AbeTestData> monDatalist = jdbcSqlExecuteService.executeQuery_call(sql, new CallBack<AbeTestData>() { @Override public List<AbeTestData> getResults(ResultSet rs) throws SQLException { LinkedList<AbeTestData> temp = new LinkedList<>(); while (rs.next()) { AbeTestData abeTestData = new AbeTestData(); abeTestData.setTestRecordCount(rs.getInt("test_record_count")); abeTestData.setMonVol(rs.getFloat("mon_vol")); abeTestData.setMonTmp(rs.getFloat("mon_tmp")); abeTestData.setMonRes(rs.getFloat("mon_res")); temp.add(abeTestData); } return temp; } }); return monDatalist; } } src/main/java/com/whyc/webSocket/AbeStateSocket.java
New file @@ -0,0 +1,111 @@ package com.whyc.webSocket; import com.whyc.config.WebSocketConfig; import com.whyc.dto.PageAlarm; import com.whyc.dto.Response; import com.whyc.pojo.db_abe_ram.AbeRam; import com.whyc.pojo.db_abe_ram.AbeState; import com.whyc.service.AbeRamService; import com.whyc.service.AbeStateService; import com.whyc.service.BattStationTempAlarmService; import com.whyc.util.ActionUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.util.HashMap; import java.util.Map; /** * 活化仪状态 */ @Component @ServerEndpoint(value = "/abeState",encoders = WebSocketEncoder.class,configurator = WebSocketConfig.class) public class AbeStateSocket { private Session session; private Thread thread; private static AbeRamService ramService; private static AbeStateService stateService; private volatile boolean runFlag = true; private volatile Map<String, Thread> threadMap = new HashMap<>(); private volatile Map<Long,Boolean> threadFlagMap = new HashMap<>(); @Autowired public void setRamService(AbeRamService ramService) { AbeStateSocket.ramService = ramService; } @Autowired public void setStateService(AbeStateService stateService) { AbeStateSocket.stateService = stateService; } @OnOpen public void onOpen(Session session, EndpointConfig config) { this.session = session; thread = new Thread("Thread_AbeStateSocket") { @Override public void run() { while (runFlag && !isInterrupted()) { Thread thread = currentThread(); threadFlagMap.put(thread.getId(), true); try { if (session.isOpen()) { //推送信息 synchronized (session) { Response<AbeState> state = stateService.get(); Response<AbeRam> ram = ramService.get(); Map<String, Response> resMap = new HashMap<>(); resMap.put("state",state); resMap.put("ram",ram); session.getBasicRemote().sendObject(new Response<>().set(1, resMap)); } threadFlagMap.put(thread.getId(), false); } sleep(4000); } catch (Exception e) { interrupt(); } } } }; thread.start(); threadFlagMap.put(thread.getId(),true); //停止老的socket线程 Thread threadBefore = threadMap.get(session.getId()); if(threadBefore !=null && threadBefore.isAlive()){ while (threadFlagMap.get(threadBefore.getId())){ } threadBefore.interrupt(); } //将线程存储,便于调用定位 threadMap.put(session.getId(), this.thread); } @OnClose public void onClose(CloseReason closeReason){ System.err.println("closeReason = " + closeReason); runFlag = false; if (thread != null && thread.isAlive()) { thread.interrupt(); } threadMap.remove(session.getId()); } @OnError public void onError(Throwable error) { error.printStackTrace(); if (thread != null && thread.isAlive()) { thread.interrupt(); } threadMap.remove(session.getId()); } }