地图查看功能接口 #110

Merged
p95fco63j merged 1 commits from junmao_branch into develop 3 weeks ago

@ -0,0 +1,53 @@
package com.campus.water.controller;
import com.campus.water.entity.vo.TerminalLocationVO;
import com.campus.water.service.WaterTerminalLocationService;
import com.campus.water.util.ResultVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* -
*/
@RestController
@RequestMapping("/api/student/terminal/location")
@RequiredArgsConstructor
@Tag(name = "学生端-饮水机位置接口", description = "查询校内矿化水终端机位置信息")
public class StudentTerminalLocationController {
private final WaterTerminalLocationService locationService;
/**
*
*/
@GetMapping("/all")
@Operation(summary = "获取所有终端机位置", description = "查询校内所有矿化水终端机的坐标、安装位置、状态")
public ResultVO<List<TerminalLocationVO>> getAllLocations() {
try {
List<TerminalLocationVO> locations = locationService.getAllTerminalLocations();
return ResultVO.success(locations, "获取所有终端机位置成功");
} catch (Exception e) {
return ResultVO.error(500, "获取位置失败:" + e.getMessage());
}
}
/**
*
*/
@GetMapping("/available")
@Operation(summary = "获取可用终端机位置", description = "仅查询状态正常的矿化水终端机位置")
public ResultVO<List<TerminalLocationVO>> getAvailableLocations() {
try {
List<TerminalLocationVO> locations = locationService.getAvailableTerminalLocations();
return ResultVO.success(locations, "获取可用终端机位置成功");
} catch (Exception e) {
return ResultVO.error(500, "获取可用位置失败:" + e.getMessage());
}
}
}

@ -0,0 +1,44 @@
package com.campus.water.entity;
import lombok.Data;
import jakarta.persistence.*;
/**
* device
*
*/
@Data
@Entity
@Table(name = "water_terminal_location")
public class WaterTerminalLocation {
/**
* IDdevicedevice_id
*/
@Id
@Column(name = "terminal_id", length = 50, nullable = false)
private String terminalId;
/**
* devicedevice_name便
*/
@Column(name = "terminal_name", length = 100, nullable = false)
private String terminalName;
/**
* GCJ-02
*/
@Column(name = "longitude", nullable = false, precision = 10, scale = 6)
private Double longitude;
/**
* GCJ-02
*/
@Column(name = "latitude", nullable = false, precision = 10, scale = 6)
private Double latitude;
/**
* devicestatusonlinetrueoffline/faultfalse
*/
@Column(name = "is_available", nullable = false)
private Boolean isAvailable = true;
}

@ -0,0 +1,30 @@
package com.campus.water.entity.vo;
import lombok.Data;
/**
* VO+
*/
@Data
public class TerminalLocationVO {
/** 终端机ID */
private String terminalId;
/** 终端机名称 */
private String terminalName;
/** 经度 */
private Double longitude;
/** 纬度 */
private Double latitude;
/** 是否可用 */
private Boolean isAvailable;
/** 安装位置复用device表的install_location */
private String installLocation;
/** 设备状态online/offline/fault */
private String deviceStatus;
}

@ -0,0 +1,18 @@
package com.campus.water.mapper;
import com.campus.water.entity.WaterTerminalLocation;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 访
*/
@Repository
public interface WaterTerminalLocationRepository extends JpaRepository<WaterTerminalLocation, String> {
/**
*
*/
List<WaterTerminalLocation> findByIsAvailable(Boolean isAvailable);
}

@ -0,0 +1,19 @@
package com.campus.water.service;
import com.campus.water.entity.vo.TerminalLocationVO;
import java.util.List;
/**
* deviceVO
*/
public interface WaterTerminalLocationService {
/**
* device
*/
List<com.campus.water.entity.vo.TerminalLocationVO> getAllTerminalLocations();
/**
*
*/
List<com.campus.water.entity.vo.TerminalLocationVO> getAvailableTerminalLocations();
}

@ -0,0 +1,72 @@
package com.campus.water.service.impl;
import com.campus.water.entity.Device;
import com.campus.water.entity.WaterTerminalLocation;
import com.campus.water.entity.vo.TerminalLocationVO;
import com.campus.water.mapper.DeviceRepository;
import com.campus.water.mapper.WaterTerminalLocationRepository;
import com.campus.water.service.WaterTerminalLocationService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* device
*/
@Service
@RequiredArgsConstructor
public class WaterTerminalLocationServiceImpl implements WaterTerminalLocationService {
private final WaterTerminalLocationRepository locationRepository;
private final DeviceRepository deviceRepository; // 注入设备表Mapper
/**
* device
*/
@Override
public List<TerminalLocationVO> getAllTerminalLocations() {
List<WaterTerminalLocation> locationList = locationRepository.findAll();
return convertToVO(locationList);
}
/**
*
*/
@Override
public List<TerminalLocationVO> getAvailableTerminalLocations() {
List<WaterTerminalLocation> locationList = locationRepository.findByIsAvailable(true);
return convertToVO(locationList);
}
/**
* + VO
*/
private List<TerminalLocationVO> convertToVO(List<WaterTerminalLocation> locationList) {
List<TerminalLocationVO> voList = new ArrayList<>();
for (WaterTerminalLocation location : locationList) {
TerminalLocationVO vo = new TerminalLocationVO();
// 1. 赋值坐标表核心字段
vo.setTerminalId(location.getTerminalId());
vo.setTerminalName(location.getTerminalName());
vo.setLongitude(location.getLongitude());
vo.setLatitude(location.getLatitude());
vo.setIsAvailable(location.getIsAvailable());
// 2. 关联查询device表补充安装位置、设备状态
Optional<Device> deviceOptional = deviceRepository.findById(location.getTerminalId());
if (deviceOptional.isPresent()) {
Device device = deviceOptional.get();
vo.setInstallLocation(device.getInstallLocation()); // 复用install_location
vo.setDeviceStatus(device.getStatus().name());
} else {
vo.setInstallLocation("未配置安装位置");
vo.setDeviceStatus("unknown");
}
voList.add(vo);
}
return voList;
}
}
Loading…
Cancel
Save