package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.dto.AlarmDaoFactory; import com.whyc.dto.BattCapFactory; import com.whyc.dto.InterfaceParam; import com.whyc.dto.Response; import com.whyc.dto.result.AlarmRes; import com.whyc.mapper.*; import com.whyc.pojo.*; import com.whyc.util.ActionUtil; import com.whyc.util.MessageUtils; import com.whyc.util.RSAUtil; import com.whyc.util.SubTablePageInfoUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.ServletContext; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.text.ParseException; import java.util.*; @Slf4j @Service public class InterfaceService { @Resource private BattInfMapper battInfMapper; @Resource private PowerInfMapper powerInfMapper; @Resource private BattalarmDataMapper battalarmDataMapper; @Resource private PwrdevAlarmMapper pwrdevAlarmMapper; @Resource private DevalarmDataMapper devalarmDataMapper; @Resource private BattalarmDataHistoryMapper battalarmDataHistoryMapper; @Resource private PwrdevAlarmHistoryMapper pwrdevAlarmHistoryMapper; @Resource private DevalarmDataHistoryMapper devalarmDataHistoryMapper; @Resource private PwrdevAcdcdataMapper pwrdevAcdcdataMapper; @Resource private Fbs9100StateMapper fbs9100StateMapper; @Resource private BattRtdataMapper battRtdataMapper; @Resource private BattRtstateMapper battRtstateMapper; @Autowired(required = false) private InterfaceMapper interfaceMapper; @Autowired(required = false) private BattMapInformationMapper mapMapper; @Autowired private Fbs9100SetparamService fbs9100SetparamService; @Autowired(required = false) private Fbs9100SetparamMapper fbs9100SetparamMapper; @Autowired private SubTablePageInfoUtils subTablePageInfoUtils; @Autowired private BattRealdataService battRealdataService; @Autowired private BattInfService battInfService; @Autowired private BattEnduranceService battEnduranceService; public Response getBattinf(int pageNum, int pageSize, String interfaceNumber) { //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { //分页信息 PageHelper.startPage(pageNum, pageSize); List list = battInfMapper.selectList((Wrapper) ActionUtil.objeNull); PageInfo pageInfo = new PageInfo(list); return new Response().set(1, pageInfo); } else { return new Response().set(1, "越权访问"); } } public Response getPowerInf(int pageNum, int pageSize, String interfaceNumber) { //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { //分页信息 PageHelper.startPage(pageNum, pageSize); List list = powerInfMapper.selectList((Wrapper) ActionUtil.objeNull); PageInfo pageInfo = new PageInfo(list); return new Response().set(1, pageInfo); } else { return new Response().set(1, "越权访问"); } } //电池告警实时查询-websocket使用 @Transactional public Response getBattAlarm(List battgroupIds, String interfaceNumber, String lang) { //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { // //分页信息 // PageHelper.startPage(pageNum,pageSize); List list = battalarmDataMapper.getBattAlarm(battgroupIds); for (AlarmRes a : list) { List l = a.getAdatas(); for (BattalarmData adata : l) { adata.setAlmSignalIdName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmName(adata.getAlmSignalId()), lang)); adata.setAlmLevelName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmType(adata.getAlmLevel()), lang)); } } // PageInfo pinfo=new PageInfo(list); return new Response().set(1, list); } else { return new Response().set(1, "越权访问"); } } //电源实时告警查询--第三方接口-websocket @Transactional public Response getPwrdevAlarm(List powerDeviceIds, String interfaceNumber) { //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { // //分页信息 // PageHelper.startPage(pageNum,pageSize); List list = pwrdevAlarmMapper.getPwrdevAlarm(powerDeviceIds); for (PwrdevAlarm p : list) { p.setAlarmName(AlarmDaoFactory.getAllAlarmName(p.getAlmType())); if (p.getAlmIndex() != 0) { p.setAlarmName(p.getAlarmName().replace("N", p.getAlmIndex() + "")); } } // PageInfo pageInfo=new PageInfo(list); return new Response().set(1, list); } else { return new Response().set(1, "越权访问"); } } //设备告警实时查询-webSocket public Response getDevAlarm(List deviceIds, String interfaceNumber) { //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { // PageHelper.startPage(pageNum,pageSize); List list = devalarmDataMapper.getDevAlarm(deviceIds); // PageInfo pageInfo=new PageInfo(list); return new Response().set(1, list); } else { return new Response().set(1, "越权访问"); } } //电池告警历史查询 @Transactional public Response getBattAlarmHistory(List battgroupIds, String interfaceNumber, int pageNum, int pageSize) { String lang = ActionUtil.getLang(); //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { PageHelper.startPage(pageNum,pageSize); List list = battalarmDataHistoryMapper.getBattAlarmHistory(battgroupIds); for (AlarmRes a : list) { List l = a.getAdatas(); for (BattalarmData adata : l) { adata.setAlmSignalIdName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmName(adata.getAlmSignalId()), lang)); adata.setAlmLevelName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmType(adata.getAlmLevel()), lang)); } } PageInfo pageInfo = new PageInfo(list); return new Response().set(1, pageInfo); } else { return new Response().set(1, "越权访问"); } } //电池告警历史查询 @Transactional public Response getBattAlarmHistory2(InterfaceParam param, String interfaceNumber, int pageNum, int pageSize) throws ParseException { String lang = ActionUtil.getLang(); //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { PageInfo pageInfo = subTablePageInfoUtils.getPageInfo(pageNum, pageSize, param.getStartTime(), param.getEndTime(), "db_alarm", "tb_battalarm_data_history", param); List list = pageInfo.getList(); for (Object obj : list) { AlarmRes a = (AlarmRes) obj; List l = a.getAdatas(); for (BattalarmData adata : l) { adata.setAlmSignalIdName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmName(adata.getAlmSignalId()), lang)); adata.setAlmLevelName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmType(adata.getAlmLevel()), lang)); } } return new Response().set(1, pageInfo); } else { return new Response().set(1, "越权访问"); } } //电源告警历史查询 @Transactional public Response getPwrdevAlarmHistory(List powerDeviceIds, String interfaceNumber, int pageNum, int pageSize) { //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { PageHelper.startPage(pageNum,pageSize); List list = pwrdevAlarmHistoryMapper.getPwrdevAlarmHistory(powerDeviceIds); for (PwrdevAlarmHistory p : list) { p.setAlarmName(AlarmDaoFactory.getAllAlarmName(p.getAlmType())); if (p.getAlmIndex() != 0) { p.setAlarmName(p.getAlarmName().replace("N", p.getAlmIndex() + "")); } } PageInfo pageInfo = new PageInfo(list); return new Response().set(1, pageInfo); } else { return new Response().set(1, "越权访问"); } } //设备告警历史查询 public Response getDevAlarmHistory(List deviceIds, String interfaceNumber, int pageNum, int pageSize) { //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { PageHelper.startPage(pageNum,pageSize); List list = devalarmDataHistoryMapper.getDevAlarmHistory(deviceIds); PageInfo pageInfo = new PageInfo(list); return new Response().set(1, pageInfo); } else { return new Response().set(1, "越权访问"); } } public Response getDevAlarmHistory2(InterfaceParam param, String interfaceNumber, int pageNum, int pageSize) throws ParseException { //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { PageInfo pageInfo = subTablePageInfoUtils.getPageInfo(pageNum, pageSize, param.getStartTime(), param.getEndTime(), "db_alarm", "tb_devalarm_data_history", param); return new Response().set(1, pageInfo); } else { return new Response().set(1, "越权访问"); } } public Response getRealTime(InterfaceParam param) { //先验证 int flag = decryptInterface(param.getInterfaceNumber()); if (flag == 1) { //判断param.getPowerDeviceIds()是否为空,不为空则查询 List powerRts = new ArrayList<>(); if (param.getPowerDeviceIds() != null && param.getPowerDeviceIds().size() > 0) { powerRts = pwrdevAcdcdataMapper.getPowerRealtime(param.getPowerDeviceIds()); } List fbs9100States = new ArrayList<>(); if (param.getDeviceIds() != null && param.getDeviceIds().size() > 0) { fbs9100States = fbs9100StateMapper.getRealtime(param.getDeviceIds()); } List battRtDatas = new ArrayList<>(); if (param.getStationIds() != null && param.getStationIds().size() > 0) { battRtDatas = battRtdataMapper.getRealtime(param.getStationIds()); } List battRtstates = new ArrayList<>(); if (param.getBattgroupIds() != null && param.getBattgroupIds().size() > 0) { battRtstates = battRtstateMapper.getRealtime(param.getBattgroupIds()); } Map map = new HashMap<>(); map.put("powerRts", powerRts); map.put("fbs9100States", fbs9100States); map.put("battRtDatas", battRtDatas); map.put("battRtstates", battRtstates); return new Response().set(1, map); } else { return new Response().set(1, "越权访问"); } } //获取所有第三方码的信息 public Response getInterface(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); List list = interfaceMapper.selectList((Wrapper) ActionUtil.objeNull); if (list != null && list.size() > 0) { for (Interface iface : list) { String random = iface.getInterfaceNumber(); iface.setInterfaceNumber(RSAUtil.decrypt(random, RSAUtil.getPrivateKey())); } } PageInfo pageInfo = new PageInfo(list); return new Response().setII(1, list.size() > 0, pageInfo, "返回所有第三方码"); } //生成第三方验证码 public Response createInterface(String interfaceName) throws NoSuchAlgorithmException { String random = getRandomString(25); //rsa加密 String encryptRandom = RSAUtil.encrypt(random, RSAUtil.getPublicKey()); //将生成的random存入数据库 Interface iface = new Interface(); iface.setInterfaceName(interfaceName); iface.setInterfaceNumber(encryptRandom); iface.setEnable(1); interfaceMapper.insert(iface); return new Response().set(1, true, random); } //编辑第三方验证码是否可用 public Response updateInterface(int num, int enable) { UpdateWrapper wrapper = new UpdateWrapper(); wrapper.set("enable", enable); wrapper.eq("num", num); interfaceMapper.update((Interface) ActionUtil.objeNull, wrapper); return new Response().set(1, true, "编辑是否可用"); } //验证第三方验证码是否成功 public int decryptInterface(String encryptRandom) { QueryWrapper wrapper = new QueryWrapper(); wrapper.eq("enable", 1); List list = interfaceMapper.selectList(wrapper); int flag = 0; if (list != null && list.size() > 0) { for (Interface iface : list) { String random = RSAUtil.decrypt(iface.getInterfaceNumber(), RSAUtil.getPrivateKey()); if (encryptRandom.equals(random)) { flag = 1; break; } } } return flag; } //length用户要求产生字符串的长度 public static String getRandomString(int length) throws NoSuchAlgorithmException { String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; //Random random = new Random(); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = random.nextInt(62); sb.append(str.charAt(number)); } return sb.toString(); } public Response getAlarmDiffMap(String interfaceNumber, String lang) { //先验证 int flag = decryptInterface(interfaceNumber); if (flag == 1) { Map alarmDiffMap = new HashMap<>(); //获取初始化时的告警列表/变动更新后的告警列表 ServletContext application = ActionUtil.getApplication(); Map alarmMap = (Map) application.getAttribute("alarmMap"); //获取当前的告警列表 Map alarmMapNow = getAlarmMap(lang); List battAlarmList = (List) alarmMap.get("battAlarmList"); List devAlarmList = (List) alarmMap.get("devAlarmList"); List powerAlarmList = (List) alarmMap.get("powerAlarmList"); List battAlarmListNow = (List) alarmMapNow.get("battAlarmList"); List devAlarmListNow = (List) alarmMapNow.get("devAlarmList"); List powerAlarmListNow = (List) alarmMapNow.get("powerAlarmList"); List battAlarmListAdded = new LinkedList<>(); List battAlarmListRemoved = new LinkedList<>(); List devAlarmListAdded = new LinkedList<>(); List devAlarmListRemoved = new LinkedList<>(); List powerAlarmListAdded = new LinkedList<>(); List powerAlarmListRemoved = new LinkedList<>(); //电池组告警增加 for (BattalarmData now : battAlarmListNow) { long num = now.getNum(); boolean exist = false; for (BattalarmData old : battAlarmList) { if (old.getNum() == num) { exist = true; break; } } if (!exist) { battAlarmListAdded.add(now); } } //电池组告警减少 for (BattalarmData old : battAlarmList) { long num = old.getNum(); boolean exist = false; for (BattalarmData now : battAlarmListNow) { if (now.getNum() == num) { exist = true; break; } } if (!exist) { battAlarmListRemoved.add(old); } } //设备告警增加 for (DevalarmData now : devAlarmListNow) { long num = now.getNum(); boolean exist = false; for (DevalarmData old : devAlarmList) { if (old.getNum() == num) { exist = true; break; } } if (!exist) { devAlarmListAdded.add(now); } } //设备告警减少 for (DevalarmData old : devAlarmList) { long num = old.getNum(); boolean exist = false; for (DevalarmData now : devAlarmListNow) { if (now.getNum() == num) { exist = true; break; } } if (!exist) { devAlarmListRemoved.add(old); } } //电源告警增加 for (PwrdevAlarm now : powerAlarmListNow) { long num = now.getNum(); boolean exist = false; for (PwrdevAlarm old : powerAlarmList) { if (old.getNum() == num) { exist = true; break; } } if (!exist) { powerAlarmListAdded.add(now); } } //电源告警减少 for (PwrdevAlarm old : powerAlarmList) { long num = old.getNum(); boolean exist = false; for (PwrdevAlarm now : powerAlarmListNow) { if (now.getNum() == num) { exist = true; break; } } if (!exist) { powerAlarmListRemoved.add(old); } } alarmDiffMap.put("battAlarmListAdded", battAlarmListAdded); alarmDiffMap.put("battAlarmListRemoved", battAlarmListRemoved); alarmDiffMap.put("devAlarmListAdded", devAlarmListAdded); alarmDiffMap.put("devAlarmListRemoved", devAlarmListRemoved); alarmDiffMap.put("powerAlarmListAdded", powerAlarmListAdded); alarmDiffMap.put("powerAlarmListRemoved", powerAlarmListRemoved); if (battAlarmListAdded.size() != 0 || battAlarmListRemoved.size() != 0 || devAlarmListAdded.size() != 0 || devAlarmListRemoved.size() != 0 || powerAlarmListAdded.size() != 0 || powerAlarmListRemoved.size() != 0 ) { //有任何变动,更新旧的告警列表 application.setAttribute("alarmMap", alarmMapNow); } return new Response().set(1,alarmDiffMap); }else{ return new Response().set(1, "越权访问"); } } public Map getAlarmMap(String lang) { List battAlarmList = battalarmDataMapper.getBattAlarm2(); for (BattalarmData adata : battAlarmList) { adata.setAlmSignalIdName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmName(adata.getAlmSignalId()), lang)); adata.setAlmLevelName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmType(adata.getAlmLevel()), lang)); } List devAlarmList = devalarmDataMapper.getDevAlarm2(); List powerAlarmList = pwrdevAlarmMapper.getPwrdevAlarm2(); for (PwrdevAlarm p : powerAlarmList) { p.setAlarmName(AlarmDaoFactory.getAllAlarmName(p.getAlmType())); if (p.getAlmIndex() != 0) { p.setAlarmName(p.getAlarmName().replace("N", p.getAlmIndex() + "")); } } Map map = new HashMap<>(); map.put("battAlarmList",battAlarmList); map.put("devAlarmList",devAlarmList); map.put("powerAlarmList",powerAlarmList); return map; } public Response getRealTimeAlarm(InterfaceParam param) { String lang = ActionUtil.getLang(); int flag = decryptInterface(param.getInterfaceNumber()); if (flag == 1) { Map map = new HashMap<>(); map.put("battAlarmList",null); map.put("devAlarmList",null); map.put("powerAlarmList",null); List battgroupIds = param.getBattgroupIds(); List deviceIds = param.getDeviceIds(); List powerDeviceIds = param.getPowerDeviceIds(); //电池告警实时 if(battgroupIds!=null && battgroupIds.size()!=0) { List battAlarmList = battalarmDataMapper.getBattAlarm(battgroupIds); for (AlarmRes a : battAlarmList) { List l = a.getAdatas(); for (BattalarmData adata : l) { adata.setAlmSignalIdName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmName(adata.getAlmSignalId()), lang)); adata.setAlmLevelName(MessageUtils.getMessageSocket(AlarmDaoFactory.getAlarmType(adata.getAlmLevel()), lang)); } } map.put("battAlarmList",battAlarmList); } //设备告警实时 if(deviceIds!=null && deviceIds.size()!=0) { List devAlarmList = devalarmDataMapper.getDevAlarm(deviceIds); map.put("devAlarmList",devAlarmList); } //电源告警实时 if(powerDeviceIds!=null && powerDeviceIds.size()!=0) { List powerAlarmList = pwrdevAlarmMapper.getPwrdevAlarm(powerDeviceIds); for (PwrdevAlarm p : powerAlarmList) { p.setAlarmName(AlarmDaoFactory.getAllAlarmName(p.getAlmType())); if (p.getAlmIndex() != 0) { p.setAlarmName(p.getAlarmName().replace("N", p.getAlmIndex() + "")); } } map.put("powerAlarmList",powerAlarmList); } return new Response().set(1,map); }else{ return new Response().set(1, "越权访问"); } } public Response getBattStationInfoByStationId(String stationId, String interfaceNumber) { int flag = decryptInterface(interfaceNumber); //int flag = 1; if (flag == 1) { QueryWrapper query = Wrappers.query(); query.eq("StationId", stationId).last(" limit 1"); Battinf battinf = battInfMapper.selectOne(query); QueryWrapper mapQuery = Wrappers.query(); mapQuery.select("longitude", "latitude").eq("stationId", stationId).last(" limit 1"); BattMapInformation mapInfo = mapMapper.selectOne(mapQuery); if (mapInfo != null) { battinf.setLongitude(mapInfo.getLongitude()); battinf.setLatitude(mapInfo.getLatitude()); } else { battinf.setLongitude(0d); battinf.setLatitude(0d); } return new Response().set(1, battinf); }else{ return new Response().set(1, "越权访问"); } } public Response sendCmdGet(int opCmd, Integer testCmd, int devId, int battGroupNum, String interfaceNumber) { int flag = decryptInterface(interfaceNumber); if (flag == 1) { boolean bl = fbs9100SetparamService.sendCmdToFBS9100Dev2(opCmd, testCmd != null ? testCmd : 0, devId, battGroupNum); Fbs9100Setparam setparam = fbs9100SetparamMapper.serchbyDev_id(devId,battGroupNum-1); return new Response().setII(1, setparam, bl, bl == true ? "查询成功!" : "设置9100参数失败,请检查网络!"); }else{ return new Response().set(1, "越权访问"); } } public Response sendCmdSet(Fbs9100Setparam param, String interfaceNumber) { int flag = decryptInterface(interfaceNumber); if (flag == 1) { Long devId = param.getDevId(); if (devId.toString().startsWith("61850")) { return fbs9100SetparamService.update61850Param(param); } else { return fbs9100SetparamService.update(param); } }else{ return new Response().set(1, "越权访问"); } } public Response getBattHistoryDataList(BattRealdata data, String interfaceNumber) throws ParseException, InterruptedException { int flag = decryptInterface(interfaceNumber); if (flag == 1) { Response response = battRealdataService.serchByCondition2(data); return new Response().set(1,response); }else{ return new Response().set(1, "越权访问"); } } /** * 1.电池基本信息:电池品牌、电池型号、投入使用时间、标称容量、电池组id * 2.运行数据:实际容量、电池组数、负载电流、续航时长 */ public Response getBattGroupDataList(String stationId, String interfaceNumber) { int flag = decryptInterface(interfaceNumber); if (flag == 1) { Map resultMap = new HashMap<>(); //根据站点查询电池组列表及基础信息 List battGroupList = battInfService.getBattListByStatoinId(stationId); resultMap.put("basicInfo",battGroupList); //根据站点查询运行数据 List enduranceInfoList = battEnduranceService.getEnduranceInfoByStationId(stationId); if(battGroupList.size() != 0 && enduranceInfoList.size() != 0) { //存在电池组且存在电池组的续航信息记录 //这里只考虑一个站点只有1台设备. BattEndurance battEndurance = enduranceInfoList.get(0); //运行数据 List runDataList = new ArrayList<>(); battGroupList.forEach(battinf -> { Integer groupIndex = battinf.getGroupIndexInFBSDevice(); Float loadCurrFromDis = battinf.getLoadCurrFromDis(); Float capStd = battinf.getMonCapStd(); BattEndurance temp = new BattEndurance(); switch (groupIndex) { case 0: temp.setRealCap(battEndurance.getRealCapGroup1()); temp.setNum(0); temp.setLoadCurr(String.valueOf(loadCurrFromDis)); temp.setEnduranceTheoryTimelong(BattCapFactory.getTheoryTime(loadCurrFromDis, battEndurance.getRealCapGroup1(), capStd)); break; case 1: temp.setRealCap(battEndurance.getRealCapGroup2()); temp.setNum(1); temp.setLoadCurr(String.valueOf(loadCurrFromDis)); temp.setEnduranceTheoryTimelong(BattCapFactory.getTheoryTime(loadCurrFromDis, battEndurance.getRealCapGroup2(), capStd)); break; case 2: temp.setRealCap(battEndurance.getRealCapGroup3()); temp.setNum(2); temp.setLoadCurr(String.valueOf(loadCurrFromDis)); temp.setEnduranceTheoryTimelong(BattCapFactory.getTheoryTime(loadCurrFromDis, battEndurance.getRealCapGroup3(), capStd)); break; case 3: temp.setRealCap(battEndurance.getRealCapGroup4()); temp.setNum(3); temp.setLoadCurr(String.valueOf(loadCurrFromDis)); temp.setEnduranceTheoryTimelong(BattCapFactory.getTheoryTime(loadCurrFromDis, battEndurance.getRealCapGroup4(), capStd)); break; } runDataList.add(temp); }); resultMap.put("runData", runDataList); }else{ resultMap.put("runData",null); } return new Response().set(1,resultMap); }else{ return new Response().set(1, "越权访问"); } } }