From e8ed1a91c77ab62a924f12acd55777f227bacd7e Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期五, 21 十一月 2025 17:15:17 +0800
Subject: [PATCH] 工位组删除后,其下工位移动到默认组
---
smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/impl/CalendarServiceImpl.java | 107 +++++++++++++++++++++++++++++++++++++----------------
1 files changed, 74 insertions(+), 33 deletions(-)
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/impl/CalendarServiceImpl.java b/smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/impl/CalendarServiceImpl.java
index de23526..27a9438 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/impl/CalendarServiceImpl.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/modules/smis/service/impl/CalendarServiceImpl.java
@@ -10,6 +10,7 @@
import java.time.temporal.TemporalUnit;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
@@ -30,7 +31,7 @@
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
@@ -94,6 +95,7 @@
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
@Service
public class CalendarServiceImpl extends ServiceImpl<CalendarMapper, ProductionCalendar> implements ICalendarService {
@@ -114,6 +116,9 @@
@Transactional(rollbackFor = {Exception.class})
public ProductionCalendar saveCalendar(CalendarSaveVO calendarSaveVO) {
checkCalendar(calendarSaveVO, AuthUtil.getTenantId());
+
+ checkDateDTOList(calendarSaveVO.getDateDTOList());
+
ProductionCalendar productionCalendar = ProductionCalendarConvert.INSTANCE.conver(calendarSaveVO);
save(productionCalendar);
saveCalendarDayTime(calendarSaveVO.getDateDTOList(), productionCalendar);
@@ -130,13 +135,48 @@
return productionCalendar;
}
+ @Transactional
@Override
public ProductionCalendar updateCalendar(CalendarUpdateVO calendarUpdateVO) {
+
+ checkDateDTOList(calendarUpdateVO.getDateDTOList());
+
this.calendarDayService.deleteByCalendarId(calendarUpdateVO.getId());
this.calendarDaytimeService.deleteByCalendarId(calendarUpdateVO.getId());
ProductionCalendar calendar = getById(calendarUpdateVO.getId());
updateCalendarDayTime(calendarUpdateVO.getDateDTOList(), calendar);
return calendar;
+ }
+
+ /**
+ * 妫�鏌ュ叆鍙傛棩鏈熷垪琛ㄧ殑閲嶅鏁版嵁锛屾湁閲嶅鍒欐姏鍑洪敊璇俊鎭�
+ * @param dateDTOList
+ */
+ void checkDateDTOList(List<CalendarDateDTO> dateDTOList) {
+ List<LocalDate> dupList = dupulicateDate(dateDTOList);
+ if(!dupList.isEmpty()) {
+ String msg = StringUtils.join(dupList.stream().map(dt -> dt.format(DateTimeFormatter.ISO_DATE)).collect(Collectors.toList()), ",");
+ throw new ServiceException("鏃ユ湡鏁版嵁閲嶅锛�"+msg);
+ }
+ }
+ /***
+ * 鑾峰彇dateDTOList閲岄潰閲嶅鐨勬暟鎹紙鏍规嵁鏃ユ湡锛夛紝鏃ユ湡涓�澶╁彧鏈変竴鏉�
+ * @param dateDTOList
+ * @return
+ */
+ List<LocalDate> dupulicateDate(List<CalendarDateDTO> dateDTOList) {
+ if(ObjectUtil.isEmpty(dateDTOList)) {
+ return Collections.emptyList();
+ }
+ List<LocalDate> dupList = new ArrayList<>();
+
+ Map<LocalDate, List<CalendarDateDTO>> map = dateDTOList.stream().collect(Collectors.groupingBy(CalendarDateDTO::getCalendarDate));
+ map.forEach((date,dtoList) -> {
+ if(dtoList.size()>1) {
+ dupList.add(date);
+ }
+ });
+ return dupList;
}
private void saveCalendarDayTime(List<CalendarDateDTO> dateDTOList, ProductionCalendar productionCalendar) {
@@ -258,52 +298,53 @@
}
private void updateCalendarDayTime(List<CalendarDateDTO> dateDTOList, ProductionCalendar calenadar) {
-
+ final LocalDate localDateNow = LocalDate.now();
Long calendarId = calenadar.getId();
Integer year = calenadar.getYear();
- Integer currentYear = Integer.valueOf(LocalDate.now().getYear());
- Set<LocalDate> dateList = dateDTOList.stream().filter(c -> {
- return !Func.isNull(c.getModelId()) && Func.isNull(c.getOffDayId());
- }).map((v0) -> {
- return v0.getCalendarDate();
- }).collect(Collectors.toSet());
- Set<LocalDate> offDay = dateDTOList.stream().filter(c2 -> {
- return !Func.isNull(c2.getOffDayId());
- }).map((v0) -> {
- return v0.getCalendarDate();
- }).collect(Collectors.toSet());
+ Integer currentYear = localDateNow.getYear();
+
+ //鎻愬彇鍑虹彮鍒秈d涓嶆槸null涓斾笉鏄紤鎭棩鐨� 鏃ユ湡
+ Set<LocalDate> dateList = dateDTOList.stream().filter(c -> (!Func.isNull(c.getModelId()) && Func.isNull(c.getOffDayId()))).map(CalendarDateDTO::getCalendarDate).collect(Collectors.toSet());
+
+ //鎻愬彇鎵�鏈変负浼戞伅鏃ョ殑鏃ユ湡
+ /**/
+ Set<LocalDate> offDay = dateDTOList.stream().filter(c -> !Func.isNull(c.getOffDayId())).map(CalendarDateDTO::getCalendarDate).collect(Collectors.toSet());
+
+ //鍒濆鍖栨渶缁堣淇濆瓨鐨刣ay鍜宒aytime鍒楄〃锛岀瓑寰呭悗闈唬鐮佸~鍏�
List<ProductionCalendarDaytime> productionCalendarDaytimeList = new ArrayList<>();
List<ProductionCalendarDay> productionCalendarDayList = new ArrayList<>();
- List<Long> modelIds = dateDTOList.stream().map((v0) -> {
- return v0.getModelId();
- }).distinct().collect(Collectors.toList());
+
+ //鎻愬彇鎵�鏈夌彮鍒秈d骞跺幓閲�
+ List<Long> modelIds = dateDTOList.stream().map(CalendarDateDTO::getModelId).distinct().collect(Collectors.toList());
+
Map<Long, ShiftVO> shiftDetailMap = this.shiftModelService.getShiftDetail(modelIds);
Snowflake snowflake = IdUtil.createSnowflake(1L, 1L);
+ //鏌ヨ浠婂ぉ鐨刣aytime鏁版嵁鍒楄〃
List<ProductionCalendarDaytime> todayDateTimeList = this.calendarDaytimeService.list(new QueryWrapper<ProductionCalendarDaytime>().lambda()
- .eq(ProductionCalendarDaytime::getCalendarDate, LocalDate.now())
+ .eq(ProductionCalendarDaytime::getCalendarDate, localDateNow)
.eq(ProductionCalendarDaytime::getCalendarId, calendarId)
.orderByAsc(ProductionCalendarDaytime::getStartTime));
List<ProductionCalendarDaytime> curProductionCalendarDayTimeList = new ArrayList<>();
- LocalDate lastDayOfYear = LocalDateTimeUtils.getLastDayOfYear(LocalDate.now());
- long difference = year.intValue() == LocalDate.now().getYear() ? LocalDateTimeUtils.getDifference(LocalDate.now(), lastDayOfYear).intValue() : LocalDateTimeUtils.getDayOfYear(year).intValue() - 1;
- long j = 0;
- while (true) {
- long i = j;
- if (i <= difference) {
- LocalDate needHandleDate = year.equals(currentYear) ? LocalDate.now().plus(difference - i, ChronoUnit.DAYS) : LocalDate.of(year.intValue(), 1, 1).plus(difference - i, ChronoUnit.DAYS);// (TemporalUnit) ChronoUnit.DAYS
- LocalDate nextNeedHandleDate = needHandleDate.plus(1L, (TemporalUnit) ChronoUnit.DAYS);
- buildCurrentDayTime(dateDTOList, calendarId, year, dateList, offDay, productionCalendarDaytimeList, productionCalendarDayList, shiftDetailMap, snowflake, curProductionCalendarDayTimeList, needHandleDate);
- handleConflietDayTime(calenadar, year, productionCalendarDaytimeList, todayDateTimeList, curProductionCalendarDayTimeList, difference, i, needHandleDate, nextNeedHandleDate);
- j = i + 1;
- } else {
- this.calendarDayService.saveBatchDay(productionCalendarDayList);
- this.calendarDaytimeService.saveBatchDaytime(productionCalendarDaytimeList);
- return;
- }
+ LocalDate lastDayOfYear = LocalDateTimeUtils.getLastDayOfYear(localDateNow);//浠婂勾鏈�鍚庝竴澶�
+ //鏃ュ巻鐨勫勾浠戒笌褰撳墠骞翠唤鐩稿悓锛屽垯杩斿洖锛� 浠婂勾鏈�鍚庝竴澶�-浠婂ぉ 鐨勫ぉ鏁板樊.鍚﹀垯杩斿洖:涓�鏁村勾鐨勫ぉ鏁�-1
+ //difference 涔熷氨鏄疄闄呴渶瑕佹帓鐝殑鎬诲ぉ鏁�
+ long difference = year.intValue() == localDateNow.getYear() ? LocalDateTimeUtils.getDifference(localDateNow, lastDayOfYear) : LocalDateTimeUtils.getDayOfYear(year) - 1;
+ //璁$畻骞剁敓鎴恉ay鍜宒aytime鏁版嵁
+ for (long i = 0; i < difference; i++) {//淇敼i<=difference 鏀逛负i<difference锛屼笅闈唬鐮乨ifference - i鍦ㄦ渶鍚庝竴娆″惊鐜痙ifference - i=0,涔熷氨鏄綋澶╀簡锛屽綋澶╂槸涓嶈兘鎺掔彮鐨勶紝鑰屼笖浼氶�犳垚day鏁版嵁閲嶅
+ //鑰冭檻LocalDate.now()瀹炰緥鍖栵紝plus鏀逛负plusDays
+ //LocalDate needHandleDate = year.equals(currentYear) ? localDateNow.plus(difference - i, ChronoUnit.DAYS) : LocalDate.of(year, 1, 1).plus(difference - i, ChronoUnit.DAYS);
+ LocalDate needHandleDate = year.equals(currentYear) ? localDateNow.plusDays(difference - i) : LocalDate.of(year, 1, 1).plusDays(difference - i);
+ //LocalDate nextNeedHandleDate = needHandleDate.plus(1, ChronoUnit.DAYS);
+ LocalDate nextNeedHandleDate = needHandleDate.plusDays(1);
+ buildCurrentDayTime(dateDTOList, calendarId, year, dateList, offDay, productionCalendarDaytimeList, productionCalendarDayList, shiftDetailMap, snowflake, curProductionCalendarDayTimeList, needHandleDate);
+ handleConflietDayTime(calenadar, year, productionCalendarDaytimeList, todayDateTimeList, curProductionCalendarDayTimeList, difference, i, needHandleDate, nextNeedHandleDate);
}
+ //淇濆瓨day鍜宒aytime鏁版嵁
+ this.calendarDayService.saveBatchDay(productionCalendarDayList);
+ this.calendarDaytimeService.saveBatchDaytime(productionCalendarDaytimeList);
}
private void handleConflietDayTime(ProductionCalendar calenadar, Integer year, List<ProductionCalendarDaytime> productionCalendarDaytimeList, List<ProductionCalendarDaytime> todayDateTimeList, List<ProductionCalendarDaytime> curProductionCalendarDayTimeList, long difference, long i, LocalDate needHandleDate, LocalDate nextNeedHandleDate) {
--
Gitblit v1.9.3