[TIL] 2020.09.02_TIL
TO_DO
- [프로젝트] 자동이체 기능 구현
Quartz 라이브러리를 이용한 자동이체 기능 구현
1. 자동이체 Controller
@Controller
public class AutoDebitController {
@Autowired
private AutoDebitService autoDebitService;
// 자동이체
public void AutoDebitTest() {
autoDebitService.autoDebitExecute();
}
}
2. 자동이체 Service
@Service("autoDebitExecute")
public class AutoDebitServiceImpl implements AutoDebitService {
@Autowired
private AutoDebitDAO autoDebitDAO;
@Override
public void autoDebitExecute() {
// 0. 날짜포멧 - 지정일 이체를 위해 오늘 일자만 리턴
SimpleDateFormat format = new SimpleDateFormat("dd");
Date date = new Date();
// 1. 자동이체용 당일 날짜 출력(DD값만)
String systemDate = format.format(date); // 오늘 일자
System.out.println("Test job...." + systemDate);
// 2. 자동이체 조건 쿼리
String accNo = "";
String setMoney = "";
String oppAccNo = "";
String autodebitCode = "";
List<AutoDebitVO> autoDebitInfo = autoDebitDAO.selectByDate(); // 당일 자동이체 계좌정보(계좌번호, 이체금액) 객체
System.out.println("자동이체할 계좌정보 객체 확인 : " + autoDebitInfo);
// 3. AutoDebit Execute(자동이체 실행)
// 당일 자동이체할 계좌가 있는 경우
if (autoDebitInfo != null) {
int i = 0;
// 자동이체할 계좌 수만큼 돌거임
while (i < autoDebitInfo.size()) {
try {
AutoDebitVO autoDebitVO = new AutoDebitVO();
autoDebitVO.setAccNo(accNo);
autoDebitVO.setSetMoney(setMoney);
autoDebitVO.setOppAccNo(oppAccNo);
autoDebitVO.setAutodebitCode(autodebitCode);
// 당일 자동이체 계좌번호, 금액, 상대계좌, 자동이체 고유번호
accNo = autoDebitInfo.get(i).getAccNo();
setMoney = autoDebitInfo.get(i).getSetMoney();
oppAccNo = autoDebitInfo.get(i).getOppAccNo();
autodebitCode = autoDebitInfo.get(i).getAutodebitCode();
// 3-1. UPDATE EXECUTE 실행(출금계좌)
autoDebitDAO.autoDebitSend(autoDebitVO);
// 3-2. UPDATE EXECUTE 실행(출금계좌)
autoDebitDAO.autoDebitReceive(autoDebitVO);
// 4. 자동이체 시 거래내역 로그 남기기
// 5. 자동이체 마지막 거래일 업데이트
autoDebitDAO.lastRunDate(autoDebitVO);
i++;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
3. 자동이체 DAO
@Repository
public class AutoDebitDAOImpl implements AutoDebitDAO {
@Autowired
private SqlSessionTemplate sqlSession;
@Override
public List<AutoDebitVO> selectByDate() {
List<AutoDebitVO> selectByDate = null;
try {
// 당일 자동이체 해야할 계좌가 있는지 확인
selectByDate = sqlSession.selectList("autodebit.dao.AutoDebitDAO.selectByDate");
} catch (Exception e) {
e.printStackTrace();
}
return selectByDate;
}
@Override
public void autoDebitSend(AutoDebitVO autoDebitVO) {
try {
// 자동이체 실행(출금)
sqlSession.update("autodebit.dao.AutoDebitDAO.autoDebitSend", autoDebitVO);
} catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void autoDebitReceive(AutoDebitVO autoDebitVO) {
try {
// 자동이체 실행(입금)
sqlSession.update("autodebit.dao.AutoDebitDAO.autoDebitReceive", autoDebitVO);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void lastRunDate(AutoDebitVO autoDebitVO) {
try {
// 자동이체 주기설정을 위한 마지막 실행일자 저장
sqlSession.update("autodebit.dao.AutoDebitDAO.lastRunDate", autoDebitVO);
} catch (Exception e) {
e.printStackTrace();
}
}
}
댓글남기기