package com.kym.service.impl;
import com.kym.common.exception.BusinessException;
import com.kym.common.utils.CommUtil;
import com.kym.entity.DeviceRelation;
import com.kym.mapper.DeviceRelationMapper;
import com.kym.service.DeviceRelationService;
import com.kym.service.cache.KymCache;
import com.kym.service.mybatisplus.MyBaseServiceImpl;
import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
/**
*
* 服务实现类
*
*
* @author skyline
* @since 2024-11-11
*/
@Service
public class DeviceRelationServiceImpl extends MyBaseServiceImpl implements DeviceRelationService {
@PostConstruct
private void init() {
list().forEach(item -> {
// 初始化短编号和设备信息的关联
KymCache.INSTANCE.putWashShortId2ProductKeyAndDeviceName(Map.of(item.getShortId(), item.getProductKey() + "," + item.getDeviceName()));
// shortId和stationId的对应关系
KymCache.INSTANCE.putShortId2StationId(Map.of(item.getShortId(), item.getStationId()));
});
}
@Override
@Transactional(rollbackFor = Exception.class)
public void add(DeviceRelation deviceRelation) {
CommUtil.asserts(CommUtil.isNotEmptyAndNull(deviceRelation.getShortId()), "短编号不能为空");
CommUtil.asserts(CommUtil.isNotEmptyAndNull(deviceRelation.getProductKey()), "产品key不能为空");
CommUtil.asserts(CommUtil.isNotEmptyAndNull(deviceRelation.getDeviceName()), "设备名称不能为空");
CommUtil.asserts(CommUtil.isNotEmptyAndNull(deviceRelation.getStationId()), "站点id不能为空");
Long count = lambdaQuery()
.eq(DeviceRelation::getShortId, deviceRelation.getShortId())
.count();
CommUtil.asserts(count == 0, "该短编号已存在");
count = lambdaQuery()
.eq(DeviceRelation::getProductKey, deviceRelation.getProductKey())
.eq(DeviceRelation::getDeviceName, deviceRelation.getDeviceName())
.count();
CommUtil.asserts(count == 0, "该设备已绑定短编号");
save(deviceRelation);
// 同步到缓存
KymCache.INSTANCE.putWashShortId2ProductKeyAndDeviceName(Map.of(deviceRelation.getShortId(), deviceRelation.getProductKey() + "," + deviceRelation.getDeviceName()));
KymCache.INSTANCE.putShortId2StationId(Map.of(deviceRelation.getShortId(), deviceRelation.getStationId()));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void removeByDevice(String productKey, String deviceName) {
var relation = lambdaQuery()
.eq(DeviceRelation::getProductKey, productKey)
.eq(DeviceRelation::getDeviceName, deviceName)
.one();
if (relation != null) {
removeById(relation.getId());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void removeById(Long id) {
var relation = getById(id);
if (relation == null) {
throw new BusinessException("设备关系不存在");
}
super.removeById(id);
KymCache.INSTANCE.removeWashShortIdMapping(relation.getShortId());
KymCache.INSTANCE.removeShortId2StationId(relation.getShortId());
}
@Override
public List listByStationId(String stationId) {
return lambdaQuery()
.eq(DeviceRelation::getStationId, stationId)
.orderByAsc(DeviceRelation::getShortId)
.list();
}
}