package com.sandu.ximon.admin.service; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.sandu.common.execption.BusinessException; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.dto.TerminalDto; import com.sandu.ximon.admin.param.BroadcastTerminalV2Param; import com.sandu.ximon.admin.redis.DeviceRedisKey; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.utils.RedisUtils; import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils; import com.sandu.ximon.admin.utils.TerminalAPIUtils; import com.sandu.ximon.admin.vo.EquipmentInfomation; import com.sandu.ximon.admin.vo.RedisDeviceStatus; import com.sandu.ximon.dao.bo.BroadcastTerminalV2EntityBo; import com.sandu.ximon.dao.domain.BroadcastTerminalV2Entity; import com.sandu.ximon.dao.enums.AdministratorEnums; import com.sandu.ximon.dao.enums.OrderByEnums; import com.sandu.ximon.dao.enums.PoleBindingEnums; import com.sandu.ximon.dao.mapper.IPBroadcastMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class IpVolumeService extends BaseServiceImpl { @Autowired private IPBroadcastMapper broadcastTerminalV2EntityMapper; @Autowired private RedisUtils redisUtils; /** * 同步终端 */ public void synchTerminal() { List server = broadcastTerminalV2EntityMapper.listAll(); List list = TerminalAPIUtils.getTerminalList(); System.out.println(list); list.stream().forEach(item -> { // 音柱服务器终端ID Integer id = item.getId(); boolean add = true; // 遍历数据库终端 for (BroadcastTerminalV2Entity b : server) { Integer id1 = b.getId(); if (id.equals(id1)) { add = false; break; } } if (add) { BroadcastTerminalV2Entity b = new BroadcastTerminalV2Entity(); b.setId(id); b.setTerminalName(item.getName()); b.setStreetlightId(0L); b.setExist(1); save(b); } }); /** * IP音柱同步 日志记录开始 */ StoreOperationRecordsUtils.storeOperationData(null, null, "IP音柱同步", "IP音柱同步设备"); /** * IP音柱同步 日志记录结束 */ } /** * IP音柱列表 * * @param baseConditionVO * @param order * @param seq * @param broadcastTerminalV2Param * @return */ public List getBroadcastTerminalList(BaseConditionVO baseConditionVO, Integer order, Integer seq, BroadcastTerminalV2Param broadcastTerminalV2Param) { if (broadcastTerminalV2Param == null) { broadcastTerminalV2Param = new BroadcastTerminalV2Param(); } //排序字段 String orderByResult = OrderByEnums.IP_VOLUME_ID.getCode(); //正序、倒叙 String orderBySeq = OrderByEnums.ASC.getCode(); if (order != null) { switch (order) { case 1: orderByResult = OrderByEnums.IP_VOLUME_ID.getCode(); break; case 2: orderByResult = OrderByEnums.IP_VOLUME_NAME.getCode(); case 3: orderByResult = OrderByEnums.IP_VOLUME_POLE_NAME.getCode(); default: } } if (seq != null) { switch (seq) { case 1: orderBySeq = " ASC"; break; case 2: orderBySeq = " DESC"; break; default: break; } } //排序方式 String orderBy = orderByResult + " " + orderBySeq; //在线状态全部的话需要分页 if (baseConditionVO != null && 2 == broadcastTerminalV2Param.getWorkState()) { PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize(), orderBy); } List broadcastTerminalV2EntityBos; List broadcastTerminalV2EntityBos_final = new ArrayList<>(); //绑定状态:已绑定/未绑定/全部 if (broadcastTerminalV2Param.getBindingState() == null || 2 == broadcastTerminalV2Param.getBindingState()) { //全部 int bindingState = 2; if (SecurityUtils.getClientId() == null) { broadcastTerminalV2EntityBos = broadcastTerminalV2EntityMapper.getBroadcastTerminalList(broadcastTerminalV2Param.getKeyword(), null, bindingState); } else { broadcastTerminalV2EntityBos = broadcastTerminalV2EntityMapper.getBroadcastTerminalList(broadcastTerminalV2Param.getKeyword(), SecurityUtils.getUserId(), bindingState); } } else { if (SecurityUtils.getClientId() == null) { broadcastTerminalV2EntityBos = broadcastTerminalV2EntityMapper.getBroadcastTerminalList(broadcastTerminalV2Param.getKeyword(), null, broadcastTerminalV2Param.getBindingState()); } else { broadcastTerminalV2EntityBos = broadcastTerminalV2EntityMapper.getBroadcastTerminalList(broadcastTerminalV2Param.getKeyword(), SecurityUtils.getUserId(), broadcastTerminalV2Param.getBindingState()); } } List list = TerminalAPIUtils.getTerminalList(); for (BroadcastTerminalV2EntityBo bean : broadcastTerminalV2EntityBos) { for (TerminalDto terminalDto : list) { if (bean.getId().equals(terminalDto.getId())) { bean.setStatus(terminalDto.getStatus()); bean.setIp(terminalDto.getIp()); bean.setVolumn(terminalDto.getVolumn()); bean.setDefaultVolumn(terminalDto.getDefaultVolumn()); bean.setPower(terminalDto.getPower()); bean.setDefaultPower(terminalDto.getDefaultPower()); bean.setLast(terminalDto.getLast()); bean.setTaskType(terminalDto.getTaskType()); bean.setTaskID(terminalDto.getTaskID()); if (0 == broadcastTerminalV2Param.getWorkState() && 0 == terminalDto.getStatus()) { broadcastTerminalV2EntityBos_final.add(bean); } else if (1 == broadcastTerminalV2Param.getWorkState() && 1 == terminalDto.getStatus()) { broadcastTerminalV2EntityBos_final.add(bean); } break; } } } if (2 == broadcastTerminalV2Param.getWorkState()) { return broadcastTerminalV2EntityBos; } else { return broadcastTerminalV2EntityBos_final; } } /** * IP音柱列表(用于首页数据统计) * * @return */ public List getBroadcastTerminalListOnHome() { List broadcastTerminalV2EntityBos; List broadcastTerminalV2EntityBos_final = new ArrayList<>(); if (SecurityUtils.getClientId() == null) { broadcastTerminalV2EntityBos = broadcastTerminalV2EntityMapper.getBroadcastTerminalList(null, null, 2); } else { broadcastTerminalV2EntityBos = broadcastTerminalV2EntityMapper.getBroadcastTerminalList(null, SecurityUtils.getUserId(), 2); } return broadcastTerminalV2EntityBos; } public List newIpTerminalList(String keyword) { List broadcastTerminalV2EntityBos = broadcastTerminalV2EntityMapper.getListTerminalOnBind(SecurityUtils.getClientId(), keyword); List list = TerminalAPIUtils.getTerminalList(); for (BroadcastTerminalV2EntityBo bean : broadcastTerminalV2EntityBos) { for (TerminalDto terminalDto : list) { if (bean.getId().equals(terminalDto.getId())) { bean.setStatus(terminalDto.getStatus()); bean.setIp(terminalDto.getIp()); bean.setVolumn(terminalDto.getVolume()); bean.setDefaultVolumn(terminalDto.getDefaultVolumn()); bean.setPower(terminalDto.getPower()); bean.setDefaultPower(terminalDto.getDefaultPower()); bean.setLast(terminalDto.getLast()); bean.setTaskType(terminalDto.getTaskType()); bean.setTaskID(terminalDto.getTaskID()); break; } } } return broadcastTerminalV2EntityBos; } /** * 修改设备绑定状态 * * @param flag true为绑定 false 为解绑 */ public void updateBingdingState(boolean flag, int deviceCode) { if (flag) {//绑定 BroadcastTerminalV2Entity broadcastTerminalV2Entity = getOne(Wrappers.lambdaQuery(BroadcastTerminalV2Entity.class).eq(BroadcastTerminalV2Entity::getId, deviceCode)); if (broadcastTerminalV2Entity == null) { return; } broadcastTerminalV2Entity.setBindStates(1); updateById(broadcastTerminalV2Entity); } else {//解绑 BroadcastTerminalV2Entity broadcastTerminalV2Entity = getOne(Wrappers.lambdaQuery(BroadcastTerminalV2Entity.class).eq(BroadcastTerminalV2Entity::getId, deviceCode)); if (broadcastTerminalV2Entity == null) { return; } broadcastTerminalV2Entity.setBindStates(0); updateById(broadcastTerminalV2Entity); } } /** * 音量修改 * * @param params * @return */ public boolean changeVol(BroadcastTerminalV2Param params) { if (params.getId() == null || params.getDefaultVolumn() == null || params.getDefaultVolumn() < 0) { throw new BusinessException("设备ID或修改的音量值不正确"); } boolean flag = TerminalAPIUtils.changeVol(params.getId(), params.getDefaultVolumn()); /** * IP音柱音量修改 日志记录开始 */ // String content = "{设备Id:" + params.getId() + ",修改后音量:" + params.getDefaultVolumn() + "}"; // StoreOperationRecordsUtils.storeOperationData(null, null, "IP音柱音量修改", content); /** * IP音柱音量修改 日志记录结束 */ return flag; } /** * 终端详情 */ public EquipmentInfomation getIpTerminalDetail(String id) { EquipmentInfomation equipmentInfo = new EquipmentInfomation(); equipmentInfo.setEquipmentType("IP音柱"); if (id == null || id.trim().length() == 0) { return equipmentInfo; } BroadcastTerminalV2Entity one = getOne(Wrappers.lambdaQuery(BroadcastTerminalV2Entity.class).eq(BroadcastTerminalV2Entity::getId, id)); if (one != null) { equipmentInfo.setEquipmentMac(id); equipmentInfo.setEquipmentName(one.getTerminalName()); } TerminalDto terminalInfo = TerminalAPIUtils.getTerminalInfo(Integer.valueOf(id)); if (terminalInfo != null) { //空闲 1、 工作中 2 或者 4、 断线 0, 报 错 8 switch (terminalInfo.getStatus()) { case 1: equipmentInfo.setEquipmentState("空闲"); break; case 2: case 4: equipmentInfo.setEquipmentState("工作中"); break; case 0: equipmentInfo.setEquipmentState("断线"); break; case 8: equipmentInfo.setEquipmentState("报错"); break; default: equipmentInfo.setEquipmentState("未知"); } } else { equipmentInfo.setEquipmentState("未知"); } return equipmentInfo; } /** * 根据终端id获取终端信息 * * @param name * @param id * @return */ public boolean updateBroadcastTerminalName(String name, Integer id) { if (name == null || name.trim().length() == 0) { throw new BusinessException("设备名不能为空"); } BroadcastTerminalV2Entity byId = getById(id); if (byId == null) { throw new BusinessException("终端不存在"); } if (AdministratorEnums.NORMAL.getCode().equals(SecurityUtils.getAdministratorIdentity())) { boolean belong = SpringContextHolder.getBean(PoleBindingService.class).isBelong(String.valueOf(byId.getId()), PoleBindingEnums.IPVOLUME); if (!belong) { throw new BusinessException("该设备不属于您,不能修改设备信息"); } } byId.setTerminalName(name); boolean flag = updateById(byId); /** * IP音柱修改设备名称日志记录开始 */ String content = "{设备Id:" + id + ",修改后名称:" + name + "}"; StoreOperationRecordsUtils.storeOperationData(null, null, "IP音柱修改设备名", content); /** * IP音柱改设备名称日志记录结束 */ return flag; } public static Object getInfo() { return TerminalAPIUtils.getTerminalInfo(25); } /** * 向Redis中存入设备状态 */ public void setCacheData() { //服务器所有音柱信息 List list = TerminalAPIUtils.getTerminalList(); list.forEach( device -> { RedisDeviceStatus deviceStatus = new RedisDeviceStatus(); deviceStatus.setDeviceId(device.getId().toString()); if (device != null) { //空闲 1、 工作中 2 或者 4、 断线 0, 报 错 8 switch (device.getStatus()) { case 1: case 2: case 4: deviceStatus.setStatus(0); break; case 0: deviceStatus.setStatus(1); break; case 8: deviceStatus.setStatus(0); break; default: deviceStatus.setStatus(1); } } redisUtils.set(DeviceRedisKey.IP_BROADCAST + device.getId(), deviceStatus); } ); } }