package com.huaxu.controller; import com.huaxu.common.StringUtils; import com.huaxu.dto.*; import com.huaxu.entity.*; import com.huaxu.model.AjaxMessage; import com.huaxu.model.LoginUser; import com.huaxu.model.ResultStatus; import com.huaxu.service.*; import com.huaxu.util.ByteArrayUtils; import com.huaxu.util.RedisUtil; import com.huaxu.util.UserUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; import org.springframework.ui.ModelMap; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; import org.springframework.web.bind.annotation.*; import javax.jws.Oneway; /** * 标签信息页面控制器 * @author WYY * @date 2020-12-02 09:29 */ @RestController @RequestMapping("/monitorinfo") @Api(tags = "标签信息") public class MonitorInfoController { @Autowired private MonitorInfoService monitorInfoService; @Autowired private DeviceParmService deviceParmService; @Autowired private RedisUtil redisUtil; @Autowired private SceneService sceneService; @Autowired private DeviceService deviceService; @Autowired private AlarmDetailsService alarmDetailsService; @ApiOperation(value = "按场景ID查询供水量出水量耗药量耗电量") @RequestMapping(value = "/findTotalUsageBySceneId",method = RequestMethod.GET) @ResponseBody public AjaxMessage findTotalUsageBySceneId(@ApiParam(value = "场景ID", required = true) @RequestParam Long id) { SceneUsageDto sceneUsageDto = new SceneUsageDto(); //查询场景下的所有设备信息 List devices = new ArrayList<>(); DeviceDto deviceDto = new DeviceDto(); deviceDto.setSceneIds(sceneService.findByParentIdsLike(id)); devices.addAll(deviceService.selectList(deviceDto)); //取前一个小时的时间 LocalDateTime dateTime = LocalDateTime.now().plusDays(-1); for (DeviceDto item : devices) { //设备的几个参数值 SceneDeviceAttributeDto sceneDeviceAttributeDto = new SceneDeviceAttributeDto(); sceneDeviceAttributeDto.setDeviceId(item.getId()); sceneDeviceAttributeDto.setYear(dateTime.getYear()); sceneDeviceAttributeDto.setMonth(dateTime.getMonthValue()); sceneDeviceAttributeDto.setDay(dateTime.getDayOfMonth()); List sceneDeviceAttributeDtos = monitorInfoService.findAttributeList(sceneDeviceAttributeDto); //取缓存里的数据 byte[] bytes = redisUtil.get(("sms_water_" + item.getDeviceCode()).getBytes()); if (bytes != null && bytes.length > 0) { MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get(); //筛选该设备相同属性的值 Map map = new HashMap<>(); //将缓存中的实时数据放到map中方便进行遍历 for (MonitorDataValueEntity dateValue : monitorDataEntity.getDataValues()) { map.put(dateValue.getAttributeId(), dateValue); System.out.println("dateValue.getAttributeId()" + dateValue.getAttributeId() + " " + dateValue); } for (SceneDeviceAttributeDto itemAttribute : sceneDeviceAttributeDtos) { System.out.println("itemAttribute.getAttributeId()" + itemAttribute.getAttributeId()); Double attributeDiffValue = 0d; if(!map.containsKey(itemAttribute.getAttributeId())) { System.out.println("map.containsKey(itemAttribute.getAttributeId()" + map.containsKey(itemAttribute.getAttributeId())); continue; } if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() != null) { attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue() - itemAttribute.getLatestValue(); } else if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() == null) { attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue(); } switch (itemAttribute.getAttributeType()) { case "3": sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage() != null ? (double) Math.round((sceneUsageDto.getYieldWaterUsage() + attributeDiffValue)*1000)/1000 : (double) Math.round((attributeDiffValue)*1000)/1000 ); break; case "4": sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage() != null ? (double) Math.round((sceneUsageDto.getIntakeWaterUsage() + attributeDiffValue )*1000)/1000 : (double) Math.round((attributeDiffValue)*1000)/1000 ); break; case "5": sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage() != null ? (double) Math.round((sceneUsageDto.getPowerUsage() + attributeDiffValue)*1000)/1000 : (double) Math.round((attributeDiffValue)*1000)/1000 ); break; case "6": sceneUsageDto.setDrugUsage(sceneUsageDto.getDrugUsage() != null ? (double) Math.round((sceneUsageDto.getDrugUsage() + attributeDiffValue)*1000)/1000 : (double) Math.round((attributeDiffValue)*1000)/1000 ); break; } } if(sceneUsageDto.getYieldWaterUsage()==null) sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage()); if(sceneUsageDto.getIntakeWaterUsage()==null) sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage()); if(sceneUsageDto.getPowerUsage()==null) sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage()); if(sceneUsageDto.getDrugUsage()==null) sceneUsageDto.setDrugUsage(sceneUsageDto.getDrugUsage()); } } return new AjaxMessage<>(ResultStatus.OK,sceneUsageDto); } @ApiOperation(value = "按场景ID查询所有标签信息") @RequestMapping(value = "/findBySceneId",method = RequestMethod.GET) @ResponseBody public AjaxMessage> findBySceneId( @ApiParam(value = "场景ID", required = true) @RequestParam Long id, @ApiParam(value = "图片类型(0鸟瞰图 1工艺图)", required = false) @RequestParam(required = false) Integer imageType, @ApiParam(value = "设备ID", required = false) @RequestParam(required = false) Long deviceId ) { MonitorInfoEntity monitorInfoEntity = new MonitorInfoEntity(); monitorInfoEntity.setSceneId(id); if (imageType != null) { monitorInfoEntity.setImageType(imageType); } if (deviceId != null) { monitorInfoEntity.setDeviceId(deviceId); } List page = monitorInfoService.findList(monitorInfoEntity); for (MonitorInfoEntity item : page) { if (item.getMonitorType().equals(0L)) { //查询报警信息 List alarmDetailsDtos = alarmDetailsService.selectByDeviceId(item.getDeviceId().intValue()); Map mapAlarm = new HashMap<>(); //将缓存中的实时数据放到map中方便进行遍历 for (AlarmDetailsDto alarmDetailsDto : alarmDetailsDtos) { mapAlarm.put(alarmDetailsDto.getAttributeId(), alarmDetailsDto); } byte[] bytes = redisUtil.get(("sms_water_" + item.getDeviceCode()).getBytes()); if (bytes != null && bytes.length > 0) { MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get(); Map map = new HashMap<>(); //将缓存中的实时数据放到map中方便进行遍历 for (MonitorDataValueEntity dateValue : monitorDataEntity.getDataValues()) { map.put(dateValue.getAttributeId(), dateValue); } //判断如果是标签则进行map中取值 if (item.getMonitorType().equals(0L))//标签 { item.setMonitorValue(String.format("%.3f", map.get(item.getAttributeId()).getDataValue()) + (StringUtils.isNotEmpty(map.get(item.getAttributeId()).getUnit())?map.get(item.getAttributeId()).getUnit():"")); //判断是否报警 if (mapAlarm.containsKey(item.getAttributeId())) item.setIsAlarm(1); else item.setIsAlarm(0); } } } } return new AjaxMessage<>(ResultStatus.OK, page); } @RequestMapping(value="getDeviceParmByDeviceId" , method = RequestMethod.GET) @ApiOperation(value = "查询单个设备参数信息(标签设置)") public AjaxMessage> getByDeviceId(@ApiParam(value = "设备id",required = true) @RequestParam Integer sceneId,@ApiParam(value = "设备id",required = true) @RequestParam Integer id){ return new AjaxMessage<>(ResultStatus.OK, deviceParmService.selectByDeviceIdForGis(sceneId,id)); } /** * 新增 */ @ApiOperation(value = "单个新增") @RequestMapping(value = "/add", method = RequestMethod.POST) @ResponseBody public AjaxMessage addMonitorInfo(@ApiParam(value = "标签信息", required = true) @RequestBody MonitorInfoEntity monitorInfo) { if (monitorInfo == null) { return new AjaxMessage<>(ResultStatus.DEVICE_PARENT_ALREADY_EXISTS); } LoginUser currentUser = UserUtil.getCurrentUser(); monitorInfo.setTenantId(currentUser.getTenantId()); monitorInfo.setStatus(1); monitorInfo.setDateCreate(new Date()); monitorInfo.setDateUpdate(new Date()); monitorInfo.setCreateBy(currentUser.getName()); monitorInfo.setUpdateBy(currentUser.getName()); //校验参数 int result = monitorInfoService.addMonitorInfo(monitorInfo) ? 1 : 0; return new AjaxMessage<>(ResultStatus.OK, result); } /** * 批量新增 */ @RequestMapping(value = "/batchAdd", method = RequestMethod.POST) @ResponseBody @ApiOperation(value = "批量新增或修改(按设备)") public AjaxMessage addMonitorInfo(@ApiParam(value = "标签信息", required = true) @RequestBody ArrayList monitorInfos) { LoginUser currentUser = UserUtil.getCurrentUser(); if (monitorInfos.size() == 0) { return new AjaxMessage<>(ResultStatus.DEVICE_PARENT_ALREADY_EXISTS); } for (MonitorInfoEntity item : monitorInfos) { item.setTenantId(currentUser.getTenantId()); item.setStatus(1); item.setDateCreate(new Date()); item.setDateUpdate(new Date()); item.setCreateBy(currentUser.getName()); item.setUpdateBy(currentUser.getName()); } int result = monitorInfoService.saveOrUpdateBatch(monitorInfos) ? 1 : 0; return new AjaxMessage<>(ResultStatus.OK, result); } /** * 修改 */ @ApiOperation(value = "按ID查询标签") @RequestMapping(value = "/selectById", method = RequestMethod.GET) public AjaxMessage selectById(@ApiParam(value = "ID", required = true) @RequestParam Long id) { MonitorInfoEntity monitorInfo = monitorInfoService.findMonitorInfoById(id); return new AjaxMessage<>(ResultStatus.OK, monitorInfo); } /** * 修改保存标签信息 */ @ApiOperation(value = "单个编辑") @RequestMapping(value = "/edit", method = RequestMethod.POST) @ResponseBody public AjaxMessage editMonitorInfo(@ApiParam(value = "标签信息", required = true) @RequestBody MonitorInfoEntity monitorInfo) { int result = monitorInfoService.updateMonitorInfoById(monitorInfo) ? 1 : 0; return new AjaxMessage<>(ResultStatus.OK, result); } /** * 删除 */ @ApiOperation(value = "批量删除") @RequestMapping(value = "/deleteByIds", method = RequestMethod.POST) @ResponseBody public AjaxMessage del(@ApiParam(value = "场景类型ID", required = true) @RequestBody Long[] ids) { int result = monitorInfoService.delMonitorInfoByIds(ids) ? 1 : 0; return new AjaxMessage<>(ResultStatus.OK, result); } }