|
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.usky.common.core.bean.CommonPage;
|
|
import com.usky.common.core.bean.CommonPage;
|
|
|
|
|
+import com.usky.common.core.exception.BusinessException;
|
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
|
import com.usky.sas.domain.SasMapDevice;
|
|
import com.usky.sas.domain.SasMapDevice;
|
|
|
import com.usky.sas.domain.SasMaps;
|
|
import com.usky.sas.domain.SasMaps;
|
|
@@ -17,6 +18,7 @@ import com.usky.sas.mapper.SasPicMapper;
|
|
|
import com.usky.sas.mapper.SasDeviceMapper;
|
|
import com.usky.sas.mapper.SasDeviceMapper;
|
|
|
import com.usky.sas.common.util.GetIpUtils;
|
|
import com.usky.sas.common.util.GetIpUtils;
|
|
|
import com.usky.sas.service.SasMapService;
|
|
import com.usky.sas.service.SasMapService;
|
|
|
|
|
+import com.usky.sas.service.SasMapDeviceService;
|
|
|
import com.usky.sas.service.SasPicService;
|
|
import com.usky.sas.service.SasPicService;
|
|
|
import com.usky.sas.service.SasPicSourceService;
|
|
import com.usky.sas.service.SasPicSourceService;
|
|
|
import com.usky.sas.service.vo.MapDeviceBindRequest;
|
|
import com.usky.sas.service.vo.MapDeviceBindRequest;
|
|
@@ -35,8 +37,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
-import com.usky.common.core.exception.BusinessException;
|
|
|
|
|
-
|
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
@@ -49,12 +53,16 @@ import java.util.UUID;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@Service
|
|
@Service
|
|
|
|
|
+@Slf4j
|
|
|
public class SasMapServiceImpl extends AbstractCrudService<SasMapsMapper, SasMaps>
|
|
public class SasMapServiceImpl extends AbstractCrudService<SasMapsMapper, SasMaps>
|
|
|
implements SasMapService {
|
|
implements SasMapService {
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private SasMapDeviceMapper mapDeviceMapper;
|
|
private SasMapDeviceMapper mapDeviceMapper;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private SasMapDeviceService mapDeviceService;
|
|
|
|
|
+
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private SasPicMapper sasPicMapper;
|
|
private SasPicMapper sasPicMapper;
|
|
|
|
|
|
|
@@ -236,21 +244,19 @@ public class SasMapServiceImpl extends AbstractCrudService<SasMapsMapper, SasMap
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void saveMapInfo(MapSaveWithDevicesRequest request) {
|
|
public void saveMapInfo(MapSaveWithDevicesRequest request) {
|
|
|
- // 保存或更新地图基础信息
|
|
|
|
|
|
|
+ log.info("请求参数:request={}", request);
|
|
|
|
|
+ // 1. 保存或更新地图基础信息
|
|
|
SasMaps map = null;
|
|
SasMaps map = null;
|
|
|
- if (request.getId() != null && !request.getId().isEmpty()) {
|
|
|
|
|
|
|
+ if (StrUtil.isNotBlank(request.getId())) {
|
|
|
map = this.getById(request.getId());
|
|
map = this.getById(request.getId());
|
|
|
}
|
|
}
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
if (map == null) {
|
|
if (map == null) {
|
|
|
map = new SasMaps();
|
|
map = new SasMaps();
|
|
|
- String id = request.getId() != null && !request.getId().isEmpty()
|
|
|
|
|
- ? request.getId()
|
|
|
|
|
- : UUID.randomUUID().toString();
|
|
|
|
|
|
|
+ String id = StrUtil.isNotBlank(request.getId()) ? request.getId() : IdUtil.fastSimpleUUID();
|
|
|
map.setId(id);
|
|
map.setId(id);
|
|
|
map.setCreateTime(now);
|
|
map.setCreateTime(now);
|
|
|
}
|
|
}
|
|
|
- // 复用 applyMap 逻辑
|
|
|
|
|
MapSaveRequest saveReq = new MapSaveRequest();
|
|
MapSaveRequest saveReq = new MapSaveRequest();
|
|
|
saveReq.setName(request.getName());
|
|
saveReq.setName(request.getName());
|
|
|
saveReq.setType(request.getType());
|
|
saveReq.setType(request.getType());
|
|
@@ -265,79 +271,60 @@ public class SasMapServiceImpl extends AbstractCrudService<SasMapsMapper, SasMap
|
|
|
this.saveOrUpdate(map);
|
|
this.saveOrUpdate(map);
|
|
|
|
|
|
|
|
String mapId = map.getId();
|
|
String mapId = map.getId();
|
|
|
|
|
+ List<MapSaveWithDevicesRequest.MapDeviceItem> deviceItems = request.getDevices();
|
|
|
|
|
|
|
|
- // 处理地图下设备点位:删除已不存在的,新增或更新现有的
|
|
|
|
|
|
|
+ // 2. 查询该地图下已有设备点位,删除“数据库有而本次请求没有”的
|
|
|
LambdaQueryWrapper<SasMapDevice> query = new LambdaQueryWrapper<>();
|
|
LambdaQueryWrapper<SasMapDevice> query = new LambdaQueryWrapper<>();
|
|
|
query.eq(SasMapDevice::getMapId, mapId);
|
|
query.eq(SasMapDevice::getMapId, mapId);
|
|
|
- List<SasMapDevice> dbDevices = mapDeviceMapper.selectList(query);
|
|
|
|
|
-
|
|
|
|
|
- Set<String> dbIds = new HashSet<>();
|
|
|
|
|
- if (dbDevices != null) {
|
|
|
|
|
- for (SasMapDevice d : dbDevices) {
|
|
|
|
|
- if (d.getId() != null) {
|
|
|
|
|
- dbIds.add(d.getId());
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ List<SasMapDevice> dbList = mapDeviceService.list(query);
|
|
|
|
|
+ if (CollUtil.isNotEmpty(dbList)) {
|
|
|
|
|
+ Set<String> dbIds = dbList.stream().map(SasMapDevice::getId).collect(Collectors.toSet());
|
|
|
|
|
+ Set<String> newIds = deviceItems == null ? Collections.emptySet()
|
|
|
|
|
+ : deviceItems.stream()
|
|
|
|
|
+ .map(MapSaveWithDevicesRequest.MapDeviceItem::getId)
|
|
|
|
|
+ .filter(StrUtil::isNotBlank)
|
|
|
|
|
+ .collect(Collectors.toSet());
|
|
|
|
|
+ dbIds.removeAll(newIds);
|
|
|
|
|
+ if (CollUtil.isNotEmpty(dbIds)) {
|
|
|
|
|
+ mapDeviceService.removeByIds(dbIds);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- Set<String> newIds = new HashSet<>();
|
|
|
|
|
- if (request.getDevices() != null) {
|
|
|
|
|
- request.getDevices().stream()
|
|
|
|
|
- .map(MapSaveWithDevicesRequest.MapDeviceItem::getId)
|
|
|
|
|
- .filter(id -> id != null && !id.isEmpty())
|
|
|
|
|
- .forEach(newIds::add);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 需要删除的设备ID = 数据库已有 - 新请求中的
|
|
|
|
|
- dbIds.removeAll(newIds);
|
|
|
|
|
- if (!dbIds.isEmpty()) {
|
|
|
|
|
- mapDeviceMapper.deleteBatchIds(dbIds);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 新增或更新设备点位
|
|
|
|
|
- if (request.getDevices() != null && !request.getDevices().isEmpty()) {
|
|
|
|
|
- for (MapSaveWithDevicesRequest.MapDeviceItem item : request.getDevices()) {
|
|
|
|
|
- SasMapDevice entity;
|
|
|
|
|
- boolean exists = item.getId() != null && !item.getId().isEmpty();
|
|
|
|
|
- if (exists) {
|
|
|
|
|
- entity = mapDeviceMapper.selectById(item.getId());
|
|
|
|
|
- if (entity == null) {
|
|
|
|
|
- entity = new SasMapDevice();
|
|
|
|
|
- entity.setId(item.getId());
|
|
|
|
|
- entity.setCreateTime(now);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- entity = new SasMapDevice();
|
|
|
|
|
- entity.setId(UUID.randomUUID().toString());
|
|
|
|
|
- entity.setCreateTime(now);
|
|
|
|
|
|
|
+ // 3. 新增或更新设备点位:id 为空则生成 UUID,统一设置 mapId 后批量保存
|
|
|
|
|
+ if (CollUtil.isNotEmpty(deviceItems)) {
|
|
|
|
|
+ List<SasMapDevice> entities = deviceItems.stream()
|
|
|
|
|
+ .map(item -> toMapDeviceEntity(item, mapId, now))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ entities.forEach(entity -> {
|
|
|
|
|
+ if (StrUtil.isBlank(entity.getId())) {
|
|
|
|
|
+ entity.setId(IdUtil.fastSimpleUUID());
|
|
|
}
|
|
}
|
|
|
entity.setMapId(mapId);
|
|
entity.setMapId(mapId);
|
|
|
- entity.setDeviceId(item.getDeviceId());
|
|
|
|
|
- entity.setImgId(item.getImgId());
|
|
|
|
|
- entity.setType(item.getType());
|
|
|
|
|
- if (item.getX() != null) {
|
|
|
|
|
- entity.setX(BigDecimal.valueOf(item.getX()));
|
|
|
|
|
- } else {
|
|
|
|
|
- entity.setX(null);
|
|
|
|
|
- }
|
|
|
|
|
- if (item.getY() != null) {
|
|
|
|
|
- entity.setY(BigDecimal.valueOf(item.getY()));
|
|
|
|
|
- } else {
|
|
|
|
|
- entity.setY(null);
|
|
|
|
|
- }
|
|
|
|
|
- entity.setWidth(item.getWidth());
|
|
|
|
|
- entity.setHeight(item.getHeight());
|
|
|
|
|
- entity.setAngle(item.getAngle());
|
|
|
|
|
- entity.setText(item.getText());
|
|
|
|
|
entity.setUpdateTime(now);
|
|
entity.setUpdateTime(now);
|
|
|
|
|
+ });
|
|
|
|
|
+ mapDeviceService.saveOrUpdateBatch(entities);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if (exists && mapDeviceMapper.selectById(entity.getId()) != null) {
|
|
|
|
|
- mapDeviceMapper.updateById(entity);
|
|
|
|
|
- } else {
|
|
|
|
|
- mapDeviceMapper.insert(entity);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ /** 将请求中的设备点位项转为实体(id 可为空,由 saveMapInfo 统一补全) */
|
|
|
|
|
+ private SasMapDevice toMapDeviceEntity(MapSaveWithDevicesRequest.MapDeviceItem item, String mapId, LocalDateTime now) {
|
|
|
|
|
+ SasMapDevice entity = new SasMapDevice();
|
|
|
|
|
+ if (StrUtil.isNotBlank(item.getId())) {
|
|
|
|
|
+ entity.setId(item.getId());
|
|
|
}
|
|
}
|
|
|
|
|
+ entity.setMapId(mapId);
|
|
|
|
|
+ entity.setDeviceId(item.getDeviceId());
|
|
|
|
|
+ entity.setImgId(item.getImgId());
|
|
|
|
|
+ entity.setType(item.getType());
|
|
|
|
|
+ entity.setX(item.getX() != null ? BigDecimal.valueOf(item.getX()) : null);
|
|
|
|
|
+ entity.setY(item.getY() != null ? BigDecimal.valueOf(item.getY()) : null);
|
|
|
|
|
+ entity.setWidth(item.getWidth());
|
|
|
|
|
+ entity.setHeight(item.getHeight());
|
|
|
|
|
+ entity.setAngle(item.getAngle());
|
|
|
|
|
+ entity.setText(item.getText());
|
|
|
|
|
+ entity.setCreateTime(now);
|
|
|
|
|
+ entity.setUpdateTime(now);
|
|
|
|
|
+ return entity;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|