فهرست منبع

地图详细信息展示

wangyangyang 4 سال پیش
والد
کامیت
1a7f149d62

+ 29 - 1
sms_water/src/main/java/com/huaxu/controller/ComDisplayController.java

@@ -9,6 +9,7 @@ import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.ResultStatus;
 import com.huaxu.service.*;
 import com.huaxu.util.ByteArrayUtils;
+import com.huaxu.util.OrgInfoUtil;
 import com.huaxu.util.RedisUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -41,6 +42,10 @@ public class ComDisplayController {
     private MonitorInfoService monitorInfoService;
     @Autowired
     private OnlineMonitorService onlineMonitorService;
+    @Autowired
+    private ComdisplayMapLocationService comdisplayMapLocationService;
+    @Autowired
+    private OrgInfoUtil orgInfoUtil;
 
     @RequestMapping(value = "waterSupplyCharts", method = RequestMethod.GET)
     @ApiOperation(value = "制水电耗对比曲线图")
@@ -62,7 +67,7 @@ public class ComDisplayController {
             DeviceDto deviceDto = new DeviceDto();
             deviceDto.setSceneIds(sceneService.findByParentIdsLike(itemScene.getId()));
             if (deviceDto.getSceneIds().size() == 0)
-                return null;
+                continue;
             devices.addAll(deviceService.selectList(deviceDto));
             //取前一天
             LocalDateTime dateTime = LocalDateTime.now().plusDays(-1);
@@ -136,4 +141,27 @@ public class ComDisplayController {
         List<SecDataCollectDto> result = onlineMonitorService.selectMapForWholeCompany(monitorDataCollectDto);
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
+    @RequestMapping(value="selectMapDataForCompany" , method = RequestMethod.GET)
+    @ApiOperation(value = "地图详细信息展示")
+    public AjaxMessage<List<ComdisplayInfoDto>> selectMapDataForCompany() {
+        List<ComdisplayInfoDto> receFee = comdisplayMapLocationService.selectMapDataForCompany();
+        for (ComdisplayInfoDto item : receFee) {
+            item.setCompanyOrgName(orgInfoUtil.getOrgName(item.getCompanyOrgId()));
+            Double waterUsage = item.getWaterUsage() != null ? item.getWaterUsage() : 0d;//售水量
+            //查询子公司的取水量、制水量 产销差(制水量-售水量)/制水量  X 100%
+            ComdisplayInfoDto comdisplayInfoDto= comdisplayMapLocationService.selectMapDataForCompany(Long.valueOf(item.getCompanyOrgId()));
+            if(comdisplayInfoDto!=null)
+            {
+                item.setIntakeWaterUsage(comdisplayInfoDto.getIntakeWaterUsage());
+                item.setYieldWaterUsage(comdisplayInfoDto.getYieldWaterUsage());
+                if(comdisplayInfoDto.getYieldWaterUsage()!=null&&comdisplayInfoDto.getYieldWaterUsage()>0d)
+                {
+                    item.setWaterFeeRecoveryRate(Double.valueOf(Math.round(((comdisplayInfoDto.getYieldWaterUsage()-waterUsage)/comdisplayInfoDto.getYieldWaterUsage())*100)));
+                }
+            }
+        }
+        return new AjaxMessage<>(ResultStatus.OK, receFee);
+    }
+
+
 }

+ 4 - 1
sms_water/src/main/java/com/huaxu/dao/ComdisplayMapLocationMapper.java

@@ -1,5 +1,6 @@
 package com.huaxu.dao;
 
+import com.huaxu.dto.ComdisplayInfoDto;
 import com.huaxu.entity.ComdisplayMapLocationEntity;
 import java.io.Serializable;
 import java.util.List;
@@ -23,5 +24,7 @@ public interface ComdisplayMapLocationMapper extends BaseMapper<ComdisplayMapLoc
 
      List<ComdisplayMapLocationEntity> findList(ComdisplayMapLocationEntity comdisplayMapLocationEntity);
 
-     /**删除相关方法  使用mybatis-plus集成的 **/
+     List<ComdisplayInfoDto> selectMapDataForCompany(@Param(value = "tenantId") String tenantId);
+
+    /**删除相关方法  使用mybatis-plus集成的 **/
 }

+ 54 - 0
sms_water/src/main/java/com/huaxu/dto/ComdisplayInfoDto.java

@@ -0,0 +1,54 @@
+package com.huaxu.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.common.converter.Double1Serializer;
+import com.huaxu.common.converter.Double3Serializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "子公司信息展示")
+public class ComdisplayInfoDto {
+
+    @ApiModelProperty(value = "所属公司")
+    private Integer companyOrgId;
+
+    @ApiModelProperty("公司名称")
+    private String companyOrgName;
+
+    @ApiModelProperty(value = "左坐标")
+    private Double pointLeft;
+
+    @ApiModelProperty(value = "上坐标")
+    private Double pointTop;
+
+    @JsonSerialize(using = Double3Serializer.class)
+    @ApiModelProperty("取水量")
+    private Double intakeWaterUsage;
+
+    @JsonSerialize(using = Double3Serializer.class)
+    @ApiModelProperty("制水量")
+    private Double yieldWaterUsage;
+
+    @ApiModelProperty(value = "售水量")
+    private Double waterUsage;
+
+    @JsonSerialize(using = Double1Serializer.class)
+    @ApiModelProperty(value = "产销差")
+    private Double waterFeeRecoveryRate;
+
+    @ApiModelProperty(value = "总户数")
+    private Integer userMeterCount;
+
+    @ApiModelProperty(value = "抄表到户率")
+    private Double meterReadingArrivalRate;
+
+    @ApiModelProperty(value = "应收总金额")
+    private Double receivableTotalAmount;
+
+    @ApiModelProperty(value = "实收总金额")
+    private Double receivedTotalAmount;
+
+
+}

+ 89 - 3
sms_water/src/main/java/com/huaxu/service/ComdisplayMapLocationService.java

@@ -2,7 +2,19 @@ package com.huaxu.service;
 
 
 import com.huaxu.dao.ComdisplayMapLocationMapper;
+import com.huaxu.dto.ComdisplayInfoDto;
+import com.huaxu.dto.DeviceDto;
+import com.huaxu.dto.SceneDeviceAttributeDto;
+import com.huaxu.dto.SceneUsageDto;
 import com.huaxu.entity.ComdisplayMapLocationEntity;
+import com.huaxu.entity.MonitorDataEntity;
+import com.huaxu.entity.MonitorDataValueEntity;
+import com.huaxu.entity.SceneEntity;
+import com.huaxu.model.LoginUser;
+import com.huaxu.util.ByteArrayUtils;
+import com.huaxu.util.RedisUtil;
+import com.huaxu.util.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,9 +24,8 @@ import javax.annotation.Resource;
 
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Map;
-import java.util.List;
-import java.util.Arrays;
+import java.time.LocalDateTime;
+import java.util.*;
 
 /**
  * 地图坐标Service接口
@@ -27,6 +38,14 @@ public class ComdisplayMapLocationService extends ServiceImpl<ComdisplayMapLocat
 
     @Resource
     private ComdisplayMapLocationMapper comdisplayMapLocationMapper;
+    @Autowired
+    private SceneService sceneService;
+    @Autowired
+    private DeviceService deviceService;
+    @Autowired
+    private MonitorInfoService monitorInfoService;
+    @Autowired
+    private RedisUtil redisUtil;
     /**
      * 查列表
      */
@@ -75,4 +94,71 @@ public class ComdisplayMapLocationService extends ServiceImpl<ComdisplayMapLocat
     public ComdisplayMapLocationEntity findComdisplayMapLocationById(Long id) {
         return comdisplayMapLocationMapper.findComdisplayMapLocationById(id);
     }
+
+    public List<ComdisplayInfoDto> selectMapDataForCompany() {
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        return  comdisplayMapLocationMapper.selectMapDataForCompany(currentUser.getTenantId());
+    }
+    //按公司获取取水量和制水量
+    public ComdisplayInfoDto selectMapDataForCompany(Long companyOrgId) {
+        ComdisplayInfoDto sceneUsageDto = new ComdisplayInfoDto();
+        sceneUsageDto.setCompanyOrgId(companyOrgId.intValue());
+        List<SceneEntity> sceneEntities = sceneService.selectByTypeNameForCom(new SceneEntity(), companyOrgId);
+        for (SceneEntity itemScene : sceneEntities) {
+            //查询场景下的所有设备信息
+            List<DeviceDto> devices = new ArrayList<>();
+            DeviceDto deviceDto = new DeviceDto();
+            deviceDto.setSceneIds(sceneService.findByParentIdsLike(itemScene.getId()));
+            if (deviceDto.getSceneIds().size() == 0)
+                continue;
+            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());
+                sceneDeviceAttributeDto.setSceneId(itemScene.getId());
+                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);
+                    }
+                    for (SceneDeviceAttributeDto itemAttribute : sceneDeviceAttributeDtos) {
+                        Double attributeDiffValue = 0d;
+                        if (!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;
+                        }
+                    }
+                    if (sceneUsageDto.getYieldWaterUsage() == null)
+                        sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage());
+                    if (sceneUsageDto.getIntakeWaterUsage() == null)
+                        sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage());
+                }
+            }
+        }
+        return sceneUsageDto;
+    }
 }

+ 7 - 5
sms_water/src/main/java/com/huaxu/service/SceneService.java

@@ -392,11 +392,13 @@ public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
 
     public List<SceneEntity> selectByTypeNameForCom(SceneEntity sceneEntity, Long companyOrgId) {
         LoginUser currentUser = UserUtil.getCurrentUser();
-        sceneEntity.setTenantId(currentUser.getTenantId());
-        sceneEntity.setProgramItems(currentUser.getProgramItemList());
-        sceneEntity.setUserType(currentUser.getType());
-        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
-        sceneEntity.setPermissonType(currentUser.getPermissonType());
+        if (currentUser != null) {
+            sceneEntity.setTenantId(currentUser.getTenantId());
+            sceneEntity.setProgramItems(currentUser.getProgramItemList());
+            sceneEntity.setUserType(currentUser.getType());
+            //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+            sceneEntity.setPermissonType(currentUser.getPermissonType());
+        }
         sceneEntity.setCompanyOrgId(companyOrgId);
         return sceneMapper.selectByTypeName(sceneEntity);
     }

+ 19 - 0
sms_water/src/main/resources/mapper/ComdisplayMapLocationMapper.xml

@@ -66,4 +66,23 @@
             </if>
         </where>
     </select>
+    <select id="selectMapDataForCompany" resultType="com.huaxu.dto.ComdisplayInfoDto">
+    select a.COMPANY_ORG_ID as 'companyOrgId',a.POINT_LEFT as 'pointLeft',
+           a.POINT_TOP as 'pointTop',e.meterReadingArrivalRate,e.receivableTotalAmount,
+           e.receivedTotalAmount,e.userMeterCount,e.waterUsage
+    from  sms_comdisplay_map_location a
+    left join (select c.company_org_id,c.USER_METER_COUNT as 'userMeterCount',c.METER_READING_ARRIVAL_RATE  as 'meterReadingArrivalRate',
+                      c.RECEIVABLE_TOTAL_AMOUNT as 'receivableTotalAmount',c.RECEIVED_TOTAL_AMOUNT as 'receivedTotalAmount',
+                      c.METER_READING_USAGE as 'waterUsage'
+    from sms_month_revenue c
+    inner join (select b.company_org_id,max(b.collect_date) as  collect_date
+                from sms_month_revenue b
+                <if test="tenantId != null  and tenantId != ''">where b.TENANT_ID = #{tenantId}</if>
+                group by b.company_org_id ) d
+          on c.company_org_id=d.company_org_id and c.collect_date=d.collect_date
+          <if test="tenantId != null  and tenantId != ''">where c.TENANT_ID = #{tenantId}</if>
+       ) e on a.COMPANY_ORG_ID=e.company_org_id
+      where a.`STATUS`=1
+     <if test="tenantId != null  and tenantId != ''">and a.TENANT_ID = #{tenantId}</if>
+    </select>
 </mapper>

+ 7 - 2
sms_water/src/main/resources/mapper/SceneMapper.xml

@@ -229,8 +229,13 @@
         FROM sms_scene a
         <include refid="deviceJoins"/>
         <where>
-            a.parent_scene_id=0 and a.status=1 and a.enable_state=1 and s.scene_type_name=#{scene.sceneTypeName}
-
+            a.parent_scene_id=0 and a.status=1 and a.enable_state=1
+            <if test="scene.sceneTypeName == null ">
+             and (s.scene_type_name='水源' or s.scene_type_name='水厂')
+            </if>
+            <if test="scene.sceneTypeName != null ">
+                and s.scene_type_name=#{scene.sceneTypeName}
+            </if>
             <if test="scene.companyOrgId != null ">and a.COMPANY_ORG_ID=#{scene.companyOrgId}</if>
             <if test="scene.tenantId != null  and scene.tenantId != ''">and a.tenant_id = #{scene.tenantId}</if>
             <if test="scene.userType!=null and scene.userType!=-999 and scene.userType!=-9999 and  scene.programItems != null and scene.programItems.size() > 0">