whycxzp
2023-07-28 73677fdd3bca88c00dfbe52ca5f5b8f9fd35e80e
设备状态统计更新
4个文件已修改
126 ■■■■■ 已修改文件
src/main/java/com/whyc/constant/DeviceConstant.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/Fbs9100StateController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/Fbs9100StateService.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/Fbs9100StateMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/constant/DeviceConstant.java
@@ -2,6 +2,8 @@
/**
 * 设备常量
 * 通讯故障>核容放电>充电>内阻>浮充
 *
 */
public class DeviceConstant {
src/main/java/com/whyc/controller/Fbs9100StateController.java
@@ -10,6 +10,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.text.ParseException;
@RestController
@Api(tags= "在线监测-实时监控")
@RequestMapping("Fbs9100_stateAction")
@@ -54,4 +56,11 @@
    public Response getFbsState(@RequestBody FbsStatePar fbsStatePar){
        return service.getFbsState(fbsStatePar);
    }
    @ApiOperation(value = "设备工作状态")
    @GetMapping("BTSEquipStatus")
    public Response getBTSEquipStatus() throws ParseException {
        Long uId = ActionUtil.getUser().getUId();
        return service.getBTSEquipStatus2(uId.intValue());
    }
}
src/main/java/com/whyc/service/Fbs9100StateService.java
@@ -20,6 +20,7 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -138,6 +139,12 @@
        return list;
    }
    /**
     * 这个是按照设备id来统计的,一拖二的设备有两个设备id,被看作两个设备,弃用
     * @param userId
     * @return
     */
    @Deprecated
    public Response getBTSEquipStatus(int userId){
        Response response = new Response();
@@ -208,6 +215,92 @@
        }
    }
    /**
     * 这个是按照设备ip来统计的.
     * 通讯故障>核容放电>充电>内阻>浮充,
     * 如果一拖二的设备,有两个不同状态,实现状态优先级覆盖
     * @param userId
     * @return
     */
    @Deprecated
    public Response getBTSEquipStatus2(int userId) throws ParseException {
        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);
            Map<String, List<Fbs9100State>> deviceMap = fbs9100StateList.stream().collect(Collectors.groupingBy(Fbs9100State::getDevIp));
            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);
                List<Integer> 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) {
                        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, null);
        } catch (Exception e) {
            return response.set(1, false, "发生异常:" + e.getCause());
        }
    }
    public List<Fbs9100State> getStateList(int userId) {
        List<Fbs9100State> list = mapper.getStateList(userId);
        return list;
src/main/resources/mapper/Fbs9100StateMapper.xml
@@ -166,7 +166,7 @@
        )
    </select>
    <select id="getListWithoutZJDYBTSE2" resultType="com.whyc.pojo.Fbs9100State">
        select state.*
        select distinct state.*
        from db_ram_db.tb_fbs9100_state state,
        db_battinf.tb_battinf battInf
        where state.dev_id = battInf.fbsdeviceId
@@ -185,6 +185,26 @@
        and db_user.tb_user_inf.uid = #{userId}
            )
    </select>
    <select id="getList2WithoutZJDYBTSE2" resultType="com.whyc.pojo.Fbs9100State">
        select distinct battInf.FBSDeviceIp as fbsDeviceIp,state.*
        from db_ram_db.tb_fbs9100_state state,
        db_battinf.tb_battinf battInf
        where state.dev_id = battInf.fbsdeviceId
        and battInf.FBSDeviceName != "ZJDYBTSE2"
        and state.dev_id in (select distinct db_battinf.tb_battinf.fbsdeviceId
        from db_battinf.tb_battinf
        , db_user.tb_user_battgroup_baojigroup_battgroup
        , db_user.tb_user_battgroup_baojigroup_usr
        , db_user.tb_user_inf
        where db_user.tb_user_battgroup_baojigroup_battgroup.BattGroupId =
        db_battinf.tb_battinf.BattGroupId
        and db_user.tb_user_battgroup_baojigroup_usr.baoji_group_id =
        db_user.tb_user_battgroup_baojigroup_battgroup.baoji_group_id
        and db_user.tb_user_inf.uid =
        db_user.tb_user_battgroup_baojigroup_usr.uid
        and db_user.tb_user_inf.uid = #{userId}
        )
    </select>
    <resultMap id="chargeStatic" type="com.whyc.dto.result.DischargeState">
        <result column="battGroupId" property="battGroupId"></result>
        <result column="stationId" property="stationId"></result>