| | |
| | | |
| | | 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.constant.DeviceConstant; |
| | | import com.whyc.constant.YamlProperties; |
| | | import com.whyc.dto.BattTestData; |
| | | import com.whyc.dto.Response; |
| | | import com.whyc.dto.paramter.FbsStatePar; |
| | | import com.whyc.dto.result.DischargeState; |
| | | import com.whyc.mapper.BattInfMapper; |
| | | import com.whyc.mapper.BattRtstateMapper; |
| | |
| | | import com.whyc.pojo.Battinf; |
| | | import com.whyc.pojo.Fbs9100State; |
| | | import com.whyc.util.ActionUtil; |
| | | import com.whyc.util.DateUtil; |
| | | import com.whyc.util.ThreadLocalUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | |
| | | @Autowired(required = false) |
| | | private BattRtstateMapper rtstateMapper; |
| | | @Autowired(required = false) |
| | | |
| | | private Fbs9600StateService fbs9600StateService; |
| | | @Autowired(required = false) |
| | | |
| | | private Ld9StateService ld9StateService; |
| | | |
| | | //开关状态 |
| | | @Transactional |
| | |
| | | Fbs9100State fbs9100State = mapper.selectOne(wrapper); |
| | | if (fbs9100State != null) { |
| | | fbs9100State.setNote(new SimpleDateFormat(ActionUtil.time_yyyyMMddHHmmss).format(new Date())); |
| | | if((devId / 100000 == 6183)||(devId / 100000 == 6184)){ |
| | | fbs9100State.setDevLastCaptestStopTypeReason(BattTestData.getStopType_6183_4(fbs9100State.getDevLastCaptestStopType())); |
| | | }else{ |
| | | fbs9100State.setDevLastCaptestStopTypeReason(BattTestData.getStopType_9612(fbs9100State.getDevLastCaptestStopType())); |
| | | } |
| | | } |
| | | /*Random random = new Random(); |
| | | fbs9100State.setFbo4830IsOnline(random.nextInt(2));*/ |
| | | return new Response().setII(1, fbs9100State == null ? false : true, fbs9100State, ""); |
| | | } |
| | | |
| | |
| | | UpdateWrapper wrapper=new UpdateWrapper(); |
| | | wrapper.set("dev_res_test_state",0); |
| | | wrapper.eq("dev_id",devId); |
| | | int flag=mapper.update(null,wrapper); |
| | | int flag=mapper.update((Fbs9100State) ActionUtil.objeNull,wrapper); |
| | | return new Response().set(1,flag>0?true:false); |
| | | } |
| | | //一体机界面弹出框确认操作 |
| | |
| | | dev_alarmstat=2; |
| | | wrapper.set("dev_alarmstate",dev_alarmstat); |
| | | wrapper.eq("dev_id",devId); |
| | | flag=mapper.update(null,wrapper); |
| | | flag=mapper.update((Fbs9100State) ActionUtil.objeNull,wrapper); |
| | | if(flag>0){ |
| | | boolean b=service.sendCmdToFBS9100Dev(35,0, devId); |
| | | if(b){ |
| | |
| | | dev_alarmstat=3; |
| | | wrapper.set("dev_alarmstate",dev_alarmstat); |
| | | wrapper.eq("dev_id",devId); |
| | | flag=mapper.update(null,wrapper); |
| | | flag=mapper.update((Fbs9100State) ActionUtil.objeNull,wrapper); |
| | | if(flag>0){ |
| | | bl=true; |
| | | msg="修改成功!"; |
| | |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * 这个是按照设备id来统计的,一拖二的设备有两个设备id,被看作两个设备,弃用 |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @Deprecated |
| | | public Response getBTSEquipStatus(int userId){ |
| | | |
| | | Response response = new Response(); |
| | |
| | | /*QueryWrapper<Fbs9100State> wrapper = Wrappers.query(); |
| | | wrapper.select("record_datetime", "dev_workstate"); |
| | | List<Fbs9100State> fbs9100StateList = mapper.selectList(wrapper);*/ |
| | | List<Fbs9100State> fbs9100StateList = mapper.getListWithoutZJDYBTSE2(userId); |
| | | List<Fbs9100State> fbs9100StateList = mapper.getListWithoutZJDYBTSE2(userId, 1); |
| | | //首先查看是否通讯故障,时间大于1分钟为通讯故障 |
| | | for (int i = 0; i < fbs9100StateList.size(); i++) { |
| | | Calendar instance = Calendar.getInstance(); |
| | | instance.add(Calendar.MINUTE, -1); |
| | | Date time = instance.getTime(); |
| | | //if (time.compareTo(DateUtil.YYYY_MM_DD_HH_MM_SS.parse(fbs9100StateList.get(i).getRecordDatetime())) > 0) { |
| | | if (time.compareTo(ThreadLocalUtil.parse(fbs9100StateList.get(i).getRecordDatetime(),1)) > 0) { |
| | | resultMap.put("通讯故障数量", resultMap.get("通讯故障数量") + 1); |
| | | } else { |
| | | switch (fbs9100StateList.get(i).getDevWorkstate()) { |
| | | case DeviceConstant.DEV_ONLINE_CHARGE: |
| | | resultMap.put("在线浮充数量", resultMap.get("在线浮充数量") + 1); |
| | | break; |
| | | case DeviceConstant.DEV_PRE_CHARGE: |
| | | resultMap.put("预充电数量", resultMap.get("预充电数量") + 1); |
| | | break; |
| | | case DeviceConstant.DEV_NUCLEAR_CAP: |
| | | resultMap.put("核容测试数量", resultMap.get("核容测试数量") + 1); |
| | | break; |
| | | case DeviceConstant.DEV_RES_TEST: |
| | | resultMap.put("内阻测试数量", resultMap.get("内阻测试数量") + 1); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return response.setII(1, true, resultMap, ""); |
| | | } catch (Exception e) { |
| | | return response.set(1, false, "发生异常:" + e.getCause()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 这个是按照设备ip来统计的. |
| | | * 通讯故障>核容放电>充电>内阻>浮充, |
| | | * 如果一拖二的设备,有两个不同状态,实现状态优先级覆盖 |
| | | * |
| | | * 设备的数量统计和设备状态的统计,逻辑是不同的,数据库筛选的时候条件逻辑必定是不同的: TODO |
| | | * 通常情况下,设备数量统计,要排除掉一个设备两个id的一拖二情况; |
| | | * 而设备状态统计,只需要区分一个设备的字段,一个设备有多条记录也是正常合理的,通过状态优先级覆盖来定义整个设备的状态 |
| | | * |
| | | * @param userId |
| | | * @param type 1-太原排除蓄电池设备一拖二的第二组状态统计 |
| | | * @param type 2-统计所有设备ip的状态 |
| | | * @return |
| | | */ |
| | | public Response getBTSEquipStatus2(int userId,int type){ |
| | | |
| | | Response response = new Response(); |
| | | try { |
| | | Map<String, Integer> resultMap = new HashMap<>(); |
| | | resultMap.put("直连充电数量", 0); |
| | | resultMap.put("预充电数量", 0); |
| | | resultMap.put("核容测试数量", 0); |
| | | resultMap.put("内阻测试数量", 0); |
| | | resultMap.put("通讯故障数量", 0); |
| | | |
| | | List<Fbs9100State> fbs9100StateList = mapper.getListWithoutZJDYBTSE2(userId,type); |
| | | //上面的分组字段 只要能区分 不同的设备就行了. 因为如果是一拖二的情况,也可通过后面的状态优先级来覆盖,设备不会重复 |
| | | //太供可以通过ip来确定是哪台设备 |
| | | Map<String, List<Fbs9100State>> deviceMap = null; |
| | | if(YamlProperties.systemSubType == 3){ //晋源 - 因为所有设备共用一个ip, 所以需要加上devId |
| | | deviceMap = fbs9100StateList.stream().collect(Collectors.groupingBy(state -> String.format("%s_%s",state.getDevIp(), state.getDevId()))); |
| | | }else{ //默认通用 |
| | | deviceMap = fbs9100StateList.stream().collect(Collectors.groupingBy(state -> String.valueOf(state.getDevIp()))); |
| | | } |
| | | //Map<String, List<Fbs9100State>> deviceMap = fbs9100StateList.stream().collect(Collectors.groupingBy(state -> |
| | | // String.format("%s_%s",state.getDevIp(), state.getDevId()))); |
| | | Set<String> deviceSet = deviceMap.keySet(); |
| | | Calendar instance = Calendar.getInstance(); |
| | | instance.add(Calendar.MINUTE, -1); |
| | | Date time = instance.getTime(); |
| | | //这个遍历里面,是按照groupingBy(字段)来进行分组的,可以存在一个设备多个记录,即出现一拖二的情况. 这个时候按照优先级进行覆盖来定义整个设备的状态 |
| | | //上面的分组字段 只要能区分 不同的设备就行了. 因为如果是一拖二的情况,也可通过状态优先级来覆盖 |
| | | for (String deviceIp : deviceSet) { |
| | | List<Fbs9100State> fbs9100States = deviceMap.get(deviceIp); |
| | | //存在6186设备,这个设备的设备状态值采用的是devAlarmState,所以需要单独处理 |
| | | List<Integer> workStateList; |
| | | if(fbs9100States.get(0).getDevId().toString().startsWith("6186")){ |
| | | workStateList = fbs9100States.stream().map(Fbs9100State::getDevAlarmstate).collect(Collectors.toList()); |
| | | }else { |
| | | workStateList = fbs9100States.stream().map(Fbs9100State::getDevWorkstate).collect(Collectors.toList()); |
| | | } |
| | | Map<Integer, List<Integer>> workStateMap = workStateList.stream().collect(Collectors.groupingBy(Integer::intValue)); |
| | | Set<Integer> workStateSet = workStateMap.keySet(); |
| | | boolean commError = false; |
| | | for (Fbs9100State state : fbs9100States) { |
| | | //if (time.compareTo(DateUtil.YYYY_MM_DD_HH_MM_SS.parse(state.getRecordDatetime())) > 0) { |
| | | if (time.compareTo(ThreadLocalUtil.parse(state.getRecordDatetime(),1)) > 0) { |
| | | resultMap.put("通讯故障数量", resultMap.get("通讯故障数量") + 1); |
| | | commError = true; |
| | | break; |
| | | } |
| | | } |
| | | //不存在通讯故障,则需要再判断优先级覆盖 |
| | | if(!commError){ |
| | | if(workStateSet.contains(DeviceConstant.DEV_NUCLEAR_CAP)) { |
| | | resultMap.put("核容测试数量", resultMap.get("核容测试数量") + 1); |
| | | } |
| | | else if(workStateSet.contains(DeviceConstant.DEV_PRE_CHARGE)) { |
| | | resultMap.put("预充电数量", resultMap.get("预充电数量") + 1); |
| | | } |
| | | else if(workStateSet.contains(DeviceConstant.DEV_RES_TEST)) { |
| | | resultMap.put("内阻测试数量", resultMap.get("内阻测试数量") + 1); |
| | | } |
| | | else if(workStateSet.contains(DeviceConstant.DEV_ONLINE_CHARGE)) { |
| | | resultMap.put("直连充电数量", resultMap.get("直连充电数量") + 1); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | /*//首先查看是否通讯故障,时间大于1分钟为通讯故障 |
| | | for (int i = 0; i < fbs9100StateList.size(); i++) { |
| | | Calendar instance = Calendar.getInstance(); |
| | | instance.add(Calendar.MINUTE, -1); |
| | |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }*/ |
| | | |
| | | return response.setII(1, true, resultMap, null); |
| | | return response.setII(1, true, resultMap, ""); |
| | | } catch (Exception e) { |
| | | return response.set(1, false, "发生异常:" + e.getCause()); |
| | | } |
| | | } |
| | | |
| | | //山西晋源特定接口 |
| | | public Response getBTSEquipStatus2JY(int type){ |
| | | |
| | | Response response = new Response(); |
| | | try { |
| | | Map<String, Integer> resultMap = new HashMap<>(); |
| | | resultMap.put("直连充电数量", 0); |
| | | resultMap.put("预充电数量", 0); |
| | | resultMap.put("核容测试数量", 0); |
| | | resultMap.put("内阻测试数量", 0); |
| | | resultMap.put("通讯故障数量", 0); |
| | | |
| | | List<Fbs9100State> fbs9100StateList = mapper.getListWithoutZJDYBTSE2JY(type); |
| | | |
| | | //Map<String, List<Fbs9100State>> deviceMap = fbs9100StateList.stream().collect(Collectors.groupingBy(Fbs9100State::getDevIp)); |
| | | //JY的设备,ip都一样,所以区分不同的设备,需要通过ip+id |
| | | Map<String, List<Fbs9100State>> deviceMap = fbs9100StateList.stream().collect(Collectors.groupingBy(state ->String.format("%s_%s",state.getDevIp(), state.getDevId()))); |
| | | Set<String> deviceSet = deviceMap.keySet(); |
| | | Calendar instance = Calendar.getInstance(); |
| | | instance.add(Calendar.MINUTE, -1); |
| | | Date time = instance.getTime(); |
| | | for (String deviceIp : deviceSet) { |
| | | List<Fbs9100State> fbs9100States = deviceMap.get(deviceIp); |
| | | //存在6186设备,这个设备的设备状态值采用的是devAlarmState,所以需要单独处理 |
| | | List<Integer> workStateList; |
| | | if(fbs9100States.get(0).getDevId().toString().startsWith("6186")){ |
| | | workStateList = fbs9100States.stream().map(Fbs9100State::getDevAlarmstate).collect(Collectors.toList()); |
| | | }else { |
| | | workStateList = fbs9100States.stream().map(Fbs9100State::getDevWorkstate).collect(Collectors.toList()); |
| | | } |
| | | Map<Integer, List<Integer>> workStateMap = workStateList.stream().collect(Collectors.groupingBy(Integer::intValue)); |
| | | Set<Integer> workStateSet = workStateMap.keySet(); |
| | | boolean commError = false; |
| | | for (Fbs9100State state : fbs9100States) { |
| | | //if (time.compareTo(DateUtil.YYYY_MM_DD_HH_MM_SS.parse(state.getRecordDatetime())) > 0) { |
| | | if (time.compareTo(ThreadLocalUtil.parse(state.getRecordDatetime(),1)) > 0) { |
| | | resultMap.put("通讯故障数量", resultMap.get("通讯故障数量") + 1); |
| | | commError = true; |
| | | break; |
| | | } |
| | | } |
| | | //不存在通讯故障,则需要再判断优先级覆盖 |
| | | if(!commError){ |
| | | if(workStateSet.contains(DeviceConstant.DEV_NUCLEAR_CAP)) { |
| | | resultMap.put("核容测试数量", resultMap.get("核容测试数量") + 1); |
| | | } |
| | | else if(workStateSet.contains(DeviceConstant.DEV_PRE_CHARGE)) { |
| | | resultMap.put("预充电数量", resultMap.get("预充电数量") + 1); |
| | | } |
| | | else if(workStateSet.contains(DeviceConstant.DEV_RES_TEST)) { |
| | | resultMap.put("内阻测试数量", resultMap.get("内阻测试数量") + 1); |
| | | } |
| | | else if(workStateSet.contains(DeviceConstant.DEV_ONLINE_CHARGE)) { |
| | | resultMap.put("直连充电数量", resultMap.get("直连充电数量") + 1); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | /*//首先查看是否通讯故障,时间大于1分钟为通讯故障 |
| | | for (int i = 0; i < fbs9100StateList.size(); i++) { |
| | | Calendar instance = Calendar.getInstance(); |
| | | instance.add(Calendar.MINUTE, -1); |
| | | Date time = instance.getTime(); |
| | | if (time.compareTo(DateUtil.YYYY_MM_DD_HH_MM_SS.parse(fbs9100StateList.get(i).getRecordDatetime())) > 0) { |
| | | resultMap.put("通讯故障数量", resultMap.get("通讯故障数量") + 1); |
| | | } else { |
| | | switch (fbs9100StateList.get(i).getDevWorkstate()) { |
| | | case DeviceConstant.DEV_ONLINE_CHARGE: |
| | | resultMap.put("在线浮充数量", resultMap.get("在线浮充数量") + 1); |
| | | break; |
| | | case DeviceConstant.DEV_PRE_CHARGE: |
| | | resultMap.put("预充电数量", resultMap.get("预充电数量") + 1); |
| | | break; |
| | | case DeviceConstant.DEV_NUCLEAR_CAP: |
| | | resultMap.put("核容测试数量", resultMap.get("核容测试数量") + 1); |
| | | break; |
| | | case DeviceConstant.DEV_RES_TEST: |
| | | resultMap.put("内阻测试数量", resultMap.get("内阻测试数量") + 1); |
| | | break; |
| | | } |
| | | } |
| | | }*/ |
| | | |
| | | return response.setII(1, true, resultMap, ""); |
| | | } catch (Exception e) { |
| | | return response.set(1, false, "发生异常:" + e.getCause()); |
| | | } |
| | | } |
| | | |
| | | |
| | | public List<Fbs9100State> getStateList(int userId) { |
| | | List<Fbs9100State> list = mapper.getStateList(userId); |
| | |
| | | if (workState == 2 || workState == 3) { |
| | | stateNumMap.put("state" + workState, stateDisMap.get(workState).size()); |
| | | List<DischargeState> worklist = stateDisMap.get(workState); |
| | | /*for (DischargeState state : worklist) { |
| | | int battgroupId = 0; |
| | | int battTestLong = 0; |
| | | battgroupId = binfMapper.searchBattGroupId(state.getStationId()); |
| | | state.setBattGroupId(battgroupId); |
| | | }*/ |
| | | stateMap.put("state" + workState, worklist); |
| | | } |
| | | } |
| | | map.put("stateNumMap", stateNumMap); |
| | | map.put("stateMap", stateMap); |
| | | map.put("nowTime", ActionUtil.sdf.format(new Date())); |
| | | //map.put("nowTime", ActionUtil.sdf.format(new Date())); |
| | | map.put("nowTime", ThreadLocalUtil.format(new Date(),1)); |
| | | return new Response().setII(1, true, map, "今日放电站点统计"); |
| | | } catch (Exception e) { |
| | | return new Response().set(1, false, "出现异常" + e.getMessage()); |
| | |
| | | int jcdisNum = mapper.getJcAnalysis(userId); |
| | | return jcdisNum; |
| | | } |
| | | |
| | | public Response getFbsState(FbsStatePar fbsStatePar) { |
| | | Map<String, Response> res=new HashMap<>(); |
| | | //查询fbs9100信息 |
| | | Response f9100stateRes = searchByCondition(fbsStatePar.getPageNum(),fbsStatePar.getPageSize(),fbsStatePar.getDevErrcommcount(),fbsStatePar.getUserId()); |
| | | res.put("f9100state",f9100stateRes); |
| | | |
| | | Response f9600StateRes = fbs9600StateService.searchByCondition(fbsStatePar.getPageNum(),fbsStatePar.getPageSize(),fbsStatePar.getDevErrcommcount(),fbsStatePar.getUserId()); |
| | | res.put("f9600state",f9600StateRes); |
| | | |
| | | Response ld9stateRes = ld9StateService.searchByCondition(fbsStatePar.getPageNum(),fbsStatePar.getPageSize(),fbsStatePar.getDevErrcommcount(),fbsStatePar.getUserId()); |
| | | res.put("ld9state",ld9stateRes); |
| | | return new Response().set(1, res); |
| | | } |
| | | |
| | | public void addOrUpdate(List<Fbs9100State> deviceStateList) { |
| | | List<Long> devIdList = deviceStateList.stream().map(Fbs9100State::getDevId).collect(Collectors.toList()); |
| | | QueryWrapper<Fbs9100State> query = Wrappers.query(); |
| | | query.in("dev_id",devIdList); |
| | | List<Fbs9100State> fbs9100StateListInDB = mapper.selectList(query); |
| | | List<Long> devIdListInDB = fbs9100StateListInDB.stream().map(Fbs9100State::getDevId).collect(Collectors.toList()); |
| | | |
| | | for (Fbs9100State fbs9100State : deviceStateList) { |
| | | if(devIdListInDB.contains(fbs9100State.getDevId())){ //更新 |
| | | UpdateWrapper<Fbs9100State> update = Wrappers.update(); |
| | | update.set("dev_workstate",fbs9100State.getDevWorkstate()) |
| | | .set("dev_last_captest_stop_type",fbs9100State.getDevLastCaptestStopType()) |
| | | .set("record_datetime",fbs9100State.getRecordDatetime()) |
| | | .eq("dev_id",fbs9100State.getDevId()); |
| | | mapper.update(null,update); |
| | | }else{ //新增 |
| | | mapper.insert(fbs9100State); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |