whycxzp
2025-03-31 0143867c6907619385752e14214f622e3cba1196
abe活化接口
14个文件已添加
551 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/AbeTestDataController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/AbeTestDataInfController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/AbeRamMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/AbeStateMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/AbeTestDataInfMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_abe_ram/AbeInf.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_abe_ram/AbeRam.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_abe_ram/AbeState.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_abe_testdata/AbeTestData.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_abe_testdata/AbeTestDataInf.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/AbeRamService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/AbeStateService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/AbeTestDataInfService.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/webSocket/AbeStateSocket.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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());
    }
}