zhangqiankun 3 년 전
부모
커밋
52945be221

+ 10 - 1
src/main/java/com/persagy/calendar/controller/CommonController.java

@@ -22,11 +22,14 @@ import com.persagy.calendar.pojo.vo.DictCreateVO;
 import com.persagy.calendar.pojo.vo.DictQueryVO;
 import com.persagy.calendar.pojo.vo.WorkCalendarDateQueryVO;
 import com.persagy.calendar.service.IWorkCalendarDictService;
+import com.persagy.common.utils.DateUtil;
 import com.persagy.common.utils.ResponseResult;
 import com.persagy.common.utils.ResponseUtil;
 import com.persagy.common.utils.StringUtil;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateTime;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -55,9 +58,15 @@ public class CommonController {
     @ApiOperation(value = "立即解析规则信息")
     @RequestMapping(value = "handleParseCalendarRule")
     public ResponseResult handleParseCalendarRule(@RequestBody @Validated WorkCalendarDateQueryVO queryVO) {
-    	if ("pj1111111111".equals(queryVO.getProjectId())) {
+    	if ("Pj1111111111".equalsIgnoreCase(queryVO.getProjectId())) {
     		queryVO.setProjectId(null);
 		}
+    	// 相等时,往前偏移一天,临时方案,后续可删除,在xxl-job更新后
+    	if (queryVO.getWorkDateStart().equals(queryVO.getWorkDateEnd())) {
+    		DateTime dateStart = DateUtil.parse(queryVO.getWorkDateStart(), DateUtil.FORMAT_DATE_YYYYMMDD);
+    		dateStart.offset(DateField.DAY_OF_YEAR, -1);
+    		queryVO.setWorkDateStart(dateStart.toString(DateUtil.FORMAT_DATE_YYYYMMDD));
+		}
     	boolean result = this.workCalendarDateHandler.handleParseCalendarRule(queryVO);
 		return result ? ResponseUtil.successResult("执行成功") : ResponseUtil.errorResult("执行失败");
     }

+ 34 - 8
src/main/java/com/persagy/calendar/handle/WorkCalendarDateHandler.java

@@ -155,7 +155,7 @@ public class WorkCalendarDateHandler {
     }
     
     /**
-     * 获取此段日期内,所有的历史数据,包含自定义的
+     * 获取此段日期内,所有的历史数据,包含自定义的,同一天存在自定义和非自定义的,将剔除非自定义的数据
      * 
      * @param resultMap	key-日期,value-此日对应的作息时间集合,包含未来自定义的
      * @param existsCustom key-项目+日期+type+code,value-true存在自定义信息,false 不存在自定义信息
@@ -164,20 +164,21 @@ public class WorkCalendarDateHandler {
 		List<WorkCalendarDate> dates = this.selectWorkCalendarDateList(queryVO);
 		for (WorkCalendarDate calendarDate : dates) {
 			// 是否存在自定义,存在true就不在更新
-			String existsKey = calendarDate.getCalendarId() + calendarDate.getProjectId() + calendarDate.getWorkDate() + calendarDate.getDictType() + (StringUtil.isBlank(calendarDate.getDictCode()) ? "" : calendarDate.getDictCode());
+			String existsKey = this.getCustomKey(calendarDate);
 			boolean exists = WorkCalendarConstant.CUSTOM_CALENDAR_DATE_YES.equals(calendarDate.getCustomFlag());
 			if (!BooleanUtil.isTrue(existsCustom.get(existsKey))) {
 				existsCustom.put(existsKey, exists);
 			}
 			// 将自定义的或历史的,按照日期,分组
 			if (resultMap != null) {
+				if (BooleanUtil.isTrue(existsCustom.get(existsKey))) {
+					resultMap.put(calendarDate.getWorkDate(), Lists.newArrayList(calendarDate));
+					continue;
+				}
 				if (resultMap.containsKey(calendarDate.getWorkDate())) {
-					List<WorkCalendarDate> list = resultMap.get(calendarDate.getWorkDate());
-					list.add(calendarDate);
+					resultMap.get(calendarDate.getWorkDate()).add(calendarDate);
 				} else {
-					List<WorkCalendarDate> list = new ArrayList<WorkCalendarDate>();
-					list.add(calendarDate);
-					resultMap.put(calendarDate.getWorkDate(), list);
+					resultMap.put(calendarDate.getWorkDate(), Lists.newArrayList(calendarDate));
 				}
 			}
 		}
@@ -255,7 +256,7 @@ public class WorkCalendarDateHandler {
 		if (indexOf > 0) {
 			dictCode = dictCode.substring(0, indexOf - 1);
 		}
-		String existsKey = rule.getCalendarId() + rule.getProjectId() + workDate + rule.getDictType() + (StringUtil.isBlank(dictCode) ? "" : dictCode);
+		String existsKey = this.getCustomKey(rule, workDate, dictCode); 
 		// 优先判断当日是否存在同类型 同编码的自定义作息时间
 		if (existsCustom != null && BooleanUtil.isTrue(existsCustom.get(existsKey))) {
 			return;
@@ -660,4 +661,29 @@ public class WorkCalendarDateHandler {
 		return true;
 	}
 	
+	/**
+	 * 判断是否存在自动作息时间的依据key
+	 * 
+	 * @param calendarDate
+	 * @return
+	 */
+	public String getCustomKey(WorkCalendarDate calendarDate) {
+		String customKey = calendarDate.getCalendarId() + calendarDate.getProjectId() + calendarDate.getWorkDate() + calendarDate.getDictType() + 
+					(StringUtil.isBlank(calendarDate.getDictCode()) ? "" : calendarDate.getDictCode());
+		return customKey;
+	}
+	
+	/**
+	 * 判断是否存在自动作息时间的依据key
+	 * 
+	 * @param rule
+	 * @param workDate
+	 * @param dictCode
+	 * @return
+	 */
+	public String getCustomKey(WorkCalendarRule rule, String workDate, String dictCode) {
+		String customKey = rule.getCalendarId() + rule.getProjectId() + workDate + rule.getDictType() + (StringUtil.isBlank(dictCode) ? "" : dictCode);
+		return customKey;
+	}
+	
 }

+ 1 - 1
src/main/java/com/persagy/calendar/handle/WorkCalendarRuleHandler.java

@@ -69,7 +69,7 @@ public class WorkCalendarRuleHandler {
 					workCalendarRule.setId(ruleId);
 					result = workCalendarRuleService.updateWorkCalendarRule(workCalendarRule);
 					if (!result) {
-						throw new BusinessException("工作历规则信息添加失败");
+						throw new BusinessException("工作历规则信息保存失败");
 					}
 					calendarIds.add(rule.getCalendarId());
 					continue;

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

@@ -61,5 +61,5 @@ public class WorkCalendarDateQueryVO {
 	
 	@ApiModelProperty(value = "对象ID")
 	private String objId; 		// 对象D 
-
+	
 }

+ 20 - 0
src/main/java/com/persagy/calendar/service/impl/WorkCalendarRuleServiceImpl.java

@@ -1,5 +1,6 @@
 package com.persagy.calendar.service.impl;
 
+import java.util.Date;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,10 +11,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
 import com.persagy.calendar.constant.WorkCalendarConstant;
+import com.persagy.calendar.mapper.WorkCalendarDateMapper;
 import com.persagy.calendar.mapper.WorkCalendarRuleMapper;
+import com.persagy.calendar.pojo.dto.WorkCalendarDate;
 import com.persagy.calendar.pojo.dto.WorkCalendarRule;
 import com.persagy.calendar.pojo.dto.WorkCalendarRule.Builder;
 import com.persagy.calendar.service.IWorkCalendarRuleService;
+import com.persagy.common.utils.DateUtil;
 import com.persagy.common.utils.StringUtil;
 import com.persagy.db.service.impl.SuperServiceImpl;
 
@@ -32,6 +36,9 @@ public class WorkCalendarRuleServiceImpl extends SuperServiceImpl<WorkCalendarRu
 	
 	@Autowired
 	private WorkCalendarRuleMapper workCalendarRuleMapper;
+	
+	@Autowired
+	private WorkCalendarDateMapper workCalendarDateMapper;
  	
 	@Override
 	public List<WorkCalendarRule> queryRuleByCalendarId(String calendarId, String projectId) {
@@ -108,11 +115,24 @@ public class WorkCalendarRuleServiceImpl extends SuperServiceImpl<WorkCalendarRu
 			updateWrapper = builder.idEq(id).delFlagEq(WorkCalendarConstant.WORK_CALENDAR_DEL_FLAG_NOR)
 					.builderUpdateWrapper();
 			result = workCalendarRuleMapper.delete(updateWrapper);
+			if (SqlHelper.retBool(result)) {
+				// 删除此工作历规则下当天的非自定义的作息时间数据
+				 QueryWrapper<WorkCalendarDate> wrapper = new WorkCalendarDate.Builder().createQueryWrapper().ruleIdEq(id).dictTypeEq(dictType)
+						 .workDateEq(DateUtil.format(new Date(), DateUtil.FORMAT_DATE_YYYYMMDD)).builderQueryWrapper();
+				 result = this.workCalendarDateMapper.delete(wrapper);
+			}
 		} else {
 	    	updateWrapper = builder.calendarIdEq(calendarId).dictTypeEq(dictType)
 	    			.delFlagEq(WorkCalendarConstant.WORK_CALENDAR_DEL_FLAG_NOR).builderUpdateWrapper();
 			result = workCalendarRuleMapper.delete(updateWrapper);
+			if (SqlHelper.retBool(result)) {
+				// 删除此工作历规则下当天的非自定义的作息时间数据
+				 QueryWrapper<WorkCalendarDate> wrapper = new WorkCalendarDate.Builder().createQueryWrapper().calendarIdEq(calendarId)
+						 .dictTypeEq(dictType).workDateEq(DateUtil.format(new Date(), DateUtil.FORMAT_DATE_YYYYMMDD)).builderQueryWrapper();
+				 result = this.workCalendarDateMapper.delete(wrapper);
+			}
 		}
+		
 		return SqlHelper.retBool(result);
 	}