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/LightTaskService.java |  154 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 149 insertions(+), 5 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java
index 6da0e0d..0db1ff1 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java
@@ -1,15 +1,31 @@
 package com.sandu.ximon.admin.service;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.PageHelper;
 import com.sandu.common.execption.BusinessException;
 import com.sandu.common.service.impl.BaseServiceImpl;
+import com.sandu.ximon.admin.manager.iot.frame.FrameBuilder;
+import com.sandu.ximon.admin.manager.iot.frame.IRequestFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.request.A5LightTimerReqInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.response.A5LightTimerRespInnerFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.dto.WrapResponseCommonFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
+import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
 import com.sandu.ximon.admin.param.LightTaskParam;
 import com.sandu.ximon.admin.security.SecurityUtils;
 import com.sandu.ximon.dao.domain.LightTask;
+import com.sandu.ximon.dao.domain.LightTaskPoleRelation;
+import com.sandu.ximon.dao.domain.LightTaskQuartz;
 import com.sandu.ximon.dao.mapper.LightTaskMapper;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * @author chenjiantian
@@ -20,16 +36,17 @@
 @AllArgsConstructor
 public class LightTaskService extends BaseServiceImpl<LightTaskMapper, LightTask> {
 
-    private final static int ORDER_LENGTH = 6;
 
     private final LightTaskQuartzService lightTaskQuartzService;
+    private final PoleService poleService;
+    private final LightTaskPoleRelationService lightTaskPoleRelationService;
 
     /**
      * 鏂板璺伅浠诲姟
      */
     @Transactional(rollbackFor = Exception.class)
     public boolean addLightTask(LightTaskParam param) {
-        if(StrUtil.length(param.getControlOrder()) % ORDER_LENGTH != 0){
+        if (StrUtil.length(param.getControlOrder()) % LightTaskParam.REQUEST_ORDER_LENGTH != 0) {
             throw new BusinessException("鐏帶鍛戒护鏍煎紡涓嶆纭�");
         }
         LightTask lightTask = new LightTask();
@@ -40,10 +57,137 @@
         lightTask.setOpenOrder(param.getOpenOrder());
         lightTask.setControlOrder(param.getControlOrder());
         lightTask.setCreateUser(SecurityUtils.getUsername());
-        if(!save(lightTask)) {
+        if (!save(lightTask)) {
             throw new BusinessException("淇濆瓨璺伅浠诲姟澶辫触");
         }
-        boolean result = lightTaskQuartzService.addLightTaskQuartz(lightTask);
-        return false;
+        List<LightTaskQuartz> list = lightTaskQuartzService.addLightTaskQuartz(lightTask);
+        if (CollectionUtil.isEmpty(list)) {
+            throw new BusinessException("娣诲姞瀹氭椂浠诲姟澶辫触");
+        }
+        // 娣诲姞缁戝畾鐏潌
+        if (!lightTaskPoleRelationService.updateLightTaskPoleRelation(lightTask.getTaskId(), param.getPoleIdList())) {
+            throw new BusinessException("缁戝畾鐏潌澶辫触");
+        }
+
+        List<Long> poleIdList = param.getPoleIdList();
+        if (CollectionUtil.isNotEmpty(poleIdList)) {
+            List<String> deviceCodeList = poleService.listDeviceCodeByIds(poleIdList);
+            if (CollectionUtil.isEmpty(deviceCodeList)) {
+                throw new BusinessException("鎵句笉鍒扮伅鏉唌ac锛屾棤娉曞彂閫佸畾鏃朵换鍔�");
+            }
+            // 鑾峰彇瀹氭椂鐏帶鍛戒护
+            String framePayload = list.get(0).getFramePayload();
+
+            // rrpc 鍙戠敓瀹氭椂鍛戒护
+            for (String deviceCode : deviceCodeList) {
+                sendTimeRRpc(framePayload, deviceCode);
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 鍙戦�佺伅鎺ц姹�
+     *
+     * @param framePayload 鐏帶鍙傛暟
+     * @param deviceCode   璁惧鍚�
+     * @return 杩斿洖甯�
+     */
+    public A5LightTimerRespInnerFrame sendTimeRRpc(String framePayload, String deviceCode) {
+        IRequestFrame requestFrame = FrameBuilder.builderA5().innerFrame(new A5LightTimerReqInnerFrame(framePayload))
+                .orderType(A5OrderEnum.REQUEST_LIGHT_DATA.getCode()).build();
+        WrapResponseCommonFrame<A5LightTimerRespInnerFrame> responseCommonFrame = MainBoardInvokeSyncService.getInstance()
+                .sendRRPC(deviceCode, requestFrame, A5LightTimerRespInnerFrame.class);
+        System.out.println("鍙戦�佺粨鏋�");
+        A5LightTimerRespInnerFrame responseInnerFrame = responseCommonFrame.getResponseInnerFrame();
+        System.out.println(responseInnerFrame.getResponseStatus());
+        return responseInnerFrame;
+    }
+
+    public List<LightTask> listLightTask(int pageNo, int pageSize, String keyword) {
+        LambdaQueryWrapper<LightTask> wrapper = Wrappers.lambdaQuery(LightTask.class);
+        if (StrUtil.isNotBlank(keyword)) {
+            wrapper.like(LightTask::getTaskName, keyword);
+        }
+        Long clientId = SecurityUtils.getClientId();
+        if (clientId != null) {
+            wrapper.eq(LightTask::getClientId, clientId);
+        }
+
+        PageHelper.startPage(pageNo, pageSize);
+        return list(wrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateLightTask(Long taskId, LightTaskParam param) {
+        if (StrUtil.length(param.getControlOrder()) % LightTaskParam.REQUEST_ORDER_LENGTH != 0) {
+            throw new BusinessException("鐏帶鍛戒护鏍煎紡涓嶆纭�");
+        }
+        LightTask lightTask = getById(taskId);
+        if (lightTask == null) {
+            throw new BusinessException("鎵句笉鍒拌矾鐏换鍔�");
+        }
+
+        lightTask.setTaskName(param.getTaskName());
+        lightTask.setWeek(param.getWeek());
+        lightTask.setControlOrder(param.getControlOrder());
+        lightTask.setOpenOrder(param.getOpenOrder());
+        lightTask.setCloseOrder(param.getCloseOrder());
+        lightTask.setUpdateTime(LocalDateTime.now());
+
+        if (!updateById(lightTask)) {
+            throw new BusinessException("缂栬緫浠诲姟澶辫触");
+        }
+
+        List<LightTaskQuartz> list = lightTaskQuartzService.updateLightTaskQuartz(lightTask);
+        if (CollectionUtil.isEmpty(list)) {
+            throw new BusinessException("缂栬緫瀹氭椂浠诲姟澶辫触");
+        }
+
+        // 娣诲姞缁戝畾鐏潌
+        if (!lightTaskPoleRelationService.updateLightTaskPoleRelation(lightTask.getTaskId(), param.getPoleIdList())) {
+            throw new BusinessException("缁戝畾鐏潌澶辫触");
+        }
+        List<Long> poleIdList = param.getPoleIdList();
+        if (CollectionUtil.isNotEmpty(poleIdList)) {
+            List<String> deviceCodeList = poleService.listDeviceCodeByIds(poleIdList);
+            if (CollectionUtil.isEmpty(deviceCodeList)) {
+                throw new BusinessException("鎵句笉鍒扮伅鏉唌ac锛屾棤娉曞彂閫佸畾鏃朵换鍔�");
+            }
+            // 鑾峰彇瀹氭椂鐏帶鍛戒护
+            String framePayload = list.get(0).getFramePayload();
+
+            // rrpc 鍙戠敓瀹氭椂鍛戒护
+            for (String deviceCode : deviceCodeList) {
+                sendTimeRRpc(framePayload, deviceCode);
+            }
+        }
+
+        return true;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public boolean delLightTask(List<Long> taskIdList) {
+        List<LightTask> lightTaskList = listByIds(taskIdList);
+        if (CollectionUtil.isEmpty(lightTaskList)) {
+            throw new BusinessException("鎵句笉鍒颁换鍔′俊鎭�");
+        }
+
+        // 鍒犻櫎浠诲姟
+        if (!removeByIds(taskIdList)) {
+            throw new BusinessException("鍒犻櫎浠诲姟澶辫触");
+        }
+
+        // 鍒犻櫎缁戝畾鐏潌
+        if (!lightTaskPoleRelationService.remove(Wrappers.lambdaQuery(LightTaskPoleRelation.class).in(LightTaskPoleRelation::getTaskId, taskIdList))) {
+            throw new BusinessException("鍒犻櫎缁戝畾鐏潌澶辫触");
+        }
+
+        // 鍒犻櫎瀹氭椂鍣�
+        if (!lightTaskQuartzService.removeLightTaskQuartz(taskIdList)) {
+            throw new BusinessException("鍒犻櫎瀹氭椂鍣ㄥけ璐�");
+        }
+
+        return true;
     }
 }

--
Gitblit v1.9.3