Explorar o código

优化模板复制工作历

zhangqiankun %!s(int64=3) %!d(string=hai) anos
pai
achega
264d395996

+ 2 - 0
src/main/java/com/persagy/WorkCalendarApplication.java

@@ -7,7 +7,9 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 import com.persagy.common.annotation.EnableControllerLog;
+import com.persagy.common.annotation.EnableIdGenerator;
 
+@EnableIdGenerator
 @EnableControllerLog
 @EnableDiscoveryClient
 @SpringBootApplication

+ 0 - 18
src/main/java/com/persagy/calendar/config/CustomIdentifierGenerator.java

@@ -1,18 +0,0 @@
-package com.persagy.calendar.config;
-
-import org.springframework.stereotype.Component;
-
-import com.persagy.common.config.DefaultIdentifierGenerator;
-
-/**
- * @version 
- * @description 
- * @company persagy
- * @author zhangqiankun
- * @since 2020年9月29日:	下午12:38:21
- */
-
-@Component
-public class CustomIdentifierGenerator extends DefaultIdentifierGenerator {
-	
-}

+ 4 - 3
src/main/java/com/persagy/calendar/controller/WorkCalendarController.java

@@ -99,16 +99,17 @@ public class WorkCalendarController {
 			updateVO.setGroupCode(defaultGroupCode);
 		}
     	
+    	String oldProjectId = updateVO.getProjectId();
     	if (StringUtil.isBlank(updateVO.getFromId())) {
 			return ResponseUtil.errorResult(ResponseCode.A0400.getCode(), "工作历来源ID不可为空");
 		}
     	// 判断原有的工作历信息是否存在
-		WorkCalendar workCalendar = workCalendarService.getById(updateVO.getFromId(), updateVO.getGroupCode(), updateVO.getProjectId());
+		WorkCalendar workCalendar = workCalendarService.getById(updateVO.getFromId(), updateVO.getGroupCode(), oldProjectId);
 		if (workCalendar == null) {
 			return ResponseUtil.errorResult(ResponseCode.C0320.getCode(), "原工作历信息不存在");
 		}
 		// 验证projectId和name是否联合唯一
-		boolean result = workCalendarService.checkProjetcIdAndName(null, updateVO.getProjectId(), updateVO.getGroupCode(), updateVO.getCalendarName());
+		boolean result = workCalendarService.checkProjetcIdAndName(null, oldProjectId, updateVO.getGroupCode(), updateVO.getCalendarName());
 		if (!result) {
 			return ResponseUtil.errorResult(ResponseCode.C0341.getCode(), "工作历名称已存在");
 		}
@@ -119,7 +120,7 @@ public class WorkCalendarController {
 		if (StringUtil.isNotBlank(updateVO.getNewProjectId())) {
 			workCalendar.setProjectId(updateVO.getNewProjectId());
 		}
-    	return this.workCalendarHandler.createWorkCalendarFromId(workCalendar, updateVO.getFromId(), workCalendar.getProjectId());
+    	return this.workCalendarHandler.createWorkCalendarFromId(workCalendar, updateVO.getFromId(), oldProjectId);
     }
     
     /**

+ 26 - 23
src/main/java/com/persagy/calendar/handle/WorkCalendarDateHandler.java

@@ -246,7 +246,7 @@ public class WorkCalendarDateHandler {
 			}
 		}
 		
-		resultList.forEach(calendarDate -> calendarDate.setId(IdGenerator.getUUID()));
+		resultList.forEach(calendarDate -> calendarDate.setId(IdGenerator.getSnowIdStr(WorkCalendarConstant.WORK_CALENDAR_DATE_ID_PREFIX)));
 		return resultList;
 	}
 	
@@ -495,9 +495,12 @@ public class WorkCalendarDateHandler {
 				throw new BusinessException("作息日期不合法,必须大于等于当日");
 			}
 			// 判断工作历类型是否存在
-			WorkCalendar calendar = this.workCalendarService.getById(batchInfo.getCalendarId(), createVO.getGroupCode(), createVO.getProjectId());
-			if (calendar == null) {
-				throw new BusinessException("工作历类型不存在");
+			WorkCalendar calendar = null;
+			if (dictTypeLevel == 2) {
+				calendar = this.workCalendarService.getById(batchInfo.getCalendarId(), createVO.getGroupCode(), createVO.getProjectId());
+				if (calendar == null) {
+					throw new BusinessException("工作历类型不存在");
+				}
 			}
 			
 			WorkCalendarDate calendarDate = new WorkCalendarDate();
@@ -508,13 +511,11 @@ public class WorkCalendarDateHandler {
 				throw new BusinessException("当天已存在相同类型额定义,不可重复添加");
 			}
 			calendarDate.setGroupCode(createVO.getGroupCode());
-			calendarDate.setCalendarName(calendar.getCalendarName());
-			calendarDate.setCalendarDesc(calendar.getCalendarDesc());
+			calendarDate.setCalendarName(calendar == null ? null : calendar.getCalendarName());
+			calendarDate.setCalendarDesc(calendar == null ? null : calendar.getCalendarDesc());
 			calendarDate.setProjectId(dictTypeLevel == 0 ? "0" : createVO.getProjectId());
 			if (dictTypeLevel != 2) {
 				calendarDate.setCalendarId("0");
-				calendarDate.setCalendarName(null);
-				calendarDate.setCalendarDesc(null);
 			}
 			calendarDate.setUpdateUser(createVO.getUserId());
 			calendarDate.setCustomFlag(WorkCalendarConstant.CUSTOM_CALENDAR_DATE_YES);
@@ -610,37 +611,39 @@ public class WorkCalendarDateHandler {
 		String format = DateUtil.format(now, DateUtil.FORMAT_DATE_YYYYMMDD);
 		Integer current = Integer.valueOf(format);
 		for (WorkCalendarDateUpdateVO batchInfo : batchInfos) {
-			int dictTypeLevel = this.workCalendarDictService.getDictTypeLevel(updateVO.getGroupCode(), batchInfo.getDictType());
-			
 			Integer workDate = Integer.valueOf(batchInfo.getWorkDate());
 			if (workDate < current) {
 				throw new BusinessException("作息日期不合法,必须大于等于当日");
 			}
+			// 验证是否存在
+			WorkCalendarDate temp = this.workCalendarDateService.getById(batchInfo.getId());
+			if (temp == null || !WorkCalendarConstant.CUSTOM_CALENDAR_DATE_YES.equals(temp.getCustomFlag())) {
+				throw new BusinessException("当天不存在自定义的作息时间信息");
+			}
+			int dictTypeLevel = this.workCalendarDictService.getDictTypeLevel(updateVO.getGroupCode(), batchInfo.getDictType());
+			
 			// 判断工作历类型是否存在
-			WorkCalendar calendar = this.workCalendarService.getById(batchInfo.getCalendarId(), updateVO.getGroupCode(), updateVO.getProjectId());
-			if (calendar == null) {
-				throw new BusinessException("工作历类型不存在");
+			WorkCalendar calendar = null;
+			if (dictTypeLevel == 2) {
+				calendar = this.workCalendarService.getById(batchInfo.getCalendarId(), updateVO.getGroupCode(), updateVO.getProjectId());
+				if (calendar == null) {
+					throw new BusinessException("工作历类型不存在");
+				}
 			}
 			
 			WorkCalendarDate calendarDate = new WorkCalendarDate();
 			BeanUtils.copyProperties(batchInfo, calendarDate);
-			// 验证数据有效性
-			result = this.workCalendarDateService.checkWorkDateValid(calendarDate, dictTypeLevel);
-			if (!result) {
-				throw new BusinessException("当天已存在相同类型的定义,不可重复添加");
-			}
+			calendarDate.setCustomFlag(WorkCalendarConstant.CUSTOM_CALENDAR_DATE_YES);
+			
 			calendarDate.setGroupCode(updateVO.getGroupCode());
-			calendarDate.setCalendarName(calendar.getCalendarName());
-			calendarDate.setCalendarDesc(calendar.getCalendarDesc());
+			calendarDate.setCalendarName(calendar == null ? null : calendar.getCalendarName());
+			calendarDate.setCalendarDesc(calendar == null ? null : calendar.getCalendarDesc());
 			calendarDate.setProjectId(dictTypeLevel == 0 ? "0" : updateVO.getProjectId());
 			if (dictTypeLevel != 2) {
 				calendarDate.setCalendarId("0");
-				calendarDate.setCalendarName(null);
-				calendarDate.setCalendarDesc(null);
 			}
 			
 			calendarDate.setUpdateUser(updateVO.getUserId());
-			calendarDate.setCustomFlag(WorkCalendarConstant.CUSTOM_CALENDAR_DATE_YES);
 			result = this.workCalendarDateService.updateById(calendarDate);
 			if (!result) {
 				throw new BusinessException("自定义工作历作息时间添加失败");

+ 6 - 3
src/main/java/com/persagy/calendar/handle/WorkCalendarHandler.java

@@ -106,7 +106,10 @@ public class WorkCalendarHandler {
 	    	}
 		}
     	// 3.复制规则信息
-    	List<WorkCalendarRule> ruleList = this.workCalendarRuleService.queryRuleByCalendarId(workCalendar.getGroupCode(), fromId, workCalendar.getProjectId(), null);
+    	QueryWrapper<WorkCalendarRule> queryWrapper = new WorkCalendarRule.Builder().createQueryWrapper().groupCodeEq(workCalendar.getGroupCode())
+    			.calendarIdOrZore(fromId).projectIdEq(oldProjectId, null)
+    			.delFlagEq(WorkCalendarConstant.WORK_CALENDAR_DEL_FLAG_NOR).builderQueryWrapper();
+    	List<WorkCalendarRule> ruleList = this.workCalendarRuleService.list(queryWrapper);
 		if (result && CollectionUtil.isNotEmpty(ruleList)) {
 			for (WorkCalendarRule workCalendarRule : ruleList) {
 				if (isSameProjectId && "0".equals(workCalendarRule.getCalendarId())) {
@@ -146,7 +149,7 @@ public class WorkCalendarHandler {
 	 */
     private void copyCustomCalendarDate(WorkCalendar workCalendar, String fromId, String oldProjectId) {
     	// 先获取原项目、原工作历下的自定义作息时间
-    	QueryWrapper<WorkCalendarDate> queryWrapper = new WorkCalendarDate.Builder().createQueryWrapper().calendarIdEq(fromId, null)
+    	QueryWrapper<WorkCalendarDate> queryWrapper = new WorkCalendarDate.Builder().createQueryWrapper().calendarIdOrZore(fromId)
     			.projectIdEq(oldProjectId, null).customFlagEq(WorkCalendarConstant.CUSTOM_CALENDAR_DATE_YES).builderQueryWrapper();
     	List<WorkCalendarDate> calendarDates = this.workCalendarDateService.list(queryWrapper);
     	if (CollectionUtil.isNotEmpty(calendarDates)) {
@@ -203,7 +206,7 @@ public class WorkCalendarHandler {
     	
     	// 获取原有的字典数据
     	LambdaQueryWrapper<WorkCalendarDict> queryWrapper = new WorkCalendarDict.BuilderQueryWrapper().groupCodeEq(workCalendar.getGroupCode())
-    			.calendarIdEq(fromId, isSameProjectId ? null : 1).builder();
+    			.projectIdEq(oldProjectId, null).calendarIdEq(fromId, isSameProjectId ? null : 1).builder();
     	List<WorkCalendarDict> calendarDicts = this.workCalendarDictService.list(queryWrapper);
     	if (CollectionUtil.isNotEmpty(calendarDicts)) {
     		calendarDicts.forEach(calendarDict -> {

+ 17 - 0
src/main/java/com/persagy/calendar/pojo/dto/WorkCalendarDate.java

@@ -165,6 +165,23 @@ public class WorkCalendarDate extends BaseEntity<WorkCalendarDate> {
 			}
 			return this;
 		}
+		
+		public Builder calendarIdOrZore(String calendarId) {
+			if (StringUtil.isNotBlank(calendarId)) {
+				if (updateWrapper != null) {
+					updateWrapper.and(wrapper -> wrapper
+						.eq("CALENDAR_ID", calendarId)
+						.or()
+						.eq("CALENDAR_ID", "0"));
+				} else {
+					queryWrapper.and(wrapper -> wrapper
+							.eq("CALENDAR_ID", calendarId)
+							.or()
+							.eq("CALENDAR_ID", "0"));
+				}
+			}
+			return this;
+		}
 
 		public Builder calendarNameEq(String calendarName) {
 			if (StringUtil.isNotBlank(calendarName)) {

+ 17 - 0
src/main/java/com/persagy/calendar/pojo/dto/WorkCalendarRule.java

@@ -151,6 +151,23 @@ public class WorkCalendarRule extends BaseEntity<WorkCalendarRule> {
 			}
 			return this;
 		}
+		
+		public Builder calendarIdOrZore(String calendarId) {
+			if (StringUtil.isNotBlank(calendarId)) {
+				if (updateWrapper != null) {
+					updateWrapper.and(wrapper -> wrapper
+						.eq("CALENDAR_ID", calendarId)
+						.or()
+						.eq("CALENDAR_ID", "0"));
+				} else {
+					queryWrapper.and(wrapper -> wrapper
+							.eq("CALENDAR_ID", calendarId)
+							.or()
+							.eq("CALENDAR_ID", "0"));
+				}
+			}
+			return this;
+		}
 
 		public Builder dictTypeEq(String dictType) {
 			if (StringUtil.isNotBlank(dictType)) {

+ 1 - 1
src/main/java/com/persagy/calendar/pojo/vo/WorkCalendarDateUpdateVO.java

@@ -25,7 +25,7 @@ public class WorkCalendarDateUpdateVO {
 	@ApiModelProperty(value = "作息时间ID", required = true)
 	private String id; // 作息时间ID
 	
-	@NotBlank(message = "工作历ID,不可为空")
+	//@NotBlank(message = "工作历ID,不可为空")
 	@ApiModelProperty(value = "工作历ID", required = true)
 	private String calendarId; // 工作历ID