package com.its.op.service.vms; import com.its.op.model.dto.vms.TbVmsSymbIfscDto; import com.its.op.model.dto.vms.TbVmsSymbLibDto; import com.its.op.model.dto.vms.TbVmsSymbLibIfscVMP1Dto; import com.its.op.model.entity.vms.TbVmsSymbLib; import com.its.op.repository.vms.TbVmsFormObjectRepository; import com.its.op.repository.vms.TbVmsSymbLibRepository; 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; @Slf4j @Service public class TbVmsSymbLibServiceVMP1 extends TbVmsSymbLibService { private final TbVmsSymbIfscService ifscService; public TbVmsSymbLibServiceVMP1(TbVmsSymbLibRepository repo, TbVmsFormObjectRepository formObjectRepository, TbVmsSymbIfscService ifscService) { super("VMP1", repo, formObjectRepository); this.ifscService = ifscService; } public Short getNewSymbolId() { return getNewSymbolId((short) 7000, (short) 7999); } public TbVmsSymbLibIfscVMP1Dto findAllById(Short id) { TbVmsSymbLib lib = requireOne(id); List list = ifscService.findDataById(id); return TbVmsSymbLibIfscVMP1Dto.toDto(lib.toDto(), list); } @Transactional public TbVmsSymbLibDto deleteDataById(Short id) { int usageCount = findUsageCountBySymbolId(id); if (usageCount > 0) { throw new ConcurrentModificationException("사용중인 심볼 라이브러리 입니다. 삭제할 수 없습니다: " + id); } this.ifscService.deleteDataById(id); return deleteById(id); } @Transactional public TbVmsSymbLibIfscVMP1Dto mergeSymbIfscInfo(TbVmsSymbLibIfscVMP1Dto.TbVmsSymbLibIfscVMP1UpdReq req) { // 셀 데이터를 전체 삭제 this.ifscService.deleteDataById(req.getSymbLibNmbr()); // 심볼 정보 저장 TbVmsSymbLibDto libDto = mergeInfo(req.toLibReq()); // 셀 정보 저장 List cells = new ArrayList<>(); for (TbVmsSymbIfscDto ifscDto : req.getCells()) { TbVmsSymbIfscDto.TbVmsSymbIfscUpdReq ifscReq = new TbVmsSymbIfscDto.TbVmsSymbIfscUpdReq( req.getSymbLibNmbr(), ifscDto.getCellId(), ifscDto.getPosx(), ifscDto.getPosy(), ifscDto.getVmsIfscId() ); cells.add(this.ifscService.mergeInfo(ifscReq)); } return TbVmsSymbLibIfscVMP1Dto.toDto(libDto, cells); } }