whyclxw
2024-04-28 b25b814a949d2065a61fd3167206ffb51a57af65
src/main/java/com/whyc/service/BattInfService.java
@@ -6,15 +6,12 @@
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.dto.BattInfAndEnduranceDTO;
import com.whyc.dto.BatteryRTState;
import com.whyc.dto.Response;
import com.whyc.mapper.BattInfMapper;
import com.whyc.mapper.CommonMapper;
import com.whyc.pojo.Battinf;
import com.whyc.pojo.PowerInf;
import com.whyc.pojo.StationInf;
import com.whyc.mapper.*;
import com.whyc.pojo.*;
import com.whyc.util.ActionUtil;
import com.whyc.util.MathUtil;
import com.whyc.util.ThreadLocalUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.system.ApplicationHome;
import org.springframework.core.env.Environment;
@@ -27,6 +24,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
import static com.whyc.util.ActionUtil.createFilefolderIFNotExist;
@@ -34,6 +32,8 @@
public class BattInfService {
    @Resource
    private BattInfMapper battInfMapper;
    @Resource
    private BattinfUpdateRecordMapper battinfUpdateRecordMapper;
    @Resource
    private Environment environment;
    @Resource
@@ -50,6 +50,14 @@
    private BattRtalarmService battRtalarmService;
    @Autowired
    private ProcessSurveyService processSurveyService;
    @Autowired
    private BatttestdataInfService testInfService;
    @Autowired(required = false)
    private StationInfMapper sinfMapper;
    @Autowired(required = false)
    private BaoJiGroupBattGroupMapper bjBattMapper;
    public int searchMaxBattgroupId_zj() {
        Integer id = battInfMapper.getMaxBattGroupId_zj();
@@ -162,6 +170,11 @@
        return new Response().set(1,list,"查询成功");
    }
    public Response searchStationNameInGroup2(Integer uId,String stationName1){
        List<Battinf> list = battInfMapper.getStationNameInGroup2(uId,stationName1);
        return new Response().set(1,list,"查询成功");
    }
    @Transactional
    public Response add(Battinf battinf,Integer userId){
        int battGroupId = searchMaxBattgroupId_zj();//BattinfGroupFactory.searchMaxBattgroupId();
@@ -190,16 +203,16 @@
            station.setStationName3(battinf.getStationName3());
            station.setStationName4(battinf.getStationName4());
            station.setStationName5(battinf.getStationName5());
            station.setTogetherFlag(sinfMapper.getMaxTogetherFlag());
            stationInfService.insertStation(station);
            battinf.setStationId(stationId);
            battinf.setFBSDeviceId((long) dev_id);
        }
        battInfMapper.insert(battinf);
        battInfMapper.insertUserBattgroupBaojigroupBattgroup(battinf.getStationId(),battinf.getBattGroupId());
        battInfMapper.insertUserBattgroupBaojigroupBattgroupSelect(battinf.getStationId(),battinf.getBattGroupId(),userId);
        doAfterBattGroupChange();
        run_cmd();
        doAfterBattGroupChange(battinf.getBattGroupId());
        //run_cmd();
        return new Response().set(1,battinf,"添加成功");
    }
@@ -281,17 +294,33 @@
    public void deleteByBattgroupId(Integer battgroupId){
        QueryWrapper<Battinf> wrapper = new QueryWrapper<Battinf>().eq("battgroupId",battgroupId);
        battInfMapper.delete(wrapper);
        doAfterBattGroupChange();
        //删除包机组下电池组
        QueryWrapper<BaojiGroupBattGroup> bjWrapper = new QueryWrapper<BaojiGroupBattGroup>().eq("battgroupId",battgroupId);
        bjBattMapper.delete(bjWrapper);
        //删除电池组后操作
        doAfterBattGroupChange(battgroupId);
    }
    @Transactional
    public Response update(Battinf battinf){
        if (battInfMapper.updateById(battinf)>0){
            doAfterBattGroupChange();
            run_cmd();
            return new Response().set(1,"更新成功");
        }else {
            return new Response().set(0,"更新失败");
    public Response update(Battinf battinf) {
        //1.查询更新前的记录
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("battGroupId", battinf.getBattGroupId());
        wrapper.last("limit 1");
        Battinf binf = battInfMapper.selectOne(wrapper);
        binf.setUpdateReason(battinf.getUpdateReason());
        if (battInfMapper.updateById(battinf) > 0) {
            doAfterBattGroupChange(battinf.getBattGroupId());
            //run_cmd();
            //将更新前的记录记录下来BattinfUpdateRecord
            BattinfUpdateRecord binBattinfUpdateRecord = new BattinfUpdateRecord();
            BeanUtils.copyProperties(binf, binBattinfUpdateRecord);
            binBattinfUpdateRecord.setRecordTime(new Date());
            binBattinfUpdateRecord.setUpdateName(ActionUtil.getUser().getUName());
            battinfUpdateRecordMapper.insert(binBattinfUpdateRecord);
            return new Response().set(1, "更新成功");
        } else {
            return new Response().set(0, "更新失败");
        }
    }
@@ -306,7 +335,7 @@
        for (Battinf battinf:battinfs) {
            battInfMapper.updateById(battinf);
        }
        run_cmd();
        //run_cmd();
        return new Response().set(1,"更新成功");
    }
@@ -379,8 +408,17 @@
        int yearBetweenFiveAndSeven = 0;
        int yearAboveSeven = 0;
        List<Integer> list = battInfMapper.findUseYear(uId);
        //查询3年内,3-5年,5-7年,7年以上,含头不含尾
        for (int year:list){
        //查询1年内~7年内,7年以上,含头不含尾
        map.put("1年内", (int) list.stream().filter(item -> item <1).count());
        map.put("2年内", (int) list.stream().filter(item -> item < 2).count());
        map.put("3年内", (int) list.stream().filter(item -> item < 3).count());
        map.put("4年内", (int) list.stream().filter(item -> item < 4).count());
        map.put("5年内", (int) list.stream().filter(item -> item < 5).count());
        map.put("6年内", (int) list.stream().filter(item -> item < 6).count());
        map.put("7年内", (int) list.stream().filter(item -> item < 7).count());
        map.put("7年以上", (int) list.stream().filter(item -> item >= 7).count());
        /*for (int year:list){
            if(year<3){
                yearBelowThree+=1;
            }else if(year<5){
@@ -394,7 +432,7 @@
        map.put("3年内",yearBelowThree);
        map.put("3-5年",yearBetweenThreeAndFive);
        map.put("5-7年",yearBetweenFiveAndSeven);
        map.put("7年以上",yearAboveSeven);
        map.put("7年以上",yearAboveSeven);*/
        return new Response().set(1,map,"查询成功");
    }
@@ -410,16 +448,16 @@
    /**
     * yearCode:
     * 1:3年以内
     * 2:3-5年
     * 3:5到7年
     * 4:7年以上
     * @param yearCode
     * 1:1年以内
     * ...
     * 7:7年以内
     * 8:7年以上
     * @param year
     * @param uId
     * @return
     */
    public Response findBattProducerInfoByYearCode(int yearCode,int uId){
        List<BattInfAndEnduranceDTO> list = battInfMapper.findBattProducerInfoByYearCode(yearCode,uId);
    public Response findBattProducerInfoByYearCode(int year,int uId){
        List<BattInfAndEnduranceDTO> list = battInfMapper.findBattProducerInfoByYearCode(year,uId);
        return new Response().set(1,list,"查询成功");
    }
@@ -450,7 +488,9 @@
    //取出电池组信息构建excel文件的名称
    public String serchExcelName(int battGroupId) {
        Battinf binf = battInfMapper.serchExcelName(battGroupId);
        String excelName = binf.getStationName1() + "-" + binf.getStationName2() + "-" + binf.getStationName5() + "-" + binf.getStationName3() + "-" + ActionUtil.sdfwithOutday.format(binf.getBattProductDate()).replace("_", "年") + "月-" + (int) ((float) binf.getMonCapStd()) + "AH" + "-" + binf.getBattGroupName();
        //String excelName = binf.getStationName1() + "-" + binf.getStationName2() + "-" + binf.getStationName5() + "-" + binf.getStationName3() + "-" + ActionUtil.sdfwithOutday.format(binf.getBattProductDate()).replace("_", "-") + "-" + (int) ((float) binf.getMonCapStd()) + "AH" + "-" + binf.getBattGroupName();
        String excelName = binf.getStationName1() + "-" + binf.getStationName2() + "-" + binf.getStationName5() + "-" + binf.getStationName3()+ "-" + binf.getStationName4()
                + "-" + ThreadLocalUtil.format(binf.getBattProductDate(),2).replace("_", "-") + "-" + (int) ((float) binf.getMonCapStd()) + "AH" + "-" + binf.getBattGroupName();
        return excelName;
    }
@@ -458,13 +498,15 @@
    public String serchExcelNameA059(int battGroupId, String stateFlag) {
        Battinf binf = battInfMapper.serchExcelName(battGroupId);
        //导出格式:内蒙古自治区-鄂尔多斯市-东胜区-中心局-理士400AH1组-2022-04-21-第1次放电
        String excelName = binf.getStationName1() + "-" + binf.getStationName2() + "-" + binf.getStationName5() + "-" + binf.getStationName3() + "-" +
        String excelName = binf.getStationName1() + "-" + binf.getStationName2() + "-" + binf.getStationName5() + "-" + binf.getStationName3() + "-" + binf.getStationName4() + "-" +
                binf.getBattProducer() + binf.getMonCapStd() + "AH" + (binf.getGroupIndexInFBSDevice() + 1) + "组" + "-" + stateFlag;
        return excelName;
    }
    public Response uploadPicOfStation(List<MultipartFile> file, String stationId) {
        //过滤特殊字符,避免路径遍历攻击
        stationId = ActionUtil.filterFileName(stationId);
        String fileDirName = "";
        int configType = Integer.parseInt(environment.getProperty("configFile.type"));
        ApplicationHome applicationHome = new ApplicationHome(getClass());
@@ -511,9 +553,14 @@
            fileDirName = jarFile.toString();
        }
        boolean deleted = false;
        //过滤特殊字符,避免路径遍历攻击
        stationId = ActionUtil.filterFileName(stationId);
        String root=fileDirName+"/fg_photo/stationsrc/"+ stationId + "/";
        for (int i = 0; i < fileNames.size(); i++) {
            File file = new File(root+fileNames.get(i));
            String fileName = fileNames.get(i);
            //过滤特殊字符,避免路径遍历攻击
            fileName = ActionUtil.filterFileName(fileName);
            File file = new File(root+ fileName);
            if (file.exists()&&file.isFile()){
                deleted = file.delete();
            }else {
@@ -529,6 +576,8 @@
    public Response getStationPic(String stationId){
        //过滤特殊字符,避免路径遍历攻击
        stationId = ActionUtil.filterFileName(stationId);
        String fileDirName = "";
        int configType = Integer.parseInt(environment.getProperty("configFile.type"));
        ApplicationHome applicationHome = new ApplicationHome(getClass());
@@ -572,7 +621,7 @@
        Float nomCapAH = nomCapWH*1000/53.5f;
        UpdateWrapper<Battinf> update = Wrappers.update();
        update.set("NomCapWH",nomCapWH).set("NomCapAH",nomCapAH).eq("battGroupId",inf.getBattGroupId());
        battInfMapper.update(null,update);
        battInfMapper.update((Battinf) ActionUtil.objeNull,update);
        return new Response().setII(1,"修改完成");
    }
@@ -584,14 +633,20 @@
     */
    public Response getDevCountMap(int userId) {
        try {
            Map<String, Integer> map = new HashMap<>();
            Map<String, Object> map = new HashMap<>();
            int battGroupCount = battInfMapper.getBattGroupNum(userId);
            int devCount = battInfMapper.getDevNum(userId);
            int powerNum = powerInfService.getNum(userId);
            List<StationInf> stationInfList = stationInfService.getStationInfList(userId);
            int stationNum = stationInfService.getStation(userId);
            int hrDisNum = testInfService.getHrQuarterZC(userId);
            map.put("battGroupCount", battGroupCount);
            map.put("devCount", devCount);
            map.put("powerNum", powerNum);
            return new Response().setII(1,true, map,null);
            map.put("stationNum",stationNum);
            map.put("stationInfList",stationInfList);
            map.put("checkCapNum",hrDisNum);
            return new Response().setII(1,true, map,"");
        }catch (Exception e){
            return new Response<>().set(1,false,"发生异常:"+e.getCause());
        }
@@ -600,46 +655,38 @@
    public List<Battinf> getBattGroupList(int userId) {
        return battInfMapper.getBattGroupList(userId);
    }
    /**
     * 获取电池组的实际容量
     */
    public List<BatteryRTState> getBatteryCap(int userId){
        return battInfMapper.getBatteryCap(userId);
    }
    public int getCapAlarmNum(int userId){
        int capAlarmNum=0;
        List<BatteryRTState> stateList = getBatteryCap(userId);
        //查询容量告警阈值,暂定为70% TODO 后续从数据库读取
        for (int i = 0; i < stateList.size(); i++) {
            BatteryRTState state = stateList.get(i);
            Float batteryRealCap = state.getBatteryRealCap();
            Float capStd = state.getMonCapStd();
            Float realCapDivide = (Float) MathUtil.divide(batteryRealCap, capStd, MathUtil.TYPE_FLOAT);
            if (realCapDivide <= 0.7) {
                capAlarmNum++;
            }
        }
        return capAlarmNum;
    }
    //管理员首页:基础资源信息
    @Transactional
    public Response getBattInfoAnalysis(int userId) {
        try {
            Map<String, Integer> map = new HashMap<>();
            int battGroupCount = battInfMapper.getBattGroupNum(userId);
            //电源机房总数
            int powerNum = powerInfService.getNum(userId);
            int monNum = battInfMapper.getMonCount(userId);
            //int monNum = battInfMapper.getMonCount(userId);
            //电池机房总数
            int battStationNum = battInfMapper.geStationCount(userId);
            //int battStationNum = battInfMapper.geStationCount(userId);
            //总机房
            int stationNum = stationInfService.geStation(userId);
            map.put("monNum", monNum);//单体
            map.put("battStationNum", battStationNum);//站点
            int stationNum = stationInfService.getStation(userId);
            //设备数
            int deviceNum = battInfMapper.getDevNum(userId);
            /*本年度已核容放电电池组(testdate_inf中test_type=3,test_startType=3)
             int hrDisNum = testInfService.getHrQuarter(userId);
            * 修改为:领导层本年度已放数 仅需要统计放电正常停止的 正常停止的条件如下:
                stop_type:
                2-放电时间到终止并且放电时间超过2小时
                3-放电容量到终止
                4-单体电压下限到终止
                6-组端电压下限到终止*/
            int hrDisNum = testInfService.getHrQuarterZC(userId);
            //map.put("monNum", monNum);//单体
            //map.put("battStationNum", battStationNum);//站点
            map.put("battGroupCount", battGroupCount);//电池组
            map.put("powerNum", powerNum);//电源
            map.put("stationNum", stationNum);//总机房
            map.put("hrDisNum", hrDisNum);//本年度核容放电电池组
            map.put("deviceNum", deviceNum);//本年度核容放电电池组
            return new Response().setII(1, true, map, "基础资源信息");
        } catch (Exception e) {
            return new Response<>().set(1, false, "发生异常:" + e.getCause());
@@ -655,11 +702,11 @@
    /**
     * 电池组 新增/编辑/删除后执行
     */
    public void doAfterBattGroupChange(){
    public void doAfterBattGroupChange(int battGroupId){
        createBattState_RT_RamDB_Table();
        createBattData_RT_RamDB_Table();
        createBattData_RT_RamDB_Table(battGroupId);
        createTb_Batt_RSAlarm_Table();
        createTb_Batt_RTAlarm_Table();
        createTb_Batt_RTAlarm_Table(battGroupId);
        setUpThreadRestart();
        updateTb_App_Sys_AppServerTable();
    }
@@ -675,12 +722,14 @@
    /**
     * 创建tb_batt_rtdata表并且根据集合bd_al,向表中添加电池组id和mon_num 值      "`db_ram_db`.tb_batt_rtdata"
     * @param battGroupId
     */
    public void createBattData_RT_RamDB_Table()
    public void createBattData_RT_RamDB_Table(int battGroupId)
    {
        List<Battinf> battInfList = getBattInfList();
        List<Battinf> battInfList = getBattInfList(battGroupId);
        for (Battinf battInf : battInfList) {
            int bg_id = battInf.getBattGroupId();
            System.out.println("执行到了:"+bg_id);
            int mon_cnt = battInf.getMonCount();
            int pack_count = battInf.getPackCount();
            int FBSDeviceId = battInf.getFBSDeviceId().intValue();
@@ -705,9 +754,9 @@
        }
    }
    private List<Battinf> getBattInfList() {
    private List<Battinf> getBattInfList(int battGroupId) {
        QueryWrapper<Battinf> query = Wrappers.query();
        query.select("BattGroupId","MonCount","FBSDeviceId","PackCount");
        query.select("BattGroupId","MonCount","FBSDeviceId","PackCount").eq("BattGroupId",battGroupId);
        return battInfMapper.selectList(query);
    }
@@ -721,9 +770,10 @@
    /**
     *    创建单体信息告警记录表      "`db_ram_db`.`tb_batt_rtalarm`"
     * @param battGroupId
     */
    public void createTb_Batt_RTAlarm_Table() {
        List<Battinf> battInfList = getBattInfList();
    public void createTb_Batt_RTAlarm_Table(int battGroupId) {
        List<Battinf> battInfList = getBattInfList(battGroupId);
        for (Battinf battInf : battInfList) {
            int bg_id = battInf.getBattGroupId();
            int mon_cnt = battInf.getMonCount();
@@ -770,13 +820,56 @@
    /**
     * 校验当前设备是否是锂电BTS
     *
     * @param fbsDeviceId
     * @return
     */
    private boolean checkLiBTSDevType(int fbsDeviceId) {
        if(fbsDeviceId/100000 == 9131) {
        if (fbsDeviceId / 100000 == 9131) {
            return true;
        }
        return false;
    }
    //查询标称电压类别
    public Response searchMonVol() {
        List<String> list = battInfMapper.searchMonVol();
        return new Response().setII(1, list.size() > 0 ? true : false, list, "查询标称电压类别");
    }
    //根据设备id查询电池组id(取第一个)
    public Response searchBattGroupIdByDevId(int devId) {
        String battGroupId = battInfMapper.searchBattGroupIdByDevId(devId);
        return new Response().setII(1, battGroupId != null, battGroupId != null ? battGroupId : "0", "返回电池组id");
    }
    public String getStationIdByBattGroupId(Integer battGroupId) {
        QueryWrapper<Battinf> query = Wrappers.query();
        query.eq("BattGroupId",battGroupId).last(" limit 1");
        return battInfMapper.selectOne(query).getStationId();
    }
    public String getStationIdByDeviceId(Integer deviceId) {
        QueryWrapper<Battinf> query = Wrappers.query();
        query.eq("FBSDeviceId",deviceId).last(" limit 1");
        return battInfMapper.selectOne(query).getStationId();
    }
    //天一电厂获取用户管理的电池组实时数据
    public Response selectTydc3DRealTimeInfo(Long uId) {
        List<Battinf> list=battInfMapper.selectTydc3DRealTimeInfo(uId);
        return new Response().setII(1,list!=null,list,"用户管理的电池组实时数据");
    }
    public List<String> getStationIds() {
        QueryWrapper<Battinf> query = Wrappers.query();
        query.select("distinct StationId as StationId");
        List<Battinf> battinfs = battInfMapper.selectList(query);
        return battinfs.stream().map(Battinf::getStationId).collect(Collectors.toList());
    }
    public List<Battinf> getBattListByStatoinId(String stationId) {
        QueryWrapper<Battinf> query = Wrappers.query();
        query.eq("StationId",stationId);
        return battInfMapper.selectList(query);
    }
}