자바 시작일, 종료일 및 그 사이에 주 구하기

김도환·2023년 7월 27일
0

JAVA-BACKEND

목록 보기
6/6

아래 로직은 시작일과 종료일을 가지고 그 사이 일자를 구하여
필요한 요일과 일자에 대해서만 코드를 저장(그 외 일자도 저장) 하는 로직이다

 			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
		LocalDate start = LocalDate.parse(start_dt, formatter);
		LocalDate end = LocalDate.parse(end_dt, formatter);
		
		Map<String, Object> params = new HashMap<>();
		
		int daysBetween = (int) ChronoUnit.DAYS.between(start, end);		
		List<LocalDate> weeks = IntStream.iterate(0, i -> i + 1).limit(daysBetween + 1).mapToObj(i -> start.plusDays(i)).collect(Collectors.toList());			
		List<List<String>> weeks__ = new ArrayList<>();
		
		
		params.put("P_COMPANY_CD", this.getCompanyCode());
		params.put("P_USER_ID", this.getUserId());
		params.put("P_USER_IP", this.getRemoteHost());
		params.put("P_WRTR_EMP_NO", wrtr_emp_no);
		params.put("P_WORKTM_CD", worktm_cd);
		params.put("P_START_DT", start_dt);
		params.put("P_END_DT", end_dt);
		params.put("P_REQ_DOC_NO", req_doc_no);
		params.put("P_APPLY_WEEKS", apply_weeks);
		params.put("P_GWAPRVLST_CD", null);

		for (Map<String, String> empInfo_ : empInfo) {
			params.put("P_EMP_NO", empInfo_.get("emp_no"));
			params.put("P_DEPT_CD", empInfo_.get("dept_cd"));
			params.put("P_PJT_CD", empInfo_.get("pjt_cd"));
			// 전체 일자 등록
			for (LocalDate weeks_ : weeks) {

				params.put("P_BWRK_DT", weeks_.format(formatter));
				params.put("P_ELAS_FG", null);

				if (weeks_.format(formatter).equals(start.format(formatter))) {
					params.put("P_ELAS_FG", "BS");
				}

				if (weeks_.format(formatter).equals(end.format(formatter))) {
					params.put("P_ELAS_FG", "BE");
				}
				dao.plan_merge(params);
			}
			
			// LocalDate 월요일: 1 ~ 일요일 7
			// ERP10요일 월요일: 2 ~ 일요일 1
			List<Integer> days = Arrays.asList(2, 3, 4, 5, 6, 7, 1); // erp10 요일하고 매핑
			List<List<Integer>> fs = Arrays.asList(frst, scnd);
			
			for (int i = 0; i < weeks.size() / 7; i++) {
				List<String> week = new ArrayList<>();
				
				for (int j = i * 7; j < (i + 1) * 7; j++) {
					LocalDate date = weeks.get(j);
					
					if (fs.get((i + 2) % 2).contains(days.get(date.getDayOfWeek().getValue()))) {
						week.add(date.format(formatter));
					}
				}
				weeks__.add(week);
			}

// 전체일자 등록 및 시작일, 끝일에만 BS || BE 저장 후 근무유형이 있는 일자만 따로 UPDATE

			for (List<String> d : weeks__) {
				for (String s : d) {
					params.put("P_START_TM", start_tm);
					params.put("P_END_TM", end_tm);
					params.put("P_PLAN_TM", Integer.parseInt(endtm) - Integer.parseInt(starttm));
					params.put("P_BWRK_DT", s);
					params.put("P_FLE_BWRK_TP_CD", fle_bwrk_tp_cd);

					dao.plan_udt(params);
				}
			}
		}
profile
극초보 웹개발자

0개의 댓글