| | |
| | | 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 |
| | |
| | | @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(); |
| | |
| | | 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("找不到灯杆mac,无法发送定时任务"); |
| | | } |
| | | // 获取定时灯控命令 |
| | | 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("找不到灯杆mac,无法发送定时任务"); |
| | | } |
| | | // 获取定时灯控命令 |
| | | 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; |
| | | } |
| | | } |