|
|
|
|
@ -1,21 +1,39 @@
|
|
|
|
|
package com.worker.scheduler.smg.service;
|
|
|
|
|
|
|
|
|
|
import com.worker.domain.entity.CpAnswer;
|
|
|
|
|
import com.worker.domain.entity.CpUser;
|
|
|
|
|
import com.worker.domain.repo.cp.CpAnswerRepository;
|
|
|
|
|
import com.worker.domain.repo.cp.CpUserRepository;
|
|
|
|
|
import com.worker.domain.repo.ep.EpAnswerRepository;
|
|
|
|
|
import com.worker.domain.repo.ep.EpUserRepository;
|
|
|
|
|
import com.worker.dto.SinmungoDto;
|
|
|
|
|
import com.worker.dto.UserInfoDto;
|
|
|
|
|
import com.worker.util.common.commEnum.StateEnum;
|
|
|
|
|
import com.worker.util.fileMaker.XmlMacker;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.Optional;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class XmlSend {
|
|
|
|
|
|
|
|
|
|
private final XmlMacker xmlMacker;
|
|
|
|
|
|
|
|
|
|
private final CpAnswerRepository cpAnswerRepository;
|
|
|
|
|
private final EpAnswerRepository epAnswerRepository;
|
|
|
|
|
private final CpUserRepository cpUserRepository;
|
|
|
|
|
private final EpUserRepository epUserRepository;
|
|
|
|
|
|
|
|
|
|
// 실행 대상 답변 찾기
|
|
|
|
|
public SinmungoDto.Send.Answers findAnswersByStatus(String status) {
|
|
|
|
|
@ -29,21 +47,94 @@ public class XmlSend {
|
|
|
|
|
|
|
|
|
|
//send 디렉토리에 xml 생성
|
|
|
|
|
public void send(SinmungoDto.SetInfo setInfo, SinmungoDto.Send.Answers answers) {
|
|
|
|
|
// answers 에서 as_reuser 추출
|
|
|
|
|
List<String> reuser;
|
|
|
|
|
|
|
|
|
|
// 추출한 reuser에서 user정보 조회
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// List<Integer> reuser = Stream.concat(
|
|
|
|
|
// Optional.ofNullable(answers.getCpAnswer()).orElse(List.of()).stream(),
|
|
|
|
|
// Optional.ofNullable(answers.getEpAnswer()).orElse(List.of()).stream()
|
|
|
|
|
// )
|
|
|
|
|
// .map(CpAnswer::getAsReuser)
|
|
|
|
|
// .filter(Objects::nonNull)
|
|
|
|
|
// .collect(Collectors.toList());
|
|
|
|
|
// 대상 답변의 reuser를 순회하며 userInfo를 조회
|
|
|
|
|
// List<Optional<CpUser>> CpUserInfos = answers.getCpAnswer().stream()
|
|
|
|
|
// .map(user -> cpUserRepository.findById(Long.valueOf(user.getAsReuser())))
|
|
|
|
|
// .collect(Collectors.toList());
|
|
|
|
|
// List<Optional<CpUser>> EpUserInfos = answers.getEpAnswer().stream()
|
|
|
|
|
// .map(user -> epUserRepository.findById(Long.valueOf(user.getAsReuser())))
|
|
|
|
|
// .collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
// 유저 정보
|
|
|
|
|
SinmungoDto.Send.UserInfos userInfos = findUserInfos(answers);
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.info(userInfos.toString());
|
|
|
|
|
log.info(userInfos.toString());
|
|
|
|
|
|
|
|
|
|
// main테이블 조회
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mm_state 별로 im_civil_abstract_l 값 업데이트
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//awsers 만큼
|
|
|
|
|
// 위에서 조회한 정보들 조합해서 xml 생성
|
|
|
|
|
//String 으로 xml 만들고 그거 파라미터로 파일생성하는 매서드로 가져가
|
|
|
|
|
answers.getCpAnswer().forEach(cpAnswer ->
|
|
|
|
|
userInfos.getCpUsers().stream()
|
|
|
|
|
.filter(user -> Objects.equals(user.getUmCode(), cpAnswer.getAsReuser()))
|
|
|
|
|
.findFirst()
|
|
|
|
|
.ifPresent(user -> {
|
|
|
|
|
try {
|
|
|
|
|
xmlMacker.writeEsbAnswerXml(cpAnswer, user);
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
answers.getEpAnswer().forEach(epAnswer ->
|
|
|
|
|
userInfos.getEpUsers().stream()
|
|
|
|
|
.findFirst()
|
|
|
|
|
.filter(user -> Objects.equals(user.getUmCode(), epAnswer.getAsReuser()))
|
|
|
|
|
.ifPresent(user -> {
|
|
|
|
|
try {
|
|
|
|
|
xmlMacker.writeEsbAnswerXml(epAnswer, user);
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// answers 리스트에서 reuser를 통해 유저정보를 추출한다.
|
|
|
|
|
private SinmungoDto.Send.UserInfos findUserInfos(SinmungoDto.Send.Answers answers) {
|
|
|
|
|
|
|
|
|
|
return SinmungoDto.Send.UserInfos.builder()
|
|
|
|
|
.cpUsers(
|
|
|
|
|
answers.getCpAnswer().stream()
|
|
|
|
|
.map(user -> cpUserRepository.findById(Long.valueOf(user.getAsReuser())))
|
|
|
|
|
.filter(Optional::isPresent)
|
|
|
|
|
.map(Optional::get)
|
|
|
|
|
.collect(Collectors.collectingAndThen(
|
|
|
|
|
Collectors.toMap(CpUser::getUmCode, Function.identity(), (a, b) -> a),
|
|
|
|
|
m -> new ArrayList<>(m.values())
|
|
|
|
|
))
|
|
|
|
|
)
|
|
|
|
|
.epUsers(
|
|
|
|
|
answers.getEpAnswer().stream()
|
|
|
|
|
.map(user -> epUserRepository.findById(Long.valueOf(user.getAsReuser())))
|
|
|
|
|
.filter(Optional::isPresent)
|
|
|
|
|
.map(Optional::get)
|
|
|
|
|
.collect(Collectors.collectingAndThen(
|
|
|
|
|
Collectors.toMap(CpUser::getUmCode, Function.identity(), (a, b) -> a),
|
|
|
|
|
m -> new ArrayList<>(m.values())
|
|
|
|
|
))
|
|
|
|
|
)
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|