123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- 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<SceneUsageDto> findTotalUsageBySceneId(@ApiParam(value = "场景ID", required = true) @RequestParam Long id) {
- SceneUsageDto sceneUsageDto = new SceneUsageDto();
- //查询场景下的所有设备信息
- List<DeviceDto> 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<SceneDeviceAttributeDto> 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<Long, MonitorDataValueEntity> 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<List<MonitorInfoEntity>> 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<MonitorInfoEntity> page = monitorInfoService.findList(monitorInfoEntity);
- for (MonitorInfoEntity item : page) {
- if (item.getMonitorType().equals(0L)) {
- //查询报警信息
- List<AlarmDetailsDto> alarmDetailsDtos = alarmDetailsService.selectByDeviceId(item.getDeviceId().intValue());
- Map<Integer, AlarmDetailsDto> 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<Long, MonitorDataValueEntity> 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<List<DeviceParmEntity>> 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<Integer> 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<Integer> addMonitorInfo(@ApiParam(value = "标签信息", required = true) @RequestBody ArrayList<MonitorInfoEntity> 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<MonitorInfoEntity> 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<Integer> 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<Integer> del(@ApiParam(value = "场景类型ID", required = true) @RequestBody Long[] ids) {
- int result = monitorInfoService.delMonitorInfoByIds(ids) ? 1 : 0;
- return new AjaxMessage<>(ResultStatus.OK, result);
- }
- }
|