Kaynağa Gözat

新增数据转换接口

zhangqiankun 3 yıl önce
ebeveyn
işleme
68158d46df

+ 25 - 0
src/main/java/com/persagy/calendar/controller/CommonController.java

@@ -14,9 +14,12 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.common.collect.Lists;
 import com.persagy.calendar.constant.WorkCalendarConstant;
+import com.persagy.calendar.handle.CommonHandler;
 import com.persagy.calendar.handle.WorkCalendarDateHandler;
+import com.persagy.calendar.pojo.dto.WorkCalendar;
 import com.persagy.calendar.pojo.dto.WorkCalendarDate;
 import com.persagy.calendar.pojo.dto.WorkCalendarDict;
 import com.persagy.calendar.pojo.dto.WorkCalendarRule;
@@ -25,6 +28,7 @@ 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.calendar.service.IWorkCalendarService;
 import com.persagy.common.enums.ResponseCode;
 import com.persagy.common.exception.BusinessException;
 import com.persagy.common.utils.DateUtil;
@@ -55,6 +59,12 @@ public class CommonController {
 	@Value("${integrated.calendar.group-code:BR}")
 	private String defaultGroupCode;
 	
+    @Autowired
+    private IWorkCalendarService workCalendarService;
+	
+	@Autowired
+	private CommonHandler commonHandler;
+	
 	@Autowired
 	private IWorkCalendarDictService workCalendarDictService;
 	
@@ -159,4 +169,19 @@ public class CommonController {
     	return result ? ResponseUtil.successResult("创建成功") : ResponseUtil.successResult("创建失败");
     }
     
+    @ApiOperation(value = "数据转换")
+    @RequestMapping(value = "switchData")
+    public ResponseResult switchData(@RequestBody DictQueryVO queryVO) {
+    	// 获取该集团下所有的工作历类型
+    	QueryWrapper<WorkCalendar> queryWrapper = new WorkCalendar.Builder().createQueryWrapper()
+    			.groupCodeEq(queryVO.getGroupCode()).builderQueryWrapper();
+    	List<WorkCalendar> workCalendars = this.workCalendarService.list(queryWrapper);
+    	if (CollectionUtil.isEmpty(workCalendars)) {
+    		return ResponseUtil.errorResult("该集团下不存在工作历");
+		}
+    	
+    	this.commonHandler.switchData(workCalendars, queryVO.getGroupCode());
+    	return ResponseUtil.successResult("转换成功");
+    }
+    
 }

+ 134 - 0
src/main/java/com/persagy/calendar/handle/CommonHandler.java

@@ -0,0 +1,134 @@
+package com.persagy.calendar.handle;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.google.common.collect.Lists;
+import com.persagy.calendar.pojo.dto.WorkCalendar;
+import com.persagy.calendar.pojo.dto.WorkCalendarDate;
+import com.persagy.calendar.pojo.dto.WorkCalendarLabel;
+import com.persagy.calendar.pojo.dto.WorkCalendarRule;
+import com.persagy.calendar.service.IWorkCalendarDateService;
+import com.persagy.calendar.service.IWorkCalendarLabelService;
+import com.persagy.calendar.service.IWorkCalendarRuleService;
+
+import cn.hutool.core.collection.CollectionUtil;
+
+/**
+ * 
+ * @version 1.0.0
+ * @company persagy 
+ * @author zhangqiankun
+ * @date 2021年11月13日 下午6:16:25
+ */
+@Component
+public class CommonHandler {
+
+	@Autowired
+	private IWorkCalendarLabelService workCalendarLabelService;
+	
+    @Autowired
+    private IWorkCalendarRuleService workCalendarRuleService;
+    
+    @Autowired
+    private IWorkCalendarDateService workCalendarDateService;
+    
+	/**
+	 * 数据转换
+	 * 
+	 * @param workCalendars
+	 * @param groupCode
+	 */
+    public void switchData(List<WorkCalendar> workCalendars, String groupCode) {
+    	// 获取唯一的项目ID和对应的工作历类型
+    	Map<String, List<String>> projectId2CalendarId = new HashMap<String, List<String>>();
+    	for (WorkCalendar workCalendar : workCalendars) {
+    		if (projectId2CalendarId.containsKey(workCalendar.getProjectId())) {
+    			projectId2CalendarId.get(workCalendar.getProjectId()).add(workCalendar.getId());
+			} else {
+				projectId2CalendarId.put(workCalendar.getProjectId(), Lists.newArrayList(workCalendar.getId()));
+			}
+		}
+    	
+    	// 遍历map,修改shop类型的规则和date数据,修改ACSeason类型label数据
+    	Set<String> keySet = projectId2CalendarId.keySet();
+    	for (String projectId : keySet) {
+    		List<String> calendarIds = projectId2CalendarId.get(projectId);
+    		if (CollectionUtil.isEmpty(calendarIds)) {
+				continue;
+			}
+    		if (calendarIds.size() == 1) {
+				// 此项目下就这一个工作历
+    			this.switchData(groupCode, projectId, calendarIds.get(0));
+    			continue;
+			}
+    		
+    		// 一个项目下多个工作历时
+    		Collections.sort(calendarIds);
+    		int size = calendarIds.size();
+    		for (int i = 0; i < size; i++) {
+    			String calendarId = calendarIds.get(i);
+				if (i == 0) {
+					this.switchData(groupCode, projectId, calendarId);
+					continue;
+				}
+				// 
+				this.deleteData(groupCode, projectId, calendarId);
+			}
+		}
+    }
+    
+	/**
+	 * 转换数据
+	 * 
+	 * @param groupCode
+	 * @param projectId
+	 * @param calendarId
+	 */
+    private void switchData(String groupCode, String projectId, String calendarId) {
+    	UpdateWrapper<WorkCalendarRule> ruleWrapper = new WorkCalendarRule.Builder().createUpdateWrapper().groupCodeEq(groupCode)
+				.projectIdEq(projectId, null).calendarIdEq(calendarId, null).dictTypeEq("shop").builderUpdateWrapper();
+		ruleWrapper.setSql("CALENDAR_ID = '0'");
+		this.workCalendarRuleService.update(ruleWrapper);
+		
+		UpdateWrapper<WorkCalendarDate> calendarWrapper = new WorkCalendarDate.Builder().createUpdateWrapper().groupCodeEq(groupCode)
+				.projectIdEq(projectId, null).calendarIdEq(calendarId, null).dictTypeEq("shop").builderUpdateWrapper();
+		calendarWrapper.setSql("CALENDAR_ID = '0', CALENDAR_NAME = NULL, CALENDAR_DESC = NULL");
+		this.workCalendarDateService.update(calendarWrapper);
+		
+		UpdateWrapper<WorkCalendarLabel> labelWrapper = new WorkCalendarLabel.Builder().createUpdateWrapper().groupCodeEq(groupCode)
+				.projectIdEq(projectId, null).calendarIdEq(calendarId, null).dictTypeEq("ACSeason").builderUpdateWrapper();
+		labelWrapper.setSql("CALENDAR_ID = '0'");
+		this.workCalendarLabelService.update(labelWrapper);
+    }
+    
+    /**
+     * 删除数据
+     * 
+     * @param groupCode
+     * @param projectId
+     * @param calendarId
+     */
+    private void deleteData(String groupCode, String projectId, String calendarId) {
+    	QueryWrapper<WorkCalendarRule> ruleWrapper = new WorkCalendarRule.Builder().createQueryWrapper().groupCodeEq(groupCode)
+				.projectIdEq(projectId, null).calendarIdEq(calendarId, null).dictTypeEq("shop").builderQueryWrapper();
+		this.workCalendarRuleService.remove(ruleWrapper);
+		
+		QueryWrapper<WorkCalendarDate> calendarWrapper = new WorkCalendarDate.Builder().createQueryWrapper().groupCodeEq(groupCode)
+				.projectIdEq(projectId, null).calendarIdEq(calendarId, null).dictTypeEq("shop").builderQueryWrapper();
+		this.workCalendarDateService.remove(calendarWrapper);
+		
+		QueryWrapper<WorkCalendarLabel> labelWrapper = new WorkCalendarLabel.Builder().createQueryWrapper().groupCodeEq(groupCode)
+				.projectIdEq(projectId, null).calendarIdEq(calendarId, null).dictTypeEq("ACSeason").builderQueryWrapper();
+		this.workCalendarLabelService.remove(labelWrapper);
+    }
+    
+}