| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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 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 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<>(); |
| | | |
| | | // æ·»å å¼ç¯å®æ¶å¨ |
| | | 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 (openLightOrder == null || closeLightOrder == null) { |
| | | throw new BusinessException("è§£æåç¯å½ä»¤å¤±è´¥"); |
| | | } |
| | | if (ArrayUtil.isEmpty(weekArrays)) { |
| | | throw new BusinessException("请设置ææ"); |
| | | } |
| | | |
| | | 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)); |
| | | |
| | | // æ¼æ¥å
³ç¯å½ä»¤ |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | | * æ§è¡å®æ¶å¨ä»»å¡ |
| | | * @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); |
| | | } |
| | | } |