dao/src/main/java/com/sandu/ximon/dao/domain/Light.java
@@ -16,7 +16,7 @@ @Data public class Light implements Serializable { /** * * */ @TableId(type = IdType.AUTO) private Long lightId; @@ -32,15 +32,25 @@ private String remark; /** * ç¯1亮度ç¾åæ¯ï¼0-100 */ private Integer lightPercent; /** * ç¯2亮度ç¾åæ¯ï¼0-100 */ private Integer light2Percent; /** * å建æ¶é´ */ private LocalDateTime createTime; /** * * */ private LocalDateTime updateTime; @TableField(exist = false) private static final long serialVersionUID = 1L; } } dao/src/main/java/com/sandu/ximon/dao/enums/DeviceRespStatusEnums.java
ÎļþÃû´Ó dao/src/main/java/com/sandu/ximon/dao/enums/IssueStatusEnums.java ÐÞ¸Ä @@ -1,11 +1,11 @@ package com.sandu.ximon.dao.enums; /** * ä¸åç¶ææä¸¾ç±» * ä¸åç¶æååºæä¸¾ç±» * * @author chenjiantian */ public enum IssueStatusEnums { public enum DeviceRespStatusEnums { /** * SUCCESS @@ -31,7 +31,7 @@ private final Integer code; IssueStatusEnums(Integer code) { DeviceRespStatusEnums(Integer code) { this.code = code; } dao/src/main/java/com/sandu/ximon/dao/mapper/LightMapper.java
@@ -3,7 +3,6 @@ import com.sandu.ximon.dao.bo.LightBo; import com.sandu.ximon.dao.domain.Light; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sandu.ximon.dao.domain.LightReportData; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -13,7 +12,6 @@ */ @Mapper public interface LightMapper extends BaseMapper<Light> { /** * æå¡å¨è·åè·¯ç¯å表 * @@ -22,7 +20,6 @@ * @return è·¯ç¯å表 */ List<LightBo> listLight(Long clientId, String keyword); } dao/src/main/resources/mapper/LightMapper.xml
@@ -5,11 +5,13 @@ <mapper namespace="com.sandu.ximon.dao.mapper.LightMapper"> <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.Light"> <id property="lightId" column="light_id" jdbcType="BIGINT"/> <result property="deviceCode" column="device_code" jdbcType="VARCHAR"/> <result property="remark" column="remark" jdbcType="VARCHAR"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> <id property="lightId" column="light_id" jdbcType="BIGINT"/> <result property="deviceCode" column="device_code" jdbcType="VARCHAR"/> <result property="remark" column="remark" jdbcType="VARCHAR"/> <result property="lightPercent" column="light_percent" jdbcType="INTEGER"/> <result property="light2Percent" column="light2_percent" jdbcType="INTEGER"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> </resultMap> <resultMap id="listLight" type="com.sandu.ximon.dao.bo.LightBo" extends="BaseResultMap"> ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightController.java
@@ -3,6 +3,7 @@ import com.sandu.common.domain.ResponseVO; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.util.ResponseUtil; import com.sandu.ximon.admin.param.LightControlParam; import com.sandu.ximon.admin.param.LightRemarkParam; import com.sandu.ximon.admin.service.LightReportDataService; import com.sandu.ximon.admin.service.LightReportErrorService; @@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; /** * è·¯ç¯ç¸å ³æ§å¶ç±» @@ -64,4 +66,11 @@ List<LightReportErrorBo> list = lightReportErrorService.listReportError(conditionVO.getPageNo(), conditionVO.getPageSize(), keyword); return ResponseUtil.successPage(list); } // 亮度æ§å¶ @PostMapping("/control") public ResponseVO<Object> controlBrightness(@RequestBody @Validated List<LightControlParam> paramList) { List<Map<String, Object>> list = lightService.controlBrightness(paramList); return ResponseUtil.success(list); } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/amqp/processor/LightDataProcessor.java
@@ -39,7 +39,7 @@ A5LightHeartbeatReportInnerFrame heartbeatReportInnerFrame = new A5LightHeartbeatReportInnerFrame().transformFrame(frame.getPayload()); SpringContextHolder.getBean(LightReportDataService.class).saveReportData(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage()); SpringContextHolder.getBean(LightService.class).saveLight(deviceName); SpringContextHolder.getBean(LightService.class).saveLight(deviceName,heartbeatReportInnerFrame.getHeartBeatDataPackage()); } else if (A5LightReportEnum.Time_Synchronized.getCode().equals(functionCode)) { // log.info("è¯·æ±æ¶é´åæ¥"); ximon-admin/src/main/java/com/sandu/ximon/admin/param/LightControlParam.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.sandu.ximon.admin.param; import lombok.Data; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.*; import java.util.List; /** * @author chenjiantian * 亮度æ§å¶ */ @Data public class LightControlParam { @NotBlank(message = "设å¤ç ä¸è½ä¸ºç©º") private String deviceCode; @NotNull(message = "亮度ä¸è½ä¸ºç©º") @Min(value = 0,message = "亮度æå°ä¸º0") @Max(value = 100,message = "亮度æå¤§ä¸º100") private Integer brightness; } ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
@@ -1,25 +1,37 @@ package com.sandu.ximon.admin.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.HexUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.sandu.common.execption.BusinessException; import com.sandu.common.redis.RedisService; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.ximon.admin.dto.LightDataDto; import com.sandu.ximon.admin.manager.iot.frame.A5Frame; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5LightHeartbeatReportInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.request.A5LightBrightnessReqInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.response.A5LightBrightnessRespInnerFrame; 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.LightControlParam; import com.sandu.ximon.admin.param.LightRemarkParam; import com.sandu.ximon.admin.redis.LightKey; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.dao.bo.LightBo; import com.sandu.ximon.dao.domain.Light; import com.sandu.ximon.dao.domain.LightReportData; import com.sandu.ximon.dao.enums.DeviceRespStatusEnums; import com.sandu.ximon.dao.mapper.LightMapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** @@ -37,20 +49,31 @@ /** * å½å ¥å½å设å¤ç çè·¯ç¯æ°æ® * @param deviceName mac * * @param deviceName mac * @param heartBeatDataPackage å¿è·³æ°æ® */ public void saveLight(String deviceName) { public void saveLight(String deviceName, A5LightHeartbeatReportInnerFrame.HeartBeatDataPackage heartBeatDataPackage) { Boolean hasKey = redisService.hasKey(LightKey.REPORT_MAC.key(deviceName)); if(!hasKey){ if (!hasKey) { int count = count(Wrappers.lambdaQuery(Light.class).eq(Light::getDeviceCode, deviceName)); log.info("redisæ¥ä¸å°è·¯ç¯æ°æ®{}={}",count,deviceName); log.info("redisæ¥ä¸å°è·¯ç¯æ°æ®{}={}", count, deviceName); // å½åè·¯ç¯è¡¨æ²¡æå½å ¥è®¾å¤å if(count == 0){ if (count == 0) { Light light = new Light(); light.setDeviceCode(deviceName); light.setLightPercent(heartBeatDataPackage.getLightPercent()); light.setLight2Percent(heartBeatDataPackage.getLight2Percent()); save(light); } redisService.set(LightKey.REPORT_MAC.key(deviceName),1,LightKey.REPORT_MAC.expireSeconds()); redisService.set(LightKey.REPORT_MAC.key(deviceName), 1, LightKey.REPORT_MAC.expireSeconds()); log.info("æ°å¢è·¯ç¯"); } else { Light light = new Light(); light.setLightPercent(heartBeatDataPackage.getLightPercent()); light.setLight2Percent(heartBeatDataPackage.getLight2Percent()); update(light, Wrappers.lambdaUpdate(Light.class).eq(Light::getDeviceCode, deviceName)); log.info("æ´æ°è·¯ç¯äº®åº¦"); } } @@ -64,15 +87,15 @@ PageHelper.startPage(pageNo, pageSize); List<LightBo> listLight = baseMapper.listLight(clientId,keyword); List<LightBo> listLight = baseMapper.listLight(clientId, keyword); // è·åæè¿ç䏿¥æ¶é´ List<String> deviceCodeList = listLight.stream().map(Light::getDeviceCode).collect(Collectors.toList()); if(CollectionUtil.isNotEmpty(deviceCodeList)){ List<LightReportData> reportDataList = lightReportDataService.getNewestReportByDeviceCode(deviceCodeList); if (CollectionUtil.isNotEmpty(deviceCodeList)) { List<LightReportData> reportDataList = lightReportDataService.getNewestReportByDeviceCode(deviceCodeList); for (LightBo lightBo : listLight) { for (LightReportData lightReportData : reportDataList) { if(StrUtil.equals(lightBo.getDeviceCode(),lightReportData.getDeviceCode())){ if (StrUtil.equals(lightBo.getDeviceCode(), lightReportData.getDeviceCode())) { lightBo.setReportTime(lightReportData.getCreateTime()); break; } @@ -85,7 +108,7 @@ public boolean addRemark(LightRemarkParam param) { Light light = getById(param.getLightId()); if(light == null){ if (light == null) { throw new BusinessException("æ¾ä¸å°è·¯ç¯"); } Light update = new Light(); @@ -93,4 +116,43 @@ update.setRemark(param.getRemark()); return updateById(update); } /** * åç¯äº®åº¦æ§å¶ * * @return com.sandu.ximon.dao.enums.DeviceRespStatusEnums */ public List<Map<String, Object>> controlBrightness(List<LightControlParam> paramList) { if (CollectionUtil.isEmpty(paramList)) { throw new BusinessException("åæ°ä¸è½ä¸ºç©º"); } List<Map<String, Object>> resultList = new ArrayList<>(); for (LightControlParam param : paramList) { A5LightBrightnessReqInnerFrame lightControlFrame = new A5LightBrightnessReqInnerFrame(param.getBrightness()); A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_LIGHT_DATA.getCode(), lightControlFrame); WrapResponseCommonFrame<A5LightBrightnessRespInnerFrame> frame = MainBoardInvokeSyncService.getInstance() .sendRRPC(param.getDeviceCode(), a5Frame, A5LightBrightnessRespInnerFrame.class); Map<String, Object> map = new HashMap<>(); map.put("deviceCode", param.getDeviceCode()); if (frame == null) { map.put("status", DeviceRespStatusEnums.OTHER_ERROR.getCode()); resultList.add(map); continue; } String responseStatus = frame.getResponseInnerFrame().getResponseStatus(); int status = HexUtil.hexToInt(responseStatus); map.put("status", status); resultList.add(map); // æ´æ°äº®åº¦æåï¼ä¿®æ¹å°æ°æ®åº if (DeviceRespStatusEnums.SUCCESS.getCode().equals(status)) { Light light = new Light(); light.setLightPercent(param.getBrightness()); update(light, Wrappers.lambdaUpdate(Light.class).eq(Light::getDeviceCode, param.getDeviceCode())); } } return resultList; } } ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java
@@ -30,7 +30,7 @@ import com.sandu.ximon.dao.domain.LightTask; import com.sandu.ximon.dao.domain.LightTaskPoleRelation; import com.sandu.ximon.dao.domain.Pole; import com.sandu.ximon.dao.enums.IssueStatusEnums; import com.sandu.ximon.dao.enums.DeviceRespStatusEnums; import com.sandu.ximon.dao.mapper.LightTaskMapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -54,11 +54,8 @@ @AllArgsConstructor public class LightTaskService extends BaseServiceImpl<LightTaskMapper, LightTask> { // private final LightTaskQuartzService lightTaskQuartzService; private final PoleService poleService; private final LightTaskPoleRelationService lightTaskPoleRelationService; /** * æ°å¢è·¯ç¯ä»»å¡ @@ -84,10 +81,6 @@ if (!save(lightTask)) { throw new BusinessException("ä¿åè·¯ç¯ä»»å¡å¤±è´¥"); } // List<LightTaskQuartz> list = lightTaskQuartzService.addLightTaskQuartz(lightTask); // if (CollectionUtil.isEmpty(list)) { // throw new BusinessException("æ·»å 宿¶ä»»å¡å¤±è´¥"); // } List<Long> poleIdList = param.getPoleIdList(); if (CollectionUtil.isNotEmpty(poleIdList)) { @@ -129,11 +122,6 @@ if (!updateById(lightTask)) { throw new BusinessException("ç¼è¾ä»»å¡å¤±è´¥"); } // List<LightTaskQuartz> list = lightTaskQuartzService.updateLightTaskQuartz(lightTask); // if (CollectionUtil.isEmpty(list)) { // throw new BusinessException("ç¼è¾å®æ¶ä»»å¡å¤±è´¥"); // } List<Long> poleIdList = param.getPoleIdList(); if (CollectionUtil.isNotEmpty(poleIdList)) { @@ -192,7 +180,6 @@ return page; } // æ¯ä¸ªè·¯ç¯åéæ§å¶å¸§ è¿åå ³èå表 private List<LightTaskPoleRelation> sendControllerFrame(LightTask lightTask, List<Long> poleIdList,String framePayload) { List<LightTaskPoleRelation> lightTaskPoleRelationList = new ArrayList<>(); @@ -210,7 +197,7 @@ lightTaskPoleRelation.setPoleId(pole.getId()); lightTaskPoleRelation.setTaskId(lightTask.getTaskId()); if (a5LightTimerRespInnerFrame == null) { lightTaskPoleRelation.setIssueStatus(IssueStatusEnums.OTHER_ERROR.getCode()); lightTaskPoleRelation.setIssueStatus(DeviceRespStatusEnums.OTHER_ERROR.getCode()); } else { lightTaskPoleRelation.setIssueStatus(HexUtil.hexToInt(a5LightTimerRespInnerFrame.getResponseStatus())); } @@ -235,11 +222,6 @@ if (!lightTaskPoleRelationService.remove(Wrappers.lambdaQuery(LightTaskPoleRelation.class).in(LightTaskPoleRelation::getTaskId, taskIdList))) { throw new BusinessException("å é¤ç»å®ç¯æå¤±è´¥"); } // // å é¤å®æ¶å¨ // if (!lightTaskQuartzService.removeLightTaskQuartz(taskIdList)) { // throw new BusinessException("å é¤å®æ¶å¨å¤±è´¥"); // } return true; } @@ -307,8 +289,6 @@ /** * ä¸ååä¸ªç¯æçä»»å¡ * * @param param * @return */ public boolean issueLightTask(LightTaskIssueParam param) { LightTask lightTask = getById(param.getTaskId());