From eab93d7bef852c1b1f6356c7cde3dc45c2ed9327 Mon Sep 17 00:00:00 2001 From: zss <zss@example.com> Date: 星期五, 26 七月 2024 17:12:51 +0800 Subject: [PATCH] 班次排班优化 --- performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java | 71 ++++++++++++++++++++++++++--------- 1 files changed, 52 insertions(+), 19 deletions(-) diff --git a/performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java b/performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java index f281f2d..8d6978e 100644 --- a/performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java +++ b/performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java @@ -55,29 +55,44 @@ @Override public void performanceShiftAdd(PerformanceShiftAddDto performanceShiftAddDto) { List<PerformanceShift> list = new ArrayList<>(); + LocalDateTime startWeek = performanceShiftAddDto.getStartWeek(); + LocalDateTime endWeek = performanceShiftAddDto.getEndWeek(); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String formattedDateTime = performanceShiftAddDto.getStartWeek().format(formatter); String[] splitUserId = performanceShiftAddDto.getUserId().split(","); for (String userId : splitUserId) { - boolean exists = baseMapper.exists(Wrappers.<PerformanceShift>lambdaQuery() - .eq(PerformanceShift::getWorkTime, formattedDateTime) - .eq(PerformanceShift::getUserId, userId)); - // 濡傛灉涓嶅瓨鍦ㄦ坊鍔犳暟鎹� - if (!exists) { - LocalDate firstDayOfMonth = performanceShiftAddDto.getEndWeek().toLocalDate().withDayOfMonth(1); - LocalDate lastDayOfMonth = performanceShiftAddDto.getEndWeek().toLocalDate().with(TemporalAdjusters.lastDayOfMonth()); - List<LocalDateTime> localDateTimesBetween = getLocalDateTimesBetween(firstDayOfMonth.atStartOfDay(), lastDayOfMonth.atStartOfDay()); - localDateTimesBetween.forEach(i -> { - PerformanceShift performanceShift = new PerformanceShift(); - performanceShift.setUserId(Integer.valueOf(userId)); - performanceShift.setWorkTime(i); - performanceShift.setShift(""); - list.add(performanceShift); - if (list.size() >= 1000) { - baseMapper.insertBatchSomeColumn(list); - list.clear(); - } - }); + //鍒ゆ柇鏄惁璺ㄦ湀 + boolean isMonth = startWeek.getMonthValue() != endWeek.getMonthValue(); + if (isMonth){ + //濡傛灉璺ㄦ湀,鍒欎袱涓湀閮藉垽鏂竴涓嬬湅鏁版嵁搴撴槸鍝釜鏈堜唤鐨勬暟鎹病鏈� + boolean exists1 = baseMapper.exists(Wrappers.<PerformanceShift>lambdaQuery() + .eq(PerformanceShift::getWorkTime, startWeek) + .eq(PerformanceShift::getUserId, userId)); + boolean exists2 = baseMapper.exists(Wrappers.<PerformanceShift>lambdaQuery() + .eq(PerformanceShift::getWorkTime, endWeek) + .eq(PerformanceShift::getUserId, userId)); + if (!exists1 && !exists2){ + //涓や釜鏈堥兘涓嶅瓨鍦ㄦ暟鎹� + list = saveMonth(performanceShiftAddDto.getStartWeek(), userId, list); + list = saveMonth(performanceShiftAddDto.getEndWeek(), userId, list); + }else if (!exists1 && exists2){ + //寮�濮嬬殑鏈堜唤涓嶅瓨鍦ㄦ暟鎹� + list = saveMonth(performanceShiftAddDto.getStartWeek(), userId, list); + }else if (exists1 && !exists2){ + //缁撴潫鐨勬湀浠戒笉瀛樺湪鏁版嵁 + list = saveMonth(performanceShiftAddDto.getEndWeek(), userId, list); + } + }else { + //涓嶈法鏈� + boolean exists = baseMapper.exists(Wrappers.<PerformanceShift>lambdaQuery() + .in(PerformanceShift::getWorkTime, formattedDateTime) + .eq(PerformanceShift::getUserId, userId)); + // 濡傛灉涓嶅瓨鍦ㄦ坊鍔犳暟鎹� + if (!exists) { + list = saveMonth(performanceShiftAddDto.getEndWeek(), userId, list); + } } } if (!list.isEmpty()) { @@ -101,6 +116,24 @@ } } + private List<PerformanceShift> saveMonth (LocalDateTime week,String userId,List<PerformanceShift> list){ + LocalDate firstDayOfMonth = week.toLocalDate().withDayOfMonth(1); + LocalDate lastDayOfMonth = week.toLocalDate().with(TemporalAdjusters.lastDayOfMonth()); + List<LocalDateTime> localDateTimesBetween = getLocalDateTimesBetween(firstDayOfMonth.atStartOfDay(), lastDayOfMonth.atStartOfDay()); + localDateTimesBetween.forEach(i -> { + PerformanceShift performanceShift = new PerformanceShift(); + performanceShift.setUserId(Integer.valueOf(userId)); + performanceShift.setWorkTime(i); + performanceShift.setShift(""); + list.add(performanceShift); + if (list.size() >= 1000) { + baseMapper.insertBatchSomeColumn(list); + list.clear(); + } + }); + return list; + } + @Override public Map<String, Object> performanceShiftPage(Page<Object> page, String time, String userName, String laboratory) { //鏌ヨ褰撳墠鐧诲綍浜哄憳鐨勬灦鏋� -- Gitblit v1.9.3