From 0f98ec728d0403b1726273d94dc00f06993888b6 Mon Sep 17 00:00:00 2001
From: chenjiantian <214228265@qq.com>
Date: 星期四, 16 十二月 2021 18:36:01 +0800
Subject: [PATCH] 灯模块
---
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskQuartzService.java | 139 +++++++++++++++++++++++++++++++++++++++++----
1 files changed, 125 insertions(+), 14 deletions(-)
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskQuartzService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskQuartzService.java
index 3e16e33..dd3e51b 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskQuartzService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskQuartzService.java
@@ -1,58 +1,169 @@
package com.sandu.ximon.admin.service;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.HexUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sandu.common.execption.BusinessException;
+import com.sandu.common.quartz.ExecutionJob;
+import com.sandu.common.quartz.service.QuartzService;
import com.sandu.common.service.impl.BaseServiceImpl;
+import com.sandu.ximon.admin.constant.Constants;
import com.sandu.ximon.admin.dto.SingleLightOrderDto;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils;
+import com.sandu.ximon.admin.param.LightTaskParam;
+import com.sandu.ximon.admin.quartz.LightTimerJob;
import com.sandu.ximon.admin.utils.TaskOrderUtil;
import com.sandu.ximon.dao.domain.LightTask;
import com.sandu.ximon.dao.domain.LightTaskQuartz;
import com.sandu.ximon.dao.mapper.LightTaskQuartzMapper;
-import org.quartz.CronScheduleBuilder;
-import org.quartz.DateBuilder;
+import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
/**
* @author chenjiantian
* @date 2021/12/15 17:46
*/
@Service
+@AllArgsConstructor
public class LightTaskQuartzService extends BaseServiceImpl<LightTaskQuartzMapper, LightTaskQuartz> {
+
+ @Resource
+ private QuartzService quartzService;
/**
* 娣诲姞瀹氭椂鍣ㄤ换鍔�
*
* @param lightTask 璺伅浠诲姟瀹炰綋绫伙紝涓�涓矾鐏换鍔℃湁澶氫釜瀹氭椂鍣ㄤ换鍔�
*/
- public boolean addLightTaskQuartz(LightTask lightTask) {
+ public List<LightTaskQuartz> addLightTaskQuartz(LightTask lightTask) {
+ List<LightTaskQuartz> list = buildLightTaskQuartzList(lightTask);
+
+ boolean saveBatch = saveBatch(list);
+ if (!saveBatch) {
+ throw new BusinessException("淇濆瓨瀹氭椂浠诲姟澶辫触");
+ }
+
+ runLightTaskQuartz(list);
+
+ return list;
+ }
+
+ /**
+ * 鏍规嵁璺伅浠诲姟淇℃伅鐢熸垚璺伅瀹氭椂鍣ㄥ垪琛�
+ * @param lightTask 璺伅浠诲姟淇℃伅
+ * @return 璺伅瀹氭椂鍣ㄥ垪琛�
+ */
+ private List<LightTaskQuartz> buildLightTaskQuartzList(LightTask lightTask) {
List<LightTaskQuartz> list = new ArrayList<>();
// 娣诲姞寮�鐏畾鏃跺櫒
- String openOrder = lightTask.getOpenOrder();
- SingleLightOrderDto singleLightOrder = TaskOrderUtil.parseLightOrder(openOrder);
+ SingleLightOrderDto openLightOrder = TaskOrderUtil.parseLightOrder(lightTask.getOpenOrder());
+ SingleLightOrderDto closeLightOrder = TaskOrderUtil.parseLightOrder(lightTask.getCloseOrder());
+ String[] controlOrderArray = StrUtil.split(lightTask.getControlOrder(), LightTaskParam.REQUEST_ORDER_LENGTH);
Integer[] weekArrays = TaskOrderUtil.parseLightWeek(lightTask.getWeek());
- if (singleLightOrder == null) {
+ if (openLightOrder == null || closeLightOrder == null) {
throw new BusinessException("瑙f瀽鍗曠伅鍛戒护澶辫触");
}
- if(ArrayUtil.isEmpty(weekArrays)) {
+ if (ArrayUtil.isEmpty(weekArrays)) {
throw new BusinessException("璇疯缃槦鏈�");
}
- String cron = TaskOrderUtil.getHourAndMinuteOnGivenDaysOfWeek(singleLightOrder.getHour(), singleLightOrder.getMinute(), weekArrays);
- LightTaskQuartz lightTaskQuartz = new LightTaskQuartz();
- lightTaskQuartz.setTaskId(lightTask.getTaskId());
- lightTaskQuartz.setCronExpression(cron);
+ StringBuilder sb = new StringBuilder();
+ String weekHex = SupplementUtils.suppleZero(HexUtil.toHex(lightTask.getWeek()), 2);
+ // 鎷兼帴寮�鐏懡浠�
+ sb.append(weekHex);
+ sb.append(SupplementUtils.suppleZero(HexUtil.toHex(openLightOrder.getHour()), 2));
+ sb.append(SupplementUtils.suppleZero(HexUtil.toHex(openLightOrder.getMinute()), 2));
+ sb.append(SupplementUtils.suppleZero(HexUtil.toHex(openLightOrder.getBrightness()), 2));
- return false;
+ // 鎷兼帴鍏崇伅鍛戒护
+ sb.append(weekHex);
+ sb.append(SupplementUtils.suppleZero(HexUtil.toHex(closeLightOrder.getHour()), 2));
+ sb.append(SupplementUtils.suppleZero(HexUtil.toHex(closeLightOrder.getMinute()), 2));
+ sb.append(SupplementUtils.suppleZero(HexUtil.toHex(closeLightOrder.getBrightness()), 2));
+
+ // 鏂板寮�鐏畾鏃跺櫒
+ LightTaskQuartz openLightTaskQuartz = new LightTaskQuartz();
+ openLightTaskQuartz.setTaskId(lightTask.getTaskId());
+ openLightTaskQuartz.setCronExpression(TaskOrderUtil.getHourAndMinuteOnGivenDaysOfWeek(openLightOrder.getHour(), openLightOrder.getMinute(), weekArrays));
+ openLightTaskQuartz.setQuartzName(lightTask.getTaskName());
+ list.add(openLightTaskQuartz);
+
+ // 鏂板鍏崇伅鐏畾鏃跺櫒
+ LightTaskQuartz closeLightTaskQuartz = new LightTaskQuartz();
+ closeLightTaskQuartz.setTaskId(lightTask.getTaskId());
+ closeLightTaskQuartz.setCronExpression(TaskOrderUtil.getHourAndMinuteOnGivenDaysOfWeek(closeLightOrder.getHour(), closeLightOrder.getMinute(), weekArrays));
+ closeLightTaskQuartz.setQuartzName(lightTask.getTaskName());
+ list.add(closeLightTaskQuartz);
+
+ // 鎷兼帴浜害鎺х伅鍛戒护
+ for (String controlOrderStr : controlOrderArray) {
+ SingleLightOrderDto controlLightOrder = TaskOrderUtil.parseLightOrder(controlOrderStr);
+ if (controlLightOrder != null) {
+ sb.append(weekHex);
+ sb.append(SupplementUtils.suppleZero(HexUtil.toHex(controlLightOrder.getHour()), 2));
+ sb.append(SupplementUtils.suppleZero(HexUtil.toHex(controlLightOrder.getMinute()), 2));
+ sb.append(SupplementUtils.suppleZero(HexUtil.toHex(controlLightOrder.getBrightness()), 2));
+
+ LightTaskQuartz controlLightTaskQuartz = new LightTaskQuartz();
+ controlLightTaskQuartz.setTaskId(lightTask.getTaskId());
+ controlLightTaskQuartz.setCronExpression(TaskOrderUtil.getHourAndMinuteOnGivenDaysOfWeek(controlLightOrder.getHour(), controlLightOrder.getMinute(), weekArrays));
+ controlLightTaskQuartz.setQuartzName(lightTask.getTaskName());
+ list.add(controlLightTaskQuartz);
+ }
+ }
+
+ String lightOrder = sb.toString();
+
+ for (LightTaskQuartz lightTaskQuartz : list) {
+ lightTaskQuartz.setFramePayload(lightOrder);
+ }
+ return list;
}
- public static void main(String[] args) {
- System.out.println(CronScheduleBuilder.atHourAndMinuteOnGivenDaysOfWeek(0, 1, DateBuilder.SUNDAY).build().getCalendarName());
+ /**
+ * 鎵ц瀹氭椂鍣ㄤ换鍔�
+ * @param list 瀹氭椂鍣ㄥ垪琛�
+ */
+ public void runLightTaskQuartz(List<LightTaskQuartz> list){
+ for (LightTaskQuartz taskQuartz : list) {
+ Map<String, Object> build = MapUtil.<String, Object>builder()
+ .put("taskId", taskQuartz.getTaskId())
+ .put("taskName", taskQuartz.getQuartzName())
+ .put("quartzId", taskQuartz.getId())
+ .put("cron", taskQuartz.getCronExpression()).build();
+ quartzService.addJob(LightTimerJob.class, taskQuartz.getId(), taskQuartz.getCronExpression(), build);
+ }
}
+ public List<LightTaskQuartz> updateLightTaskQuartz(LightTask lightTask) {
+ Long taskId = lightTask.getTaskId();
+ // 鍒犻櫎鏃т换鍔�
+ removeLightTaskQuartz(CollectionUtil.toList(taskId));
+
+ List<LightTaskQuartz> list = addLightTaskQuartz(lightTask);
+
+ return list;
+ }
+
+ public boolean removeLightTaskQuartz(List<Long> taskIdList) {
+ List<Long> delTaskQuartzIdList = list(Wrappers.lambdaQuery(LightTaskQuartz.class).in(LightTaskQuartz::getTaskId, taskIdList).select(LightTaskQuartz::getId))
+ .stream().map(LightTaskQuartz::getId).collect(Collectors.toList());
+ for (Long delTaskQuartzId : delTaskQuartzIdList) {
+ quartzService.deleteJob(LightTimerJob.class,delTaskQuartzId);
+ }
+
+ return removeByIds(delTaskQuartzIdList);
+ }
}
--
Gitblit v1.9.3