[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();
		}
	}
}

댓글남기기