| | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.sandu.common.execption.BusinessException; |
| | | import com.sandu.common.service.impl.BaseServiceImpl; |
| | | import com.sandu.common.util.SpringContextHolder; |
| | | import com.sandu.ximon.admin.newnova.led.NewNovaLedService; |
| | | import com.sandu.ximon.admin.param.PoleBindingParam; |
| | | import com.sandu.ximon.dao.domain.PoleBinding; |
| | | import com.sandu.ximon.admin.security.SecurityUtils; |
| | | import com.sandu.ximon.dao.domain.*; |
| | | import com.sandu.ximon.dao.enums.PoleBindingEnums; |
| | | import com.sandu.ximon.dao.mapper.PoleBindingMapper; |
| | | import lombok.AllArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | * @param param |
| | | * @return |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean bindPole(Long poleId, PoleBindingParam param) { |
| | | Integer deviceType = param.getDeviceType(); |
| | | // if (PoleBindingEnums.LIGHT.getCode().equals(deviceType)) { |
| | | // } |
| | | LambdaQueryWrapper<PoleBinding> eq = Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId); |
| | | |
| | | int size = 0; |
| | | switch (deviceType.toString()) { |
| | | case PoleBindingEnums.LIGHT: |
| | | size = SpringContextHolder.getBean(LightService.class).list(Wrappers.lambdaQuery(Light.class).eq(Light::getDeviceCode, param.getDeviceCode())).size(); |
| | | break; |
| | | case PoleBindingEnums.VONNOX: |
| | | size = SpringContextHolder.getBean(LedPlayerEntityService.class).list(Wrappers.lambdaQuery(LedPlayerEntity.class).eq(LedPlayerEntity::getSn, param.getDeviceCode())).size(); |
| | | break; |
| | | case PoleBindingEnums.CHARGING_PILE: |
| | | size = SpringContextHolder.getBean(C3ChargingService.class).list(Wrappers.lambdaQuery(C3mCharging.class).eq(C3mCharging::getMcuUdid, param.getDeviceCode())).size(); |
| | | break; |
| | | case PoleBindingEnums.ATMOSPHERIC: |
| | | Pole byId = SpringContextHolder.getBean(PoleService.class).getById(poleId); |
| | | if (byId == null) { |
| | | throw new BusinessException("未找到灯杆"); |
| | | } |
| | | if (byId.getDeviceCode() != null || !byId.getDeviceCode().isEmpty()) { |
| | | if (!param.getDeviceCode().equals(byId.getDeviceCode())) { |
| | | throw new BusinessException("灯杆mac和大气mac不一致, 无法绑定"); |
| | | } |
| | | } else { |
| | | throw new BusinessException("灯杆mac为空,无法绑定大气设备"); |
| | | } |
| | | |
| | | int size1 = SpringContextHolder.getBean(AirEquipmentService.class).list(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, param.getDeviceCode())).size(); |
| | | int size2 = SpringContextHolder.getBean(AirEquipmentNongGengService.class).list(Wrappers.lambdaQuery(AirEquipmentNongGeng.class).eq(AirEquipmentNongGeng::getMac, param.getDeviceCode())).size(); |
| | | //一键求助两类硬件 |
| | | if (size1 > 0 || size2 > 0) { |
| | | size = 1; |
| | | } |
| | | break; |
| | | case PoleBindingEnums.WATER: |
| | | size = SpringContextHolder.getBean(WaterQualityEquipmentService.class).list(Wrappers.lambdaQuery(WaterQualityEquipment.class).eq(WaterQualityEquipment::getWaterQualityEquipmentCode, param.getDeviceCode())).size(); |
| | | break; |
| | | case PoleBindingEnums.IPVOLUME: |
| | | size = SpringContextHolder.getBean(IpVolumeService.class).list(Wrappers.lambdaQuery(BroadcastTerminalV2Entity.class).eq(BroadcastTerminalV2Entity::getId, param.getDeviceCode())).size(); |
| | | break; |
| | | case PoleBindingEnums.LCD_ADVERTISING: |
| | | |
| | | break; |
| | | case PoleBindingEnums.MONITOR: |
| | | size = SpringContextHolder.getBean(MonitorService.class).list(Wrappers.lambdaQuery(Monitor.class).eq(Monitor::getDeviceSerial, param.getDeviceCode())).size(); |
| | | break; |
| | | case PoleBindingEnums.LIGHTPOLEHEELING: |
| | | size = SpringContextHolder.getBean(LightPoleHeelingEquipmentService.class).list(Wrappers.lambdaQuery(LightPoleHeelingEquipment.class).eq(LightPoleHeelingEquipment::getMac, param.getDeviceCode())).size(); |
| | | break; |
| | | case PoleBindingEnums.FOR_HELP: |
| | | int size3 = SpringContextHolder.getBean(InterphoneHostService.class).list(Wrappers.lambdaQuery(InterphoneHost.class).eq(InterphoneHost::getHostMac, param.getDeviceCode())).size(); |
| | | int size4 = SpringContextHolder.getBean(InterphoneSubService.class).list(Wrappers.lambdaQuery(InterphoneSub.class).eq(InterphoneSub::getSubMac, param.getDeviceCode())).size(); |
| | | //一键求助两类硬件 |
| | | if (size3 > 0 || size4 > 0) { |
| | | size = 1; |
| | | } |
| | | break; |
| | | case PoleBindingEnums.XIXUN: |
| | | size = SpringContextHolder.getBean(PoleLightemitService.class).list(Wrappers.lambdaQuery(PoleLightemitEntity.class).eq(PoleLightemitEntity::getLightemitControlCode, param.getDeviceCode())).size(); |
| | | break; |
| | | case PoleBindingEnums.ATMOSPHERIC_NONG_GENG: |
| | | size = SpringContextHolder.getBean(AirEquipmentNongGengService.class).list(Wrappers.lambdaQuery(AirEquipmentNongGeng.class).eq(AirEquipmentNongGeng::getMac, param.getDeviceCode())).size(); |
| | | break; |
| | | case PoleBindingEnums.NEW_NOVA: |
| | | size = SpringContextHolder.getBean(NewNovaLedService.class).list(Wrappers.lambdaQuery(NewNovaLed.class).eq(NewNovaLed::getSn, param.getDeviceCode())).size(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | if (size == 0) { |
| | | throw new BusinessException("设备码不正确,硬件不存在"); |
| | | } |
| | | |
| | | |
| | | LambdaQueryWrapper<PoleBinding> eq = Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceType, param.getDeviceType()).eq(PoleBinding::getPoleId, poleId); |
| | | List<PoleBinding> list = list(eq); |
| | | if (list.size() != 0) { |
| | | for (PoleBinding poleBinding : list) { |
| | | if (poleBinding.getDeviceType().equals(deviceType)) { |
| | | //充电桩的绑定是网络请求是带过来的灯杆信息,要允许直接修改 |
| | | if (poleBinding.getDeviceType().equals(deviceType) && deviceType != 2) { |
| | | throw new BusinessException("该灯杆已绑定过相同类型设备"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | PoleBinding one = getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, param.getDeviceCode())); |
| | | PoleBinding one = getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, param.getDeviceCode()) |
| | | .eq(PoleBinding::getDeviceType, param.getDeviceType())); |
| | | if (one == null) { |
| | | //充电桩保存绑定关系需要先判断是不是正确的灯杆 |
| | | if (deviceType == 2) { |
| | | C3mCharging mCharging = SpringContextHolder.getBean(C3ChargingService.class). |
| | | getOne(Wrappers.lambdaQuery(C3mCharging.class).eq(C3mCharging::getMcuUdid, param.getDeviceCode())); |
| | | Pole poleInfo = SpringContextHolder.getBean(PoleService.class).getById(poleId); |
| | | |
| | | if (!mCharging.getPoleDevicesCode().equals(poleInfo.getDeviceCode())) { |
| | | throw new BusinessException("绑定出错!该充电桩硬件绑定的灯杆mac为:" + mCharging.getPoleDevicesCode()); |
| | | } |
| | | |
| | | } |
| | | PoleBinding poleBinding = new PoleBinding(); |
| | | poleBinding.setPoleId(poleId); |
| | | poleBinding.setDeviceType(deviceType); |
| | | poleBinding.setDeviceName(param.getDeviceName()); |
| | | poleBinding.setDeviceCode(param.getDeviceCode()); |
| | | return save(poleBinding); |
| | | |
| | | } else { |
| | | //修改单灯的绑定关系的时候要额外处理的事务 |
| | | // 删除灯杆的devicescode |
| | | if (param.getDeviceType() == 0) { |
| | | PoleService poleService = SpringContextHolder.getBean(PoleService.class); |
| | | Pole pole = poleService.getOne(Wrappers.lambdaQuery(Pole.class).eq(Pole::getId, one.getPoleId())); |
| | | if (pole != null) { |
| | | pole.setDeviceCode(null); |
| | | poleService.updateById(pole); |
| | | } |
| | | } |
| | | |
| | | //充电桩保存绑定关系需要先判断是不是正确的灯杆 |
| | | if (deviceType == 2) { |
| | | C3mCharging mCharging = SpringContextHolder.getBean(C3ChargingService.class). |
| | | getOne(Wrappers.lambdaQuery(C3mCharging.class).eq(C3mCharging::getMcuUdid, param.getDeviceCode())); |
| | | Pole poleInfo = SpringContextHolder.getBean(PoleService.class).getById(poleId); |
| | | |
| | | if (!mCharging.getPoleDevicesCode().equals(poleInfo.getDeviceCode())) { |
| | | throw new BusinessException("绑定出错!该充电桩硬件绑定的灯杆mac为:" + mCharging.getPoleDevicesCode()); |
| | | } |
| | | |
| | | } |
| | | |
| | | one.setPoleId(poleId); |
| | | one.setDeviceType(param.getDeviceType()); |
| | | one.setDeviceName(param.getDeviceName()); |
| | | one.setDeviceCode(param.getDeviceCode()); |
| | | return updateById(one); |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 灯杆解绑设备,删除设备前需要解绑 |
| | | * |
| | | * @param deviceCode |
| | | */ |
| | | public boolean unBindPole(Long poleId, String deviceCode, Integer deviceType) { |
| | | if (deviceCode == null) { |
| | | throw new BusinessException("设备编号不能为空"); |
| | | } |
| | | PoleBinding one; |
| | | //直接删除设备不需要灯杆ID |
| | | if (poleId == null) { |
| | | one = getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, deviceCode).eq(PoleBinding::getDeviceType, deviceType)); |
| | | } else { |
| | | one = getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, deviceCode) |
| | | .eq(PoleBinding::getDeviceType, deviceType).eq(PoleBinding::getPoleId, poleId)); |
| | | } |
| | | if (one != null) { |
| | | return removeById(one.getId()); |
| | | } else { |
| | | throw new BusinessException("设备不存在绑定情况或灯杆ID不正确"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 设备删除,直接解绑设备相关绑定数据 |
| | | * |
| | |
| | | public boolean unBindPole(String deviceCode) { |
| | | if (deviceCode == null) { |
| | | throw new BusinessException("设备编号不能为空"); |
| | | } |
| | | if (SecurityUtils.getClientId() != null) { |
| | | //查灯杆归属关系 |
| | | boolean belong = isBelong(deviceCode, null); |
| | | if (!belong) { |
| | | throw new BusinessException("该灯杆不属于您,无法解绑!"); |
| | | } |
| | | } |
| | | //直接删除设备不需要灯杆ID |
| | | PoleBinding one = getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, deviceCode)); |
| | |
| | | } |
| | | |
| | | public PoleBinding getPoleIdByMac(String deviceCode) { |
| | | return getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, deviceCode)); |
| | | return getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, deviceCode).eq(PoleBinding::getDeviceType, 0)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 判断设备归属 |
| | | * |
| | | * @param deviceCode 设备编号 |
| | | * @param type 设备类型 |
| | | * @return 属于该用户返回true,不是返回false |
| | | */ |
| | | public boolean isBelong(String deviceCode, String type) { |
| | | Long userId = SecurityUtils.getClientId(); |
| | | Pole binding = baseMapper.getPoleByBinding(type, deviceCode, userId); |
| | | if (binding != null) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | } |