|
|
@@ -1,17 +1,19 @@
|
|
|
package com.its.op.service.vms;
|
|
|
|
|
|
+import com.its.op.model.dto.vms.TbVmsIfscCmtrGradDto;
|
|
|
import com.its.op.model.dto.vms.TbVmsIfscDto;
|
|
|
-import com.its.op.model.dto.vms.TbVmsIfscRltnDto;
|
|
|
+import com.its.op.model.dto.vms.TbVmsLinkIfscDto;
|
|
|
import com.its.op.model.entity.vms.TbVmsIfsc;
|
|
|
import com.its.op.repository.vms.TbVmsIfscRepository;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import javax.transaction.Transactional;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.ConcurrentModificationException;
|
|
|
import java.util.List;
|
|
|
import java.util.NoSuchElementException;
|
|
|
-import java.util.Optional;
|
|
|
|
|
|
@Slf4j
|
|
|
@RequiredArgsConstructor
|
|
|
@@ -22,6 +24,7 @@ public class TbVmsIfscService {
|
|
|
private final TbVmsIfscRltnService ifscRltnService;
|
|
|
private final TbVmsFormObjectService formObjectService;
|
|
|
private final TbVmsLinkIfscService linkIfscService;
|
|
|
+ private final TbVmsIfscCmtrGradService cmtrGradService;
|
|
|
|
|
|
// 데이터 1건 조회, 없으면 exception
|
|
|
private TbVmsIfsc requireOne(Long id) {
|
|
|
@@ -34,7 +37,7 @@ public class TbVmsIfscService {
|
|
|
List<TbVmsIfscDto> result = new ArrayList<>();
|
|
|
List<TbVmsIfsc> data = this.repo.findAll();
|
|
|
for (TbVmsIfsc entity : data) {
|
|
|
- result.add(entity.toDto(new ArrayList<>()));
|
|
|
+ result.add(entity.toDto());
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
@@ -42,8 +45,35 @@ public class TbVmsIfscService {
|
|
|
// 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
|
|
|
public TbVmsIfscDto findById(Long id) {
|
|
|
TbVmsIfsc entity = requireOne(id);
|
|
|
- List<TbVmsIfscRltnDto> list = this.ifscRltnService.findDataById(id);
|
|
|
- return entity.toDto(list);
|
|
|
+ List<TbVmsLinkIfscDto> list = this.linkIfscService.findDataById(id);
|
|
|
+ TbVmsIfscDto dto = entity.toDto();
|
|
|
+ dto.setIfscs(list);
|
|
|
+
|
|
|
+ TbVmsIfscCmtrGradDto.CmtrGrad grad1 = new TbVmsIfscCmtrGradDto.CmtrGrad((short)0, (short)0);
|
|
|
+ TbVmsIfscCmtrGradDto.CmtrGrad grad2 = new TbVmsIfscCmtrGradDto.CmtrGrad((short)0, (short)0);
|
|
|
+ TbVmsIfscCmtrGradDto.CmtrGrad grad3 = new TbVmsIfscCmtrGradDto.CmtrGrad((short)0, (short)0);
|
|
|
+ List<TbVmsIfscCmtrGradDto> gradList = this.cmtrGradService.findDataById(id);
|
|
|
+ if (gradList != null) {
|
|
|
+ for (TbVmsIfscCmtrGradDto grad : gradList) {
|
|
|
+ if (grad.getCmtrGradCd().equals("1")) {
|
|
|
+ grad1.setHghssped(grad.getHghssped());
|
|
|
+ grad1.setLwstsped(grad.getLwstsped());
|
|
|
+ }
|
|
|
+ else if (grad.getCmtrGradCd().equals("2")) {
|
|
|
+ grad2.setHghssped(grad.getHghssped());
|
|
|
+ grad2.setLwstsped(grad.getLwstsped());
|
|
|
+ }
|
|
|
+ else if (grad.getCmtrGradCd().equals("3")) {
|
|
|
+ grad3.setHghssped(grad.getHghssped());
|
|
|
+ grad3.setLwstsped(grad.getLwstsped());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dto.setGrad1(grad1);
|
|
|
+ dto.setGrad2(grad2);
|
|
|
+ dto.setGrad3(grad3);
|
|
|
+
|
|
|
+ return dto;
|
|
|
}
|
|
|
|
|
|
// 데이터 변경
|
|
|
@@ -51,7 +81,7 @@ public class TbVmsIfscService {
|
|
|
TbVmsIfsc entity = requireOne(id);
|
|
|
entity.updateInfo(req);
|
|
|
this.repo.save(entity);
|
|
|
- return entity.toDto(new ArrayList<>());
|
|
|
+ return entity.toDto();
|
|
|
}
|
|
|
|
|
|
// 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
|
|
|
@@ -60,34 +90,76 @@ public class TbVmsIfscService {
|
|
|
for (TbVmsIfscDto.TbVmsIfscUpdReq req : reqList) {
|
|
|
TbVmsIfsc obj = req.toEntity();
|
|
|
this.repo.save(obj);
|
|
|
- result.add(obj.toDto(new ArrayList<>()));
|
|
|
+ result.add(obj.toDto());
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
// 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
|
|
|
- public TbVmsIfscDto mergeInfo(TbVmsIfscDto.TbVmsIfscUpdReq req) {
|
|
|
+ @Transactional
|
|
|
+ public TbVmsIfscDto.TbVmsIfscUpdReq mergeInfo(TbVmsIfscDto.TbVmsIfscUpdReq req) {
|
|
|
+
|
|
|
+ if (req.getDetrId() == 0) {
|
|
|
+ req.setDetrId(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ // VMS 정보제공구간 정보 저장
|
|
|
+ req.setEdtnCd("EDI1"); // 편집코드를 수정으로 설정
|
|
|
TbVmsIfsc obj = req.toEntity();
|
|
|
this.repo.save(obj);
|
|
|
- return obj.toDto(new ArrayList<>());
|
|
|
+
|
|
|
+ // 소통등급 정보 저장(merge)
|
|
|
+ TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq grad1 = new TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq(req.getVmsIfscId(), "1", req.getGrad1().getLwstsped(), req.getGrad1().getHghssped());
|
|
|
+ TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq grad2 = new TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq(req.getVmsIfscId(), "2", req.getGrad2().getLwstsped(), req.getGrad2().getHghssped());
|
|
|
+ TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq grad3 = new TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq(req.getVmsIfscId(), "3", req.getGrad3().getLwstsped(), req.getGrad3().getHghssped());
|
|
|
+ this.cmtrGradService.mergeInfo(grad1);
|
|
|
+ this.cmtrGradService.mergeInfo(grad2);
|
|
|
+ this.cmtrGradService.mergeInfo(grad3);
|
|
|
+
|
|
|
+ // VMS LINK 정보제공구간 정보 삭제
|
|
|
+ this.linkIfscService.deleteDataById(req.getVmsIfscId());
|
|
|
+ // VMS LINK 정보제공구간 정보 저장
|
|
|
+ for (TbVmsIfscDto.TbVmsIfscUpdReq.VmsIfscLinkOrd ifsc : req.getIfscs()) {
|
|
|
+ TbVmsLinkIfscDto.TbVmsLinkIfscUpdReq ifscReq = new TbVmsLinkIfscDto.TbVmsLinkIfscUpdReq(req.getVmsIfscId(), ifsc.getIfscId(), ifsc.getOrd());
|
|
|
+ TbVmsLinkIfscDto ifscDto = this.linkIfscService.mergeInfo(ifscReq);
|
|
|
+ }
|
|
|
+
|
|
|
+ return req;
|
|
|
}
|
|
|
|
|
|
// 정보 삭제-개별, 데이터 존재하지 않으면 Exception
|
|
|
+ @Transactional
|
|
|
public TbVmsIfscDto deleteById(Long id) {
|
|
|
+ int usageCount = findUsageCountByVmsIfscId(id);
|
|
|
+ if (usageCount > 0) {
|
|
|
+ throw new ConcurrentModificationException("사용중인 정보제공구간 입니다. 삭제할 수 없습니다: " + id);
|
|
|
+ }
|
|
|
+
|
|
|
+ //VMS_정보제공구간 소통 등급
|
|
|
+ //sQry = "DELETE FROM TB_VMS_IFSC_CMTR_GRAD WHERE VMS_IFSC_ID = :p01";
|
|
|
+ //VMS LINK 정보제공구간
|
|
|
+ //sQry = "DELETE FROM TB_VMS_LINK_IFSC WHERE VMS_IFSC_ID = :p01";
|
|
|
+ //VMS 정보제공구간 관계
|
|
|
+ //sQry = "DELETE FROM TB_VMS_IFSC_RLTN WHERE VMS_IFSC_ID = :p01";
|
|
|
+ //VMS_소통정보
|
|
|
+ //sQry = "DELETE FROM TB_VMS_CMTRINFR WHERE VMS_IFSC_ID = :p01";
|
|
|
+
|
|
|
TbVmsIfsc entity = requireOne(id);
|
|
|
+
|
|
|
+ // VMS 정보제공구간 소통등급 정보 삭제
|
|
|
+ this.cmtrGradService.deleteDataById(id);
|
|
|
+ // VMS LINK 정보제공구간에 속하는 정보제공구간 정보 목록 삭제
|
|
|
+ this.linkIfscService.deleteDataById(id);
|
|
|
+ // VMS 정보제공구간 정보 삭제
|
|
|
this.repo.deleteById(id);
|
|
|
- return entity.toDto(new ArrayList<>());
|
|
|
+ return entity.toDto();
|
|
|
}
|
|
|
|
|
|
// 정보 삭제-목록, 존재하는 데이터 만 삭제
|
|
|
public List<TbVmsIfscDto> deleteByIds(List<Long> ids) {
|
|
|
List<TbVmsIfscDto> result = new ArrayList<>();
|
|
|
for (Long id : ids) {
|
|
|
- Optional<TbVmsIfsc> obj = this.repo.findById(id);
|
|
|
- if (obj.isPresent()) {
|
|
|
- this.repo.deleteById(id);
|
|
|
- result.add(obj.get().toDto(new ArrayList<>()));
|
|
|
- }
|
|
|
+ result.add(deleteById(id));
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
@@ -119,4 +191,8 @@ public class TbVmsIfscService {
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+ public Long getNewVmsIfscId() {
|
|
|
+ return this.repo.getNewVmsIfscId();
|
|
|
+ }
|
|
|
}
|