From e8d223967ea612f4eb24603ed7ae941ec00fd76f Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期三, 13 三月 2024 11:33:07 +0800
Subject: [PATCH] 车间管理添加字段,算法bug修复

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java |  215 +++++++++++++++++++++++++++++------------------------
 1 files changed, 117 insertions(+), 98 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java
index 57dce4e..2b3ae6f 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java
@@ -2,30 +2,25 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
-import org.jeecg.modules.mdc.entity.MdcDeviceCalendar;
-import org.jeecg.modules.mdc.entity.MdcShiftSub;
+import org.jeecg.modules.mdc.entity.*;
 import org.jeecg.modules.mdc.mapper.MdcDeviceCalendarMapper;
-import org.jeecg.modules.mdc.service.IMdcDeviceCalendarService;
-import org.jeecg.modules.mdc.service.IMdcEquipmentService;
-import org.jeecg.modules.mdc.service.IMdcShiftSubService;
+import org.jeecg.modules.mdc.service.*;
 import org.jeecg.modules.mdc.vo.EquipmentCalendarVo;
 import org.jeecg.modules.mdc.vo.MdcDeviceCalendarQueryVo;
 import org.jeecg.modules.mdc.vo.MdcDeviceCalendarVo;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-import java.time.DayOfWeek;
+import java.math.BigDecimal;
 import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 /**
  * @Description: 璁惧宸ヤ綔鏃ュ巻琛�
@@ -40,6 +35,12 @@
     private IMdcEquipmentService mdcEquipmentService;
     @Resource
     private IMdcShiftSubService mdcShiftSubService;
+
+    @Resource
+    private IMdcVacationManagementService mdcVacationManagementService;
+
+    @Resource
+    private IMdcEquipmentOvertimeService mdcEquipmentOvertimeService;
 
     /**
      * 鍒嗛〉鍒楄〃鏌ヨ
@@ -81,52 +82,25 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean saveCalendar(EquipmentCalendarVo calendarVo) {
         String[] equipmentIdList = calendarVo.getEquipmentId().split(",");
-        //鐢熸晥鏃堕棿
-        LocalDate takeEffectDate = calendarVo.getTakeEffectDate();
-        //澶辨晥鏃堕棿
-        LocalDate invalidDate = calendarVo.getInvalidDate();
-        //澶勭悊鏄熸湡
-        Map<String, String> map = new HashMap<>();
-        if (org.apache.commons.lang.StringUtils.isNotBlank(calendarVo.getMonShiftId())) {
-            map.put("1", calendarVo.getMonShiftId());
-        }
-        if (org.apache.commons.lang.StringUtils.isNotBlank(calendarVo.getTueShiftId())) {
-            map.put("2", calendarVo.getTueShiftId());
-        }
-        if (org.apache.commons.lang.StringUtils.isNotBlank(calendarVo.getWedShiftId())) {
-            map.put("3", calendarVo.getWedShiftId());
-        }
-        if (org.apache.commons.lang.StringUtils.isNotBlank(calendarVo.getThuShiftId())) {
-            map.put("4", calendarVo.getThuShiftId());
-        }
-        if (org.apache.commons.lang.StringUtils.isNotBlank(calendarVo.getFriShiftId())) {
-            map.put("5", calendarVo.getFriShiftId());
-        }
-        if (org.apache.commons.lang.StringUtils.isNotBlank(calendarVo.getSatShiftId())) {
-            map.put("6", calendarVo.getSatShiftId());
-        }
-        if (org.apache.commons.lang.StringUtils.isNotBlank(calendarVo.getSunShiftId())) {
-            map.put("7", calendarVo.getSunShiftId());
-        }
-        if (map.isEmpty()) {
-            return false;
-        }
+        List<String> dateList = calendarVo.getDateList();
+        List<MdcShiftSub> mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getShiftId, calendarVo.getShiftId()).eq(MdcShiftSub::getShiftSubStatus, "1"));
         List<MdcDeviceCalendar> calendarList = new ArrayList<>();
-        map.forEach((key, value) -> {
-            List<MdcShiftSub> mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper
-                    <MdcShiftSub>().eq(MdcShiftSub::getShiftId, value).eq(MdcShiftSub::getShiftSubStatus, "1"));
-            List<LocalDate> meetDayOfWeekLocalDates = getMeetDayOfWeekLocalDates(takeEffectDate, invalidDate, key);
-            if (!meetDayOfWeekLocalDates.isEmpty()) {
-                List<String> dates = meetDayOfWeekLocalDates.stream().map(localDate -> localDate.format(DateTimeFormatter.BASIC_ISO_DATE)).collect(Collectors.toList());
-                LambdaUpdateChainWrapper<MdcDeviceCalendar> lambdaUpdate = this.lambdaUpdate();
-                lambdaUpdate.in(MdcDeviceCalendar::getEffectiveDate, dates).in(MdcDeviceCalendar::getEqumentId, Arrays.asList(equipmentIdList));
-                lambdaUpdate.remove();
-                List<MdcDeviceCalendar> calendars = handleMdcDeviceCalendar(dates, equipmentIdList, mdcShiftSubList, key);
-                calendarList.addAll(calendars);
+        for (String equipmentId : equipmentIdList) {
+            for (String date : dateList) {
+                for (MdcShiftSub mdcShiftSub : mdcShiftSubList) {
+                    this.baseMapper.delete(new LambdaQueryWrapper<MdcDeviceCalendar>().eq(MdcDeviceCalendar::getEquipmentId, equipmentId).eq(MdcDeviceCalendar::getEffectiveDate, date));
+                    MdcDeviceCalendar mdcDeviceCalendar = new MdcDeviceCalendar();
+                    mdcDeviceCalendar.setEffectiveDate(date);
+                    mdcDeviceCalendar.setEquipmentId(equipmentId);
+                    mdcDeviceCalendar.setShiftId(mdcShiftSub.getShiftId());
+                    mdcDeviceCalendar.setShiftSubId(mdcShiftSub.getId());
+                    calendarList.add(mdcDeviceCalendar);
+                }
             }
-        });
+        }
         this.saveBatch(calendarList);
         return true;
     }
@@ -134,28 +108,18 @@
     /**
      * 鏌ヨ鐝埗鏁版嵁
      *
-     * @param equipmentid
+     * @param equipmentId
      * @param stringDates
      * @return
      */
     @Override
-    public List<MdcDeviceCalendarVo> listByEquipmentAndDate(String equipmentid, List<String> stringDates) {
+    public List<MdcDeviceCalendarVo> listByEquipmentAndDate(String equipmentId, List<String> stringDates) {
         List<MdcDeviceCalendarVo> result = new ArrayList<>();
         try {
-            //鏌ヨ榛樿鐝埗
-            List<MdcDeviceCalendarVo> acquiesceShift = this.baseMapper.findAcquiesceShift();
-
             for (String stringDate : stringDates) {
-                List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = this.baseMapper.listByEquipmentAndDate(equipmentid, stringDate);
+                List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = this.baseMapper.listByEquipmentAndDate(equipmentId, stringDate);
                 if (mdcDeviceCalendarVos != null && !mdcDeviceCalendarVos.isEmpty()) {
                     result.addAll(mdcDeviceCalendarVos);
-                } else {
-                    acquiesceShift.forEach(mdcDeviceCalendarVo -> {
-                        mdcDeviceCalendarVo.setEquipmentId(equipmentid);
-                        mdcDeviceCalendarVo.setEffectiveDate(stringDate);
-                    });
-                    // 璁剧疆榛樿鐝埗
-                    result.addAll(acquiesceShift);
                 }
             }
         } catch (Exception e) {
@@ -166,44 +130,99 @@
     }
 
     /**
-     * 鑾峰彇涓�娈垫椂闂磋寖鍥村唴绗﹀悎鏄熸湡鍑犵殑鏃ユ湡闆嗗悎
+     * 璁$畻瀹為檯鐝骇澶╂暟
      *
-     * @param startDate 寮�濮嬫椂闂�
-     * @param endDate   缁撴潫鏃堕棿
-     * @param workDate  鍛ㄥ嚑 1,2,3,4
+     * @param equipmentId
+     * @param validDate
+     * @return
      */
-    public static List<LocalDate> getMeetDayOfWeekLocalDates(LocalDate startDate, LocalDate endDate, String workDate) {
-
-        List<DayOfWeek> dayOfWeeks = Stream.of(workDate.split(","))
-                .map(Integer::valueOf)
-                .map(DayOfWeek::of)
-                .collect(Collectors.toList());
-
-        long distance = ChronoUnit.DAYS.between(startDate, endDate);
-
-        return Stream.iterate(startDate, d -> d.plusDays(1))
-                .limit(distance + 1)
-                .filter(localDate -> dayOfWeeks.contains(localDate.getDayOfWeek()))
-                .collect(Collectors.toList());
+    @Override
+    public BigDecimal computeActualWorkDayCount(String equipmentId, String validDate) {
+        validDate = validDate.replaceAll("-", "");
+        List<String> validDateList = this.baseMapper.computeActualWorkDayCount(equipmentId, validDate);
+        return new BigDecimal(validDateList.size());
     }
 
-    public List<MdcDeviceCalendar> handleMdcDeviceCalendar(List<String> dates, String[] equipment, List<MdcShiftSub> mdcShiftSubList, String weekNumber) {
-        List<MdcDeviceCalendar> ds = new ArrayList<>();
-        for (String date : dates) {
-            for (String equipmentId : equipment) {
-                for (MdcShiftSub temp : mdcShiftSubList) {
-                    MdcDeviceCalendar mdcDeviceCalendar = new MdcDeviceCalendar();
-                    if (org.apache.commons.lang.StringUtils.isNotEmpty(equipmentId)) {
-                        mdcDeviceCalendar.setEqumentId(equipmentId);
+    /**
+     * 鏌ヨ鐝鍒嗙被
+     *
+     * @param equipmentId
+     * @param validDate
+     * @return
+     */
+    @Override
+    public List<String> findShiftSort(String equipmentId, String validDate) {
+        validDate = validDate.replaceAll("-", "");
+        return this.baseMapper.findShiftSort(equipmentId, validDate);
+    }
+
+    /**
+     * 璁$畻鐝鏃堕棿
+     *
+     * @param equipmentId
+     * @param validDate
+     * @return
+     */
+    @Override
+    public BigDecimal computeShiftTimeCount(String equipmentId, String validDate) {
+        validDate = validDate.replaceAll("-", "");
+        Integer shiftCount = this.baseMapper.computeShiftTimeCount(equipmentId, validDate);
+        return new BigDecimal(shiftCount).multiply(new BigDecimal("8")).multiply(new BigDecimal("60"));
+    }
+
+    /**
+     * 鑷姩鐢熸垚璁惧宸ヤ綔鏃ュ巻
+     */
+    @Override
+    public void generateDeviceCalendar() {
+        // 鏆傚畾姣忓ぉ鏅氫笂11鐐规墽琛�
+        //鏌ヨ榛樿鐝埗
+        List<MdcDeviceCalendarVo> acquiesceShift = this.baseMapper.findAcquiesceShift();
+        // 鑾峰彇鏄庢棩鏃ユ湡
+        String localDate = LocalDate.now().plusDays(1).toString();
+        // 鑾峰彇璁惧鍒楄〃
+        List<MdcEquipment> equipmentList = mdcEquipmentService.list();
+        List<MdcDeviceCalendar> result = new ArrayList<>();
+        for (MdcEquipment mdcEquipment : equipmentList) {
+            List<MdcDeviceCalendar> list = super.list(new LambdaQueryWrapper<MdcDeviceCalendar>().eq(MdcDeviceCalendar::getEquipmentId, mdcEquipment.getEquipmentId()).eq(MdcDeviceCalendar::getEffectiveDate, localDate.replaceAll("-", "")));
+            if (list == null || list.isEmpty()) {
+                List<MdcVacationManagement> vacationManagementList = mdcVacationManagementService.list(new LambdaQueryWrapper<MdcVacationManagement>().eq(MdcVacationManagement::getEquipmentId, mdcEquipment.getEquipmentId()).eq(MdcVacationManagement::getVacationDate, localDate));
+                if (vacationManagementList == null || vacationManagementList.isEmpty()) {
+                    String effectiveDate = localDate.replaceAll("-", "");
+                    for (MdcDeviceCalendarVo mdcDeviceCalendarVo : acquiesceShift) {
+                        MdcDeviceCalendar mdcDeviceCalendar = new MdcDeviceCalendar();
+                        mdcDeviceCalendar.setEquipmentId(mdcEquipment.getEquipmentId());
+                        mdcDeviceCalendar.setEffectiveDate(effectiveDate);
+                        mdcDeviceCalendar.setShiftId(mdcDeviceCalendarVo.getShiftId());
+                        mdcDeviceCalendar.setShiftSubId(mdcDeviceCalendarVo.getShiftSubId());
+                        result.add(mdcDeviceCalendar);
                     }
-                    mdcDeviceCalendar.setShiftId(temp.getShiftId());
-                    mdcDeviceCalendar.setShiftSubId(temp.getId());
-                    mdcDeviceCalendar.setEffectiveDate(date);
-                    mdcDeviceCalendar.setWeekNumber(weekNumber);
-                    ds.add(mdcDeviceCalendar);
                 }
             }
         }
-        return ds;
+        if (!result.isEmpty()) {
+            super.saveBatch(result);
+        }
     }
+
+    @Override
+    public MdcDeviceCalendar getFirstData(String equipmentId) {
+        return this.baseMapper.getFirstData(equipmentId);
+    }
+
+    @Override
+    public List<MdcDeviceCalendarVo> listByEquipmentIdAndDate(String equipmentId, String date) {
+        List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = this.baseMapper.listByEquipmentAndDate(equipmentId, date);
+        if (mdcDeviceCalendarVos != null && !mdcDeviceCalendarVos.isEmpty()) {
+            for (MdcDeviceCalendarVo mdcDeviceCalendarVo : mdcDeviceCalendarVos) {
+                List<MdcEquipmentOvertime> list = mdcEquipmentOvertimeService.list(new LambdaQueryWrapper<MdcEquipmentOvertime>().eq(MdcEquipmentOvertime::getEquipmentId, mdcDeviceCalendarVo.getEquipmentId()).eq(MdcEquipmentOvertime::getTheDate, mdcDeviceCalendarVo.getEndDate()));
+                if (list != null && !list.isEmpty()) {
+                    mdcDeviceCalendarVo.setOvertimeStartTime(list.get(0).getStartTime());
+                    mdcDeviceCalendarVo.setOvertimeEndTime(list.get(0).getEndTime());
+                }
+            }
+        }
+        return mdcDeviceCalendarVos;
+    }
+
 }

--
Gitblit v1.9.3