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