수정중
This commit is contained in:
parent
efff31605b
commit
e116aa6d06
|
@ -1,7 +1,168 @@
|
||||||
package inc.sdt.controlcentermanagement.application;
|
package inc.sdt.controlcentermanagement.application;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import inc.sdt.controlcentermanagement.domain.DataResource;
|
||||||
|
import inc.sdt.controlcentermanagement.domain.Slot;
|
||||||
|
import inc.sdt.controlcentermanagement.infrastructure.resttemplate.RestTemplateRequestHandler;
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.StatsCntRecord;
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.StatsDetailRecord;
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.StatsRecord;
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.support.CustomPage;
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.support.CustomPageable;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageImpl;
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class DefaultStatsService implements StatsService{
|
public class DefaultStatsService implements StatsService{
|
||||||
|
|
||||||
|
private final SlotRepositoryDelegate slotRepositoryDelegate;
|
||||||
|
private final RestTemplateRequestHandler restTemplateHandler;
|
||||||
|
private final String dataFallEndPoint;
|
||||||
|
private final Logger log = LoggerFactory.getLogger(DefaultStatsService.class);
|
||||||
|
|
||||||
|
public DefaultStatsService(SlotRepositoryDelegate slotRepositoryDelegate, RestTemplateRequestHandler restTemplateHandler, @Value("${data-fall.endpoint}") String dataFallEndPoint) {
|
||||||
|
this.slotRepositoryDelegate = slotRepositoryDelegate;
|
||||||
|
this.restTemplateHandler = restTemplateHandler;
|
||||||
|
this.dataFallEndPoint = dataFallEndPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<StatsRecord> getChamberStats() {
|
||||||
|
List<Slot> all= slotRepositoryDelegate.getAll();
|
||||||
|
|
||||||
|
Map<String, List<Slot>> groupByChamber = all.stream().collect(Collectors.groupingBy(Slot::getChamberNumber));
|
||||||
|
|
||||||
|
List<StatsRecord> results = new LinkedList<>();
|
||||||
|
|
||||||
|
groupByChamber.forEach((chamberNumber, slotList) -> {
|
||||||
|
AtomicReference<Integer> onTotalCnt = new AtomicReference<>(0);
|
||||||
|
AtomicReference<Integer> offTotalCnt = new AtomicReference<>(0);
|
||||||
|
AtomicReference<Integer> errTotalCnt = new AtomicReference<>(0);
|
||||||
|
AtomicReference<Integer> onCnt = new AtomicReference<>(0);
|
||||||
|
AtomicReference<Integer> offCnt = new AtomicReference<>(0);
|
||||||
|
AtomicReference<Integer> err2Cnt = new AtomicReference<>(0);
|
||||||
|
|
||||||
|
for(Slot slot : slotList){
|
||||||
|
String url = UriComponentsBuilder.fromUriString(dataFallEndPoint)
|
||||||
|
.path(String.format("/assets/%s/tags/%s/data/latest", slot.getAssetCode(), slot.getSlotNumber()))
|
||||||
|
.build()
|
||||||
|
.toUriString();
|
||||||
|
Optional<CustomPage<DataResource>> optional = restTemplateHandler.httpGetRequestWithAuth(url, "bearer authkey", "", new TypeReference<>() {
|
||||||
|
});
|
||||||
|
log.info("optional = {}",optional);
|
||||||
|
if(optional.isPresent()){
|
||||||
|
List<DataResource> content = optional.get().getContent();
|
||||||
|
for(DataResource dataResource : content){
|
||||||
|
dataResource.getData().forEach((key, value)->{
|
||||||
|
if(key.contains("er2")){
|
||||||
|
errTotalCnt.updateAndGet(v -> v + 1);
|
||||||
|
if((int)value > 0){
|
||||||
|
err2Cnt.updateAndGet(v -> v + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(key.contains("do")){
|
||||||
|
onTotalCnt.updateAndGet(v -> v + 1);
|
||||||
|
offTotalCnt.updateAndGet(v -> v + 1);
|
||||||
|
if((int)value > 0){
|
||||||
|
onCnt.updateAndGet(v -> v + 1);
|
||||||
|
}else{
|
||||||
|
offCnt.updateAndGet(v -> v + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
StatsCntRecord onCntRecord = new StatsCntRecord(onCnt.get(), onTotalCnt.get());
|
||||||
|
StatsCntRecord offCntRecord = new StatsCntRecord(offCnt.get(), offTotalCnt.get());
|
||||||
|
StatsCntRecord errCntRecord = new StatsCntRecord(err2Cnt.get(), errTotalCnt.get());
|
||||||
|
StatsRecord statsRecord = new StatsRecord(chamberNumber, onCntRecord, offCntRecord, errCntRecord);
|
||||||
|
results.add(statsRecord);
|
||||||
|
});
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<StatsDetailRecord> getChamberStatsDetail(int page, int size, String chamberNumber) {
|
||||||
|
List<Slot> all= slotRepositoryDelegate.getAll().stream().filter(slot -> slot.getChamberNumber().equals(chamberNumber)).toList();
|
||||||
|
Pageable pageable = PageRequest.of(page, size);
|
||||||
|
|
||||||
|
List<StatsDetailRecord> statsDetailRecords = new LinkedList<>();
|
||||||
|
all.forEach((slot -> {
|
||||||
|
String url = UriComponentsBuilder.fromUriString(dataFallEndPoint)
|
||||||
|
.path(String.format("/assets/%s/tags/%s/data/latest", slot.getAssetCode(), slot.getSlotNumber()))
|
||||||
|
.build()
|
||||||
|
.toUriString();
|
||||||
|
Optional<CustomPage<DataResource>> optional = restTemplateHandler.httpGetRequestWithAuth(url, "bearer authkey", "", new TypeReference<>() {
|
||||||
|
});
|
||||||
|
//Tube{code='2', voltageOffset=1.0, ampereOffset=1.0}
|
||||||
|
|
||||||
|
Map<String, Object> currentMap = new HashMap<>();
|
||||||
|
Map<String, Object> voltageMap = new HashMap<>();
|
||||||
|
Map<String, Object> doMap = new HashMap<>();
|
||||||
|
Map<String, Object> er1Map = new HashMap<>();
|
||||||
|
Map<String, Object> er2Map = new HashMap<>();
|
||||||
|
|
||||||
|
if(optional.isPresent()){
|
||||||
|
List<DataResource> content = optional.get().getContent();
|
||||||
|
for(DataResource dataResource : content){
|
||||||
|
dataResource.getData().forEach((key, value)->{
|
||||||
|
if(key.startsWith("current")){
|
||||||
|
currentMap.put(key.replace("current",""), value);
|
||||||
|
}else if(key.startsWith("voltage")){
|
||||||
|
voltageMap.put(key.replace("voltage",""), value);
|
||||||
|
}else if(key.startsWith("do")){
|
||||||
|
doMap.put(key.replace("do",""), value);
|
||||||
|
}else if(key.startsWith("er1")){
|
||||||
|
er1Map.put(key.replace("er1",""), value);
|
||||||
|
}else if(key.startsWith("er2")){
|
||||||
|
er2Map.put(key.replace("er2",""), value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=0 ; i < 16 ; i++){
|
||||||
|
StatsDetailRecord statsDetailRecord = new StatsDetailRecord(
|
||||||
|
slot.getSlotNumber(),
|
||||||
|
String.valueOf(i),
|
||||||
|
"status",
|
||||||
|
String.valueOf(voltageMap.get(String.valueOf(i))),
|
||||||
|
String.valueOf(currentMap.get(String.valueOf(i))),
|
||||||
|
String.valueOf(doMap.get(String.valueOf(i))),
|
||||||
|
String.valueOf(er1Map.get(String.valueOf(i))),
|
||||||
|
String.valueOf(er2Map.get(String.valueOf(i))),
|
||||||
|
"passTime",
|
||||||
|
"retentionRate",
|
||||||
|
String.valueOf(slot.getTube().get(i).getVoltageOffset()),
|
||||||
|
String.valueOf(slot.getTube().get(i).getAmpereOffset())
|
||||||
|
);
|
||||||
|
statsDetailRecords.add(statsDetailRecord);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
statsDetailRecords.sort(new StatsDetailSlotNumberComparator());
|
||||||
|
|
||||||
|
int start = (int) pageable.getOffset();
|
||||||
|
int end = Math.min((start + pageable.getPageSize()), statsDetailRecords.size());
|
||||||
|
|
||||||
|
List<StatsDetailRecord> pageContent = statsDetailRecords.subList(start, end);
|
||||||
|
|
||||||
|
Page<StatsDetailRecord> entities = new PageImpl<>(pageContent, pageable, statsDetailRecords.size());
|
||||||
|
|
||||||
|
return entities;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,4 +9,6 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public interface SlotRepositoryDelegate {
|
public interface SlotRepositoryDelegate {
|
||||||
List<Slot> get(String chamberNumber);
|
List<Slot> get(String chamberNumber);
|
||||||
|
|
||||||
|
List<Slot> getAll();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package inc.sdt.controlcentermanagement.application;
|
||||||
|
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.StatsDetailRecord;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
public class StatsDetailSlotNumberComparator implements Comparator<StatsDetailRecord> {
|
||||||
|
@Override
|
||||||
|
public int compare(StatsDetailRecord o1, StatsDetailRecord o2) {
|
||||||
|
if(Integer.parseInt(o1.getSlotNumber()) > Integer.parseInt(o2.getSlotNumber())){
|
||||||
|
return 1;
|
||||||
|
}else if(Integer.parseInt(o1.getSlotNumber()) < Integer.parseInt(o2.getSlotNumber())){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package inc.sdt.controlcentermanagement.application;
|
||||||
|
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.StatsDetailRecord;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
public class StatsDetailTubeIdComparator implements Comparator<StatsDetailRecord> {
|
||||||
|
@Override
|
||||||
|
public int compare(StatsDetailRecord o1, StatsDetailRecord o2) {
|
||||||
|
if(Integer.parseInt(o1.getTubeId()) > Integer.parseInt(o2.getTubeId())){
|
||||||
|
return 1;
|
||||||
|
}else if(Integer.parseInt(o1.getTubeId()) < Integer.parseInt(o2.getTubeId())){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,13 @@
|
||||||
package inc.sdt.controlcentermanagement.application;
|
package inc.sdt.controlcentermanagement.application;
|
||||||
|
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.StatsDetailRecord;
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.StatsRecord;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface StatsService {
|
public interface StatsService {
|
||||||
|
List<StatsRecord> getChamberStats();
|
||||||
|
|
||||||
|
Page<StatsDetailRecord> getChamberStatsDetail(int page, int size, String chamberNumber);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
package inc.sdt.controlcentermanagement.domain;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author eunsan.goh (esgoh@sdt.inc)
|
||||||
|
**/
|
||||||
|
public class DataResource {
|
||||||
|
|
||||||
|
private String assetCode;
|
||||||
|
private String modelCode;
|
||||||
|
private Long timestamp;
|
||||||
|
private Map<String, Object> data;
|
||||||
|
private DataType dataType;
|
||||||
|
|
||||||
|
public DataResource() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "DataResource{" +
|
||||||
|
"assetCode='" + assetCode + '\'' +
|
||||||
|
", modelCode='" + modelCode + '\'' +
|
||||||
|
", timestamp=" + timestamp +
|
||||||
|
", data.size=" + data.size() +
|
||||||
|
", dataType=" + dataType +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAssetCode() {
|
||||||
|
return assetCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getModelCode() {
|
||||||
|
return modelCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getTimestamp() {
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataType getDataType() {
|
||||||
|
return dataType;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
package inc.sdt.controlcentermanagement.domain;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author eunsan.goh (esgoh@sdt.inc)
|
||||||
|
**/
|
||||||
|
public enum DataType {
|
||||||
|
STATE,
|
||||||
|
DATA
|
||||||
|
}
|
|
@ -51,6 +51,6 @@ class RegisterResourceProducer implements Consumer<ResourceMessagePayload> {
|
||||||
public void accept(ResourceMessagePayload payload) {
|
public void accept(ResourceMessagePayload payload) {
|
||||||
log.info("[accept] payload={}", payload);
|
log.info("[accept] payload={}", payload);
|
||||||
Message message = messageConverter.toMessage(payload, messageProperties);
|
Message message = messageConverter.toMessage(payload, messageProperties);
|
||||||
rabbitTemplate.send(exchange, routingKey, message);
|
// rabbitTemplate.send(exchange, routingKey, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,15 @@ public class SlotNoSQLRepository implements SlotRepositoryDelegate {
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Slot> getAll() {
|
||||||
|
log.debug("[getAll]");
|
||||||
|
return slotRepository.findAllByOrderByChamberNumberAscSlotNumberAsc()
|
||||||
|
.stream()
|
||||||
|
.map(this::to)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
private Slot to(SlotDocument slotDocument) {
|
private Slot to(SlotDocument slotDocument) {
|
||||||
return Slot.builder()
|
return Slot.builder()
|
||||||
.id(slotDocument.getId())
|
.id(slotDocument.getId())
|
||||||
|
|
|
@ -9,4 +9,5 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public interface SlotRepository extends MongoRepository<SlotDocument, String> {
|
public interface SlotRepository extends MongoRepository<SlotDocument, String> {
|
||||||
List<SlotDocument> findAllByChamberNumber(String chamberNumber);
|
List<SlotDocument> findAllByChamberNumber(String chamberNumber);
|
||||||
|
List<SlotDocument> findAllByOrderByChamberNumberAscSlotNumberAsc();
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,4 +6,5 @@ import java.util.Optional;
|
||||||
|
|
||||||
public interface RestTemplateHandler {
|
public interface RestTemplateHandler {
|
||||||
<T> Optional<T> httpPostRequestWithAuth(String url, String authorization, Object body, TypeReference<T> typeReference);
|
<T> Optional<T> httpPostRequestWithAuth(String url, String authorization, Object body, TypeReference<T> typeReference);
|
||||||
|
<T> Optional<T> httpGetRequestWithAuth(String url, String authorization, Object body, TypeReference<T> typeReference);
|
||||||
}
|
}
|
|
@ -30,4 +30,15 @@ public class RestTemplateRequestHandler implements RestTemplateHandler {
|
||||||
ResponseEntity<T> response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(body, headers), parameterizedType);
|
ResponseEntity<T> response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(body, headers), parameterizedType);
|
||||||
return Optional.ofNullable(response.getBody());
|
return Optional.ofNullable(response.getBody());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> Optional<T> httpGetRequestWithAuth(String url, String authorization, Object body, TypeReference<T> typeReference) {
|
||||||
|
log.info("[httpGetRequestWithAuth] url = {}", url);
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||||
|
headers.setBearerAuth(authorization.split(" ")[1]);
|
||||||
|
ParameterizedTypeReference<T> parameterizedType = ParameterizedTypeReference.forType(typeReference.getType());
|
||||||
|
ResponseEntity<T> response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(body, headers), parameterizedType);
|
||||||
|
return Optional.ofNullable(response.getBody());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
package inc.sdt.controlcentermanagement.presentation;
|
||||||
|
|
||||||
|
public class StatsCntRecord {
|
||||||
|
private Integer correctCount;
|
||||||
|
private Integer totalCount;
|
||||||
|
|
||||||
|
public StatsCntRecord(Integer correctCount, Integer totalCount) {
|
||||||
|
this.correctCount = correctCount;
|
||||||
|
this.totalCount = totalCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCorrectCount() {
|
||||||
|
return correctCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getTotalCount() {
|
||||||
|
return totalCount;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,16 @@
|
||||||
package inc.sdt.controlcentermanagement.presentation;
|
package inc.sdt.controlcentermanagement.presentation;
|
||||||
|
|
||||||
import inc.sdt.controlcentermanagement.application.StatsService;
|
import inc.sdt.controlcentermanagement.application.StatsService;
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.support.CustomPageable;
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.support.CustomPageableImpl;
|
||||||
|
import inc.sdt.controlcentermanagement.presentation.support.PageableResponse;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import java.util.List;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
public class StatsController {
|
public class StatsController {
|
||||||
|
@ -20,24 +24,36 @@ public class StatsController {
|
||||||
|
|
||||||
|
|
||||||
@ResponseStatus(HttpStatus.OK)
|
@ResponseStatus(HttpStatus.OK)
|
||||||
@GetMapping("/chambers")
|
@GetMapping("/chamber/stats")
|
||||||
public String chambers(
|
public StatsResult chambers(
|
||||||
// @RequestHeader("Authorization") String authorization
|
// @RequestHeader("Authorization") String authorization
|
||||||
){
|
){
|
||||||
log.info("[chambers]");
|
log.info("[chambers stats]");
|
||||||
|
|
||||||
|
List<StatsRecord> chamberStats = statsService.getChamberStats();
|
||||||
|
|
||||||
|
return new StatsResult(chamberStats);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ResponseStatus(HttpStatus.OK)
|
||||||
|
@GetMapping("/chamber/stats/{chamberNumber}")
|
||||||
|
public PageableResponse<StatsDetailRecord> detail(
|
||||||
|
// @RequestHeader("Authorization") String authorization
|
||||||
|
@PathVariable String chamberNumber,
|
||||||
|
@RequestParam(value = "page", required = false, defaultValue = "0") Integer page,
|
||||||
|
@RequestParam(value = "size", required = false, defaultValue = "20") Integer size
|
||||||
|
){
|
||||||
|
log.info("[chambers stats]");
|
||||||
|
Page<StatsDetailRecord> chamberStatsDetail = statsService.getChamberStatsDetail(Integer.max(0, page), (page >= 0 ? size : Integer.MAX_VALUE), chamberNumber);
|
||||||
|
|
||||||
|
if(chamberStatsDetail.hasContent()){
|
||||||
|
return PageableResponse.from(chamberStatsDetail, this::from);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 챔버 갯수 및 번호 주는 api
|
private StatsDetailRecord from(StatsDetailRecord statsDetailRecord){
|
||||||
// 이건 전체 화면 챔버 번호 들어오면 그 챔버에 있는 노드큐 및 슬롯으로 수경님 api 호출해서 합산하기
|
return statsDetailRecord;
|
||||||
// 상세에서는 번호는 슬롯번호 mes code는 튜번호로 해서 쭉 보여주기
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//@ResourceMapping(name = "Tube_Control", method = "PATCH", uri = "/chamber/{chamberNumber}/tube/toggle", description = "Tube On/Off 제어")
|
|
||||||
// @ResponseStatus(HttpStatus.OK)
|
|
||||||
// @PatchMapping("/chamber/{chamberNumber}/tube/toggle")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
package inc.sdt.controlcentermanagement.presentation;
|
||||||
|
|
||||||
|
public class StatsDetailRecord {
|
||||||
|
private String slotNumber;
|
||||||
|
private String tubeId;
|
||||||
|
private String status;
|
||||||
|
private String voltage;
|
||||||
|
private String current;
|
||||||
|
private String pin;
|
||||||
|
private String err1;
|
||||||
|
private String err2;
|
||||||
|
private String passTime;
|
||||||
|
private String retentionRate;
|
||||||
|
private String voltageOffset;
|
||||||
|
private String currentOffset;
|
||||||
|
|
||||||
|
public StatsDetailRecord(String slotNumber, String tubeId, String status, String voltage, String current, String pin, String err1, String err2, String passTime, String retentionRate, String voltageOffset, String currentOffset) {
|
||||||
|
this.slotNumber = slotNumber;
|
||||||
|
this.tubeId = tubeId;
|
||||||
|
this.status = status;
|
||||||
|
this.voltage = voltage;
|
||||||
|
this.current = current;
|
||||||
|
this.pin = pin;
|
||||||
|
this.err1 = err1;
|
||||||
|
this.err2 = err2;
|
||||||
|
this.passTime = passTime;
|
||||||
|
this.retentionRate = retentionRate;
|
||||||
|
this.voltageOffset = voltageOffset;
|
||||||
|
this.currentOffset = currentOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getVoltageOffset() {
|
||||||
|
return voltageOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentOffset() {
|
||||||
|
return currentOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSlotNumber() {
|
||||||
|
return slotNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTubeId() {
|
||||||
|
return tubeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getVoltage() {
|
||||||
|
return voltage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrent() {
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPin() {
|
||||||
|
return pin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getErr1() {
|
||||||
|
return err1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getErr2() {
|
||||||
|
return err2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassTime() {
|
||||||
|
return passTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRetentionRate() {
|
||||||
|
return retentionRate;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package inc.sdt.controlcentermanagement.presentation;
|
||||||
|
|
||||||
|
public class StatsRecord {
|
||||||
|
private String chamberNumber;
|
||||||
|
private StatsCntRecord onCnt;
|
||||||
|
private StatsCntRecord offCnt;
|
||||||
|
private StatsCntRecord errCnt;
|
||||||
|
|
||||||
|
public StatsRecord(String chamberNumber, StatsCntRecord onCnt, StatsCntRecord offCnt, StatsCntRecord errCnt) {
|
||||||
|
this.chamberNumber = chamberNumber;
|
||||||
|
this.onCnt = onCnt;
|
||||||
|
this.offCnt = offCnt;
|
||||||
|
this.errCnt = errCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getChamberNumber() {
|
||||||
|
return chamberNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StatsCntRecord getOnCnt() {
|
||||||
|
return onCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StatsCntRecord getOffCnt() {
|
||||||
|
return offCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StatsCntRecord getErrCnt() {
|
||||||
|
return errCnt;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package inc.sdt.controlcentermanagement.presentation;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class StatsResult {
|
||||||
|
private List<StatsRecord> contents;
|
||||||
|
|
||||||
|
public StatsResult(List<StatsRecord> contents) {
|
||||||
|
this.contents = contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<StatsRecord> getContents() {
|
||||||
|
return contents;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package inc.sdt.controlcentermanagement.presentation.support;
|
||||||
|
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author eunsan.goh (esgoh@sdt.inc)
|
||||||
|
**/
|
||||||
|
public class CustomPage<T> {
|
||||||
|
private List<T> content;
|
||||||
|
private CustomPageableImpl pageable;
|
||||||
|
|
||||||
|
public CustomPage(List<T> content, CustomPageableImpl pageable) {
|
||||||
|
this.content = content;
|
||||||
|
this.pageable = pageable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomPage() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<T> getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomPageableImpl getPageable() {
|
||||||
|
return pageable;
|
||||||
|
}
|
||||||
|
|
||||||
|
// public <U> CustomPage<U> map(Function<? super T, ? extends U> converter) {
|
||||||
|
// return new CustomPage<>(getConvertedContent(converter), getPageable());
|
||||||
|
// }
|
||||||
|
|
||||||
|
private <U> List<U> getConvertedContent(Function<? super T, ? extends U> converter) {
|
||||||
|
|
||||||
|
Assert.notNull(converter, "Function must not be null");
|
||||||
|
|
||||||
|
return content.stream().map(converter).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package inc.sdt.controlcentermanagement.presentation.support;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author eunsan.goh (esgoh@sdt.inc)
|
||||||
|
**/
|
||||||
|
public interface CustomPageable {
|
||||||
|
long getTotalElements();
|
||||||
|
|
||||||
|
int getTotalPages();
|
||||||
|
|
||||||
|
int getSize();
|
||||||
|
|
||||||
|
int getPage();
|
||||||
|
|
||||||
|
int offset();
|
||||||
|
|
||||||
|
String sortDirection();
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
package inc.sdt.controlcentermanagement.presentation.support;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author eunsan.goh (esgoh@sdt.inc)
|
||||||
|
**/
|
||||||
|
public class CustomPageableImpl implements CustomPageable {
|
||||||
|
private long totalElements;
|
||||||
|
private int totalPages;
|
||||||
|
private int size;
|
||||||
|
private int page;
|
||||||
|
private String sortDirection;
|
||||||
|
|
||||||
|
private CustomPageableImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CustomPageableImpl createPageRequest(int size, int page, String sortDirection) {
|
||||||
|
CustomPageableImpl pageable = new CustomPageableImpl();
|
||||||
|
pageable.size = size;
|
||||||
|
pageable.page = page;
|
||||||
|
pageable.sortDirection = sortDirection;
|
||||||
|
return pageable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CustomPageableImpl createPageableResource(CustomPageable pageable, long totalElements, int totalPages) {
|
||||||
|
CustomPageableImpl pageableResource = new CustomPageableImpl();
|
||||||
|
pageableResource.totalElements = totalElements;
|
||||||
|
pageableResource.totalPages = pageable.getPage() < 0 ? 1 : totalPages;
|
||||||
|
pageableResource.size = pageable.getPage() < 0 ? (int) totalElements : pageable.getSize();
|
||||||
|
pageableResource.page = Math.max(pageable.getPage(), 0);
|
||||||
|
pageableResource.sortDirection = pageable.sortDirection();
|
||||||
|
return pageableResource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getTotalElements() {
|
||||||
|
return totalElements;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getTotalPages() {
|
||||||
|
return totalPages;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSize() {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPage() {
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int offset() {
|
||||||
|
return size * page;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String sortDirection() {
|
||||||
|
return sortDirection;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package inc.sdt.controlcentermanagement.presentation.support;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Minkyu Kim (minkyu.kim@sdt.inc)
|
||||||
|
*/
|
||||||
|
public interface PageableResource {
|
||||||
|
long getTotalElements();
|
||||||
|
|
||||||
|
int getTotalPages();
|
||||||
|
|
||||||
|
int getSize();
|
||||||
|
|
||||||
|
int getPage();
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package inc.sdt.controlcentermanagement.presentation.support;
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Minkyu Kim (minkyu.kim@sdt.inc)
|
||||||
|
*/
|
||||||
|
public class PageableResourceImpl implements PageableResource, Serializable {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 8670430894447655773L;
|
||||||
|
private final long totalElements;
|
||||||
|
private final int totalPage;
|
||||||
|
private final int size;
|
||||||
|
private final int page;
|
||||||
|
|
||||||
|
PageableResourceImpl(long totalElements, int totalPage, int size, int page) {
|
||||||
|
this.totalElements = totalElements;
|
||||||
|
this.totalPage = totalPage;
|
||||||
|
this.size = size;
|
||||||
|
this.page = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> PageableResourceImpl from(Page<T> page) {
|
||||||
|
return new PageableResourceImpl(
|
||||||
|
page.getTotalElements(),
|
||||||
|
page.getTotalPages(),
|
||||||
|
page.getSize(),
|
||||||
|
page.getPageable().getPageNumber());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getTotalElements() {
|
||||||
|
return totalElements;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getTotalPages() {
|
||||||
|
return totalPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSize() {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPage() {
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package inc.sdt.controlcentermanagement.presentation.support;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Minkyu Kim (minkyu.kim@sdt.inc)
|
||||||
|
*/
|
||||||
|
public class PageableResponse<T> {
|
||||||
|
private final List<T> content;
|
||||||
|
private final PageableResource pageable;
|
||||||
|
|
||||||
|
PageableResponse(List<T> content, PageableResource pageable) {
|
||||||
|
this.content = content;
|
||||||
|
this.pageable = pageable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U> PageableResponse<U> from(Page<T> page, Function<T, U> converter) {
|
||||||
|
return new PageableResponse<>(
|
||||||
|
page.map(converter).getContent(),
|
||||||
|
PageableResourceImpl.from(page));
|
||||||
|
}
|
||||||
|
|
||||||
|
public PageableResource getPageable() {
|
||||||
|
return pageable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<T> getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,8 +6,10 @@ spring:
|
||||||
name: control-center-management
|
name: control-center-management
|
||||||
data:
|
data:
|
||||||
mongodb:
|
mongodb:
|
||||||
uri: mongodb://13.209.39.139:32000/awexomeray?authSource=admin
|
uri: mongodb://sdt:251327@13.209.39.139:32000/awexomeray?authSource=admin
|
||||||
|
|
||||||
|
data-fall:
|
||||||
|
endpoint: http://13.209.39.139:32171
|
||||||
deployer:
|
deployer:
|
||||||
endpoint: http://localhost:8085
|
endpoint: http://localhost:8085
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue