package com.sandu.ximon.admin.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.param.PoleBindingParam;
|
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 java.util.List;
|
|
/**
|
* @author chenjiantian
|
* @date 2021/12/14 11:48
|
*/
|
@Service
|
@AllArgsConstructor
|
public class PoleBindingService extends BaseServiceImpl<PoleBindingMapper, PoleBinding> {
|
|
private final LightReportDataService lightReportDataService;
|
|
/**
|
* 灯杆绑定设备
|
*
|
* @param poleId
|
* @param param
|
* @return
|
*/
|
public boolean bindPole(Long poleId, PoleBindingParam param) {
|
Integer deviceType = param.getDeviceType();
|
// if (PoleBindingEnums.LIGHT.getCode().equals(deviceType)) {
|
// }
|
|
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:
|
size = SpringContextHolder.getBean(AirEquipmentService.class).list(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, param.getDeviceCode())).size();
|
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 size1 = SpringContextHolder.getBean(InterphoneHostService.class).list(Wrappers.lambdaQuery(InterphoneHost.class).eq(InterphoneHost::getHostMac, param.getDeviceCode())).size();
|
int size2 = SpringContextHolder.getBean(InterphoneSubService.class).list(Wrappers.lambdaQuery(InterphoneSub.class).eq(InterphoneSub::getSubMac, param.getDeviceCode())).size();
|
//一键求助两类硬件
|
if (size1 > 0 || size2 > 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;
|
default:
|
break;
|
}
|
if (size == 0) {
|
throw new BusinessException("设备码不正确,硬件不存在");
|
}
|
|
|
LambdaQueryWrapper<PoleBinding> eq = Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getPoleId, poleId);
|
List<PoleBinding> list = list(eq);
|
if (list.size() != 0) {
|
for (PoleBinding poleBinding : list) {
|
//充电桩的绑定是网络请求是带过来的灯杆信息,要允许直接修改
|
if (poleBinding.getDeviceType().equals(deviceType) && deviceType != 2) {
|
throw new BusinessException("该灯杆已绑定过相同类型设备");
|
}
|
}
|
}
|
|
PoleBinding one = getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, param.getDeviceCode()));
|
if (one == null) {
|
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);
|
}
|
}
|
|
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) {
|
if (deviceCode == null) {
|
throw new BusinessException("设备编号不能为空");
|
}
|
PoleBinding one;
|
//直接删除设备不需要灯杆ID
|
if (poleId == null) {
|
one = getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, deviceCode));
|
} else {
|
one = getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, deviceCode).eq(PoleBinding::getPoleId, poleId));
|
}
|
if (one != null) {
|
return removeById(one.getId());
|
} else {
|
throw new BusinessException("设备不存在绑定情况或灯杆ID不正确");
|
}
|
}
|
|
/**
|
* 设备删除,直接解绑设备相关绑定数据
|
*
|
* @param deviceCode
|
*/
|
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));
|
|
if (one != null) {
|
return removeById(one.getId());
|
} else {
|
return false;
|
}
|
}
|
|
public PoleBinding getPoleIdByMac(String deviceCode) {
|
return getOne(Wrappers.lambdaQuery(PoleBinding.class).eq(PoleBinding::getDeviceCode, deviceCode));
|
}
|
|
|
/**
|
* 判断设备归属
|
*
|
* @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;
|
}
|
}
|
}
|