lin %!s(int64=3) %!d(string=hai) anos
pai
achega
22c5d835f4
Modificáronse 14 ficheiros con 273 adicións e 63 borrados
  1. 52 10
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/install/InstallDetailDto.java
  2. 20 0
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/vo/PlanStatisticsVo.java
  3. 25 0
      zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/vo/StatisticsDeviceStatusVo.java
  4. 3 1
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/DeviceAlarmMapper.java
  5. 9 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/InstallPlanMapper.java
  6. 33 21
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/MeterReadWaterRecordMapper.java
  7. 10 1
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/DeviceAlarmMapper.xml
  8. 0 1
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/DeviceMapper.xml
  9. 56 3
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/InstallPlanMapper.xml
  10. 9 0
      zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/MeterReadWaterRecordMapper.xml
  11. 12 1
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/InstallPlanController.java
  12. 5 1
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/DeviceServiceImpl.java
  13. 4 1
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/install/InstallPlanService.java
  14. 35 23
      zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/install/impl/InstallPlanServiceImpl.java

+ 52 - 10
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/install/InstallDetailDto.java

@@ -3,27 +3,69 @@ package com.zcxk.rmcp.api.dto.install;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 
 @Data
 public class InstallDetailDto {
+    private Integer id;
 
-    @ApiModelProperty(value="小区名称1",position = 1)
+    @ApiModelProperty(value="计划名称")
+    private String planName;
+
+    @ApiModelProperty(value="总户数")
+    private Integer doorNum;
+
+    @ApiModelProperty(value="验收数")
+    private Integer acceptedNum;
+
+    @ApiModelProperty(value="安装数")
+    private Integer installNum;
+
+    @ApiModelProperty(value="创建时间")
+    private LocalDateTime createDate;
+
+    @ApiModelProperty(value="产品名称")
+    private String productName;
+
+    @ApiModelProperty(value="产品型号")
+    private String productModel;
+
+    @ApiModelProperty(value="厂商名称")
+    private String manufacturerName;
+
+    @ApiModelProperty(value="公司名称")
+    private String companyName;
+
+    @ApiModelProperty(value="部门名称")
+    private String deptName;
+
+    @ApiModelProperty(value="小区名称")
     private String communityName;
 
-    @ApiModelProperty(value="是否启用单元 0:否 1:是", position = 2)
-    private Integer enableUnit;
+    @ApiModelProperty(value="地址")
+    private String address;
+
+    @ApiModelProperty(value = "省", position = 101)
+    private String provinceName;
+
+    @ApiModelProperty(value = "市", position = 102)
+    private String cityName;
 
-    @ApiModelProperty(value = "已安总数", position = 3)
-    private Integer installedNumber = 0;
+    @ApiModelProperty(value = "区", position = 103)
+    private String regionName;
 
-    @ApiModelProperty(value = "总数", position = 4)
-    private Integer totalNumber = 0;
+    @ApiModelProperty(value="经度")
+    private BigDecimal lng;
+
+    @ApiModelProperty(value="维度")
+    private BigDecimal lat;
+
+    @ApiModelProperty(value="是否启用单元 0:否 1:是", position = 2)
+    private Integer enableUnit;
 
     @ApiModelProperty(value="安装数据", position = 101)
     List<InstallPlanDataDto> installPlanDataList;
 
-    public static void main(String[] args) {
-        System.out.println("11");
-    }
 }

+ 20 - 0
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/vo/PlanStatisticsVo.java

@@ -0,0 +1,20 @@
+package com.zcxk.rmcp.api.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author linqingwei
+ * @date 2021-08-16 10:55
+ */
+@Data
+public class PlanStatisticsVo {
+
+    @ApiModelProperty(value="抄表率")
+    private StatisticsReadRateVo readRate;
+
+    @ApiModelProperty(value="状态数")
+    private StatisticsDeviceStatusVo deviceStatus;
+}

+ 25 - 0
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/vo/StatisticsDeviceStatusVo.java

@@ -0,0 +1,25 @@
+package com.zcxk.rmcp.api.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author linqingwei
+ * @date 2021-08-16 14:29
+ */
+@Data
+public class StatisticsDeviceStatusVo {
+
+    @ApiModelProperty(value="正常数")
+    private Integer normalCount;
+
+    @ApiModelProperty(value="离线数")
+    private Integer offlineCount;
+
+    @ApiModelProperty(value="告警数")
+    private Integer alarmCount;
+
+    @ApiModelProperty(value="未启用数")
+    private Integer unusedCount;
+
+}

+ 3 - 1
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/DeviceAlarmMapper.java

@@ -24,5 +24,7 @@ public interface DeviceAlarmMapper {
 
     List<DeviceAlarm> getLastDeviceErrorList(Long deviceId);
 
-    List<DeviceAlarmVo> findList(@Param("dto") DeviceAlarmQueryDto dto,@Param("userCondition") UserCondition userCondition);
+    List<DeviceAlarmVo> findList(@Param("dto") DeviceAlarmQueryDto dto, @Param("userCondition") UserCondition userCondition);
+
+    int deleteByDeviceId(@Param("deviceIds") List<Long> deviceIds);
 }

+ 9 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/InstallPlanMapper.java

@@ -1,8 +1,11 @@
 package com.zcxk.rmcp.core.dao;
 
 import com.zcxk.core.common.pojo.UserCondition;
+import com.zcxk.rmcp.api.dto.install.InstallDetailDto;
 import com.zcxk.rmcp.api.query.InstallPlanQueryCondition;
 import com.zcxk.rmcp.api.vo.InstallPlanVo;
+import com.zcxk.rmcp.api.vo.StatisticsDeviceStatusVo;
+import com.zcxk.rmcp.api.vo.StatusStatisticsVo;
 import com.zcxk.rmcp.core.entity.InstallPlan;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -22,4 +25,10 @@ public interface InstallPlanMapper {
     InstallPlan findById(@Param("planId") Integer planId);
 
     List<InstallPlanVo> findList(@Param("condition") InstallPlanQueryCondition condition, @Param("userCondition") UserCondition userCondition);
+
+    int batchDelete(@Param("ids") List<Integer> ids);
+
+    StatisticsDeviceStatusVo totalDeviceStatus(@Param("planId") Integer planId);
+
+    InstallDetailDto findDetail(@Param("planId")Integer planId);
 }

+ 33 - 21
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/dao/MeterReadWaterRecordMapper.java

@@ -2,6 +2,7 @@ package com.zcxk.rmcp.core.dao;
 
 import com.zcxk.core.common.pojo.UserCondition;
 import com.zcxk.rmcp.api.vo.MeterReadWaterRecordVo;
+import com.zcxk.rmcp.api.vo.StatisticsReadRateVo;
 import com.zcxk.rmcp.core.entity.MeterReadWaterRecord;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -18,31 +19,42 @@ import java.util.List;
 public interface MeterReadWaterRecordMapper {
 
     /**
-    * 添加数据
-    * @author Andy
-    * @date 14:54 2021/8/3
-    * @param meterReadWaterRecord:
-    * @return void
-    **/
+     * 添加数据
+     *
+     * @param meterReadWaterRecord:
+     * @return void
+     * @author Andy
+     * @date 14:54 2021/8/3
+     **/
     void insertMeterReadWaterRecord(MeterReadWaterRecord meterReadWaterRecord);
 
     /**
-    * 批量操作
-    * @author Andy
-    * @date 14:54 2021/8/3
-    * @param meterReadWaterRecord:
-    * @return void
-    **/
+     * 批量操作
+     *
+     * @param meterReadWaterRecord:
+     * @return void
+     * @author Andy
+     * @date 14:54 2021/8/3
+     **/
     void batchInsert(@Param("waterRecordList") List<MeterReadWaterRecord> meterReadWaterRecord);
 
     /**
-    * 查询小区用水量
-    * @author Andy
-    * @date 14:54 2021/8/3
-    * @param beginDate:
-    * @param endDate:
-    * @param condition:
-    * @return java.util.List<com.zcxk.rmcp.api.vo.MeterReadWaterRecordVo>
-    **/
-    List<MeterReadWaterRecordVo> listWaterRecord(@Param("beginDate")int beginDate, @Param("endDate")int endDate, @Param("userCondition") UserCondition condition);
+     * 查询小区用水量
+     *
+     * @param beginDate:
+     * @param endDate:
+     * @param condition:
+     * @return java.util.List<com.zcxk.rmcp.api.vo.MeterReadWaterRecordVo>
+     * @author Andy
+     * @date 14:54 2021/8/3
+     **/
+    List<MeterReadWaterRecordVo> listWaterRecord(@Param("beginDate") int beginDate, @Param("endDate") int endDate, @Param("userCondition") UserCondition condition);
+
+    /**
+     * @param planId
+     * @return
+     * @description 统计计划抄表率
+     * @author linqingwei
+     **/
+    StatisticsReadRateVo totalReadRate(@Param("planId") Integer planId);
 }

+ 10 - 1
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/DeviceAlarmMapper.xml

@@ -276,7 +276,7 @@
     left join rmcp_org roc on (roc.ID = rd.company_org_id)
     left join rmcp_org rod on (rod.ID = rd.dept_org_id)
     <where>
-      rda.status = 1
+      rda.status = 1 and rd.status = 1
       <if test="dto.categoryId != null">and rd.category_id = #{dto.categoryId}</if>
       <if test="dto.productId != null">and rd.product_id = #{dto.productId}</if>
       <if test="dto.deviceNo != null and dto.deviceNo != ''">and (rd.device_no LIKE concat('%',#{dto.deviceNo},'%') or rd.meter_no LIKE concat('%',#{dto.deviceNo},'%') )</if>
@@ -288,4 +288,13 @@
     </where>
     order by rda.last_alarm_time desc
   </select>
+
+  <update id="deleteByDeviceId">
+    UPDATE rmcp_device_alarm
+    set
+    status = 0,
+    update_date=now()
+    WHERE `status` = 1
+    and device_id in <foreach collection="deviceIds" item="item" open="(" separator="," close=")">#{item}</foreach>
+  </update>
 </mapper>

+ 0 - 1
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/DeviceMapper.xml

@@ -632,7 +632,6 @@
       <if test="deptOrgId != null">and rd.dept_org_id = #{deptOrgId}</if>
       <if test="productId != null">and rd.product_id = #{productId}</if>
     </where>
-    order by rd.create_date desc
   </select>
 
   <select id="findByDeviceNo" resultMap="BaseResultMap">

+ 56 - 3
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/InstallPlanMapper.xml

@@ -277,9 +277,9 @@
     select
     rip.id,
     rip.plan_name,
-    rip.door_num,
-    rip.accepted_num,
-    rip.install_num,
+    (select count(1) from rmcp_install_list where rc.status = 1 and install_plan_id = rip.id) as door_num,
+    (select count(1) from rmcp_install_list where rc.status = 1 and install_plan_id = rip.id and is_accepted = 1) as accepted_num,
+    (select count(1) from rmcp_install_list where rc.status = 1 and install_plan_id = rip.id and is_installed = 1) as install_num,
     rip.create_date,
     rp.product_name,
     rp.product_model,
@@ -338,4 +338,57 @@
       </if>
     </if>
   </sql>
+
+  <update id="batchDelete">
+    update rmcp_install_plan set status = 0,update_date = now()
+    where status = 1
+    and id in <foreach collection="ids" item="item" open="(" separator="," close=")">#{item}</foreach>
+  </update>
+
+  <select id="totalDeviceStatus" resultType="com.zcxk.rmcp.api.vo.StatisticsDeviceStatusVo">
+    SELECT
+    ifnull(SUM(IF(rd.`device_status` = 1, 1, 0)),0) as normal_count,
+    ifnull(SUM(IF(rd.`device_status` = 2, 1, 0)),0) as offline_count,
+    ifnull(SUM(IF(rd.`device_status` = 3, 1, 0)),0) as alarm_count,
+    ifnull(SUM(IF(rd.`device_status` = 4, 1, 0)),0) as unused_count
+    FROM
+    rmcp_install_list ril
+    INNER JOIN rmcp_device rd on rd.id = ril.device_id
+    WHERE
+    ril.status = 1 and rd.status = 1
+    and ril.install_plan_id = #{planId}
+  </select>
+
+  <select id="findDetail" resultType="com.zcxk.rmcp.api.dto.install.InstallDetailDto">
+    select
+      rip.id,
+      rip.plan_name,
+      (select count(1) from rmcp_install_list where rc.status = 1 and install_plan_id = rip.id) as door_num,
+      (select count(1) from rmcp_install_list where rc.status = 1 and install_plan_id = rip.id and is_accepted = 1) as accepted_num,
+      (select count(1) from rmcp_install_list where rc.status = 1 and install_plan_id = rip.id and is_installed = 1) as install_num,
+      rip.create_date,
+      rp.product_name,
+      rp.product_model,
+      rm.name as manufacturer_name,
+      roc.ORG_NAME as company_name,
+      rod.ORG_NAME as dept_name,
+      rc.name as community_name,
+      a1.name as province_name,
+      a2.name as city_name,
+      a3.name as region_name,
+      rip.enable_unit,
+      rc.address,
+      rc.lat,
+      rc.lng
+    from rmcp_install_plan rip
+      left join rmcp_product rp on (rp.id = rip.product_id)
+      left join rmcp_manufacturer rm on (rm.id = rp.manufacturer_id)
+      left join rmcp_org roc on (roc.ID = rip.company_org_id)
+      left join rmcp_org rod on (rod.ID = rip.dept_org_id)
+      left join rmcp_community rc on (rc.id = rip.community_id)
+      left join rmcp_area a1 on a1.id = rc.province
+      left join rmcp_area a2 on a2.id = rc.city
+      left join rmcp_area a3 on a3.id = rc.region
+    where rip.status = 1 and rip.id = #{planId}
+  </select>
 </mapper>

+ 9 - 0
zoniot-rmcp/zoniot-rmcp-core/src/main/java/com/zcxk/rmcp/core/mapper/MeterReadWaterRecordMapper.xml

@@ -119,4 +119,13 @@
   <include refid="permissionCondition"></include>
   group by community_id, stat_day
   </select>
+
+  <select id="totalReadRate" resultType="com.zcxk.rmcp.api.vo.StatisticsReadRateVo">
+    select
+    ifnull(SUM(IF(rmrr.`read_status` = 1, 1, 0)),0) as un_read_times,
+    ifnull(SUM(IF(rmrr.`read_status` = 2, 1, 0)),0) as real_read_times
+    from rmcp_install_list ril
+    inner join rmcp_meter_read_record rmrr on (ril.device_id = rmrr.device_id and rmrr.read_date = DATE_FORMAT( date_add(NOW(), interval -1 day), '%Y%m%d' ))
+    where ril.status = 1 and ril.install_plan_id = #{planId}
+  </select>
 </mapper>

+ 12 - 1
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/InstallPlanController.java

@@ -6,7 +6,9 @@ import com.zcxk.rmcp.api.dto.install.InstallDetailDto;
 import com.zcxk.rmcp.api.dto.install.InstallInputDto;
 import com.zcxk.rmcp.api.dto.install.InstallPlanInputDto;
 import com.zcxk.rmcp.api.query.InstallPlanQueryCondition;
+import com.zcxk.rmcp.api.vo.DeviceStatisticsVo;
 import com.zcxk.rmcp.api.vo.InstallPlanVo;
+import com.zcxk.rmcp.api.vo.PlanStatisticsVo;
 import com.zcxk.rmcp.core.entity.InstallList;
 import com.zcxk.rmcp.web.service.install.InstallListService;
 import com.zcxk.rmcp.web.service.install.InstallPlanService;
@@ -75,7 +77,7 @@ public class InstallPlanController {
     public AjaxMessage<Void> batchDel(
             @ApiParam(value = "安装计划id", required = true) @RequestParam(required = true)  List<Integer> ids
     ) {
-        installPlanService.batchDel(ids);
+        installPlanService.batchDelete(ids);
         return AjaxMessage.success();
     }
 
@@ -120,6 +122,15 @@ public class InstallPlanController {
     }
 
 
+    @GetMapping("/statistics")
+    @ApiOperation(value = "设备统计")
+    public AjaxMessage<PlanStatisticsVo> statisticsDevice(
+            @ApiParam(value = "安装计划id", required = true) @RequestParam(required = true) Integer id
+    ) {
+        return AjaxMessage.success(installPlanService.statistics(id));
+    }
+
+
 
 
 

+ 5 - 1
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/DeviceServiceImpl.java

@@ -22,6 +22,7 @@ import com.zcxk.rmcp.api.enums.DeviceStatusEnum;
 import com.zcxk.rmcp.api.enums.RmcpErrorEnum;
 import com.zcxk.rmcp.api.enums.ValveStatusEnum;
 import com.zcxk.rmcp.api.vo.*;
+import com.zcxk.rmcp.core.dao.DeviceAlarmMapper;
 import com.zcxk.rmcp.core.dao.DeviceMapper;
 import com.zcxk.rmcp.core.dao.InstallListMapper;
 import com.zcxk.rmcp.core.entity.Community;
@@ -73,6 +74,8 @@ public class DeviceServiceImpl implements DeviceService{
     private OrgService orgService;
     @Resource
     private InstallListMapper installListMapper;
+    @Resource
+    private DeviceAlarmMapper deviceAlarmMapper;
 
     @Override
     public int insertSelective(Device record) {
@@ -190,7 +193,8 @@ public class DeviceServiceImpl implements DeviceService{
         deviceMapper.delByIds(ids);
         // 删除计划清单
         installListMapper.deleteByDeviceId(ids);
-        // TODO: 2021/7/26 删除告警记录
+        // 删除告警记录
+        deviceAlarmMapper.deleteByDeviceId(ids);
         log.info("end DeviceServiceImpl batchDel ");
     }
 

+ 4 - 1
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/install/InstallPlanService.java

@@ -6,6 +6,7 @@ import com.zcxk.rmcp.api.dto.install.InstallDetailDto;
 import com.zcxk.rmcp.api.dto.install.InstallPlanInputDto;
 import com.zcxk.rmcp.api.query.InstallPlanQueryCondition;
 import com.zcxk.rmcp.api.vo.InstallPlanVo;
+import com.zcxk.rmcp.api.vo.PlanStatisticsVo;
 import com.zcxk.rmcp.core.entity.InstallPlan;
 import com.zcxk.rmcp.web.excel.model.ExcelData;
 import com.zcxk.rmcp.web.excel.model.InstallPlanExcelData;
@@ -50,7 +51,7 @@ public interface InstallPlanService{
      * @return void
      * @author linqingwei
      **/
-    void batchDel(List<Integer> ids);
+    void batchDelete(List<Integer> ids);
 
     /*
      * @description 全部删除
@@ -109,4 +110,6 @@ public interface InstallPlanService{
      * @author linqingwei
      **/
     void saveExcelData(ExcelData excelData);
+
+    PlanStatisticsVo statistics(Integer id);
 }

+ 35 - 23
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/install/impl/InstallPlanServiceImpl.java

@@ -10,17 +10,11 @@ import com.zcxk.core.common.util.BeanCopyUtils;
 import com.zcxk.core.common.util.SnowflakeIdWorker;
 import com.zcxk.core.oauth2.util.UserUtil;
 import com.zcxk.core.mysql.pageing.Pagination;
-import com.zcxk.rmcp.api.dto.install.InstallDetailDto;
-import com.zcxk.rmcp.api.dto.install.InstallListDto;
-import com.zcxk.rmcp.api.dto.install.InstallPlanDataDto;
-import com.zcxk.rmcp.api.dto.install.InstallPlanInputDto;
+import com.zcxk.rmcp.api.dto.install.*;
 import com.zcxk.rmcp.api.enums.RmcpErrorEnum;
 import com.zcxk.rmcp.api.query.InstallPlanQueryCondition;
-import com.zcxk.rmcp.api.vo.InstallListVo;
-import com.zcxk.rmcp.api.vo.InstallPlanVo;
-import com.zcxk.rmcp.core.dao.CommunityMapper;
-import com.zcxk.rmcp.core.dao.InstallListMapper;
-import com.zcxk.rmcp.core.dao.InstallPlanDataMapper;
+import com.zcxk.rmcp.api.vo.*;
+import com.zcxk.rmcp.core.dao.*;
 import com.zcxk.rmcp.core.entity.*;
 import com.zcxk.rmcp.web.excel.download.adapter.InstallMeterExcelFillAdapter;
 import com.zcxk.rmcp.web.excel.download.adapter.InstallPlanExcelFillAdapter;
@@ -40,7 +34,6 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 
-import com.zcxk.rmcp.core.dao.InstallPlanMapper;
 import org.springframework.transaction.TransactionDefinition;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -83,6 +76,8 @@ public class InstallPlanServiceImpl implements InstallPlanService {
     private ProductService productService;
     @Autowired
     private OrgService orgService;
+    @Autowired
+    private MeterReadWaterRecordMapper meterReadWaterRecordMapper;
 
 
     @Override
@@ -229,26 +224,31 @@ public class InstallPlanServiceImpl implements InstallPlanService {
 
 
     @Override
-    public void batchDel(List<Integer> ids) {
-
+    public void batchDelete(List<Integer> ids) {
+        installPlanMapper.batchDelete(ids);
     }
 
     @Override
     public void allDel(InstallPlanQueryCondition condition) {
-
+        List<InstallPlanVo> list = installPlanMapper.findList(condition,UserUtil.getCurrentUser().getUserCondition());
+        List<Integer> ids = new ArrayList<>();
+        if (list != null && list.size() > 0) {
+            for (InstallPlanVo vo : list) {
+                ids.add(vo.getId());
+            }
+            this.batchDelete(ids);
+        }
     }
 
     @Override
     public InstallDetailDto getInstallDetail(Integer id) {
-        InstallDetailDto installDetail = new InstallDetailDto();
+        //InstallDetailDto installDetail = new InstallDetailDto();
         List<InstallPlanDataDto> installPlanDataDTOList = newArrayList();
 
         //1、计划信息
-        InstallPlan installPlan = installPlanMapper.findById(id);
-        if (installPlan != null) {
-            installDetail.setCommunityName(installPlan.getPlanName());
-            installDetail.setEnableUnit(installPlan.getEnableUnit());
-        }
+        //InstallPlan installPlan = installPlanMapper.findById(id);
+        InstallDetailDto installDetail = installPlanMapper.findDetail(id);
+
 
         //2、计划数据(楼栋、单元、楼层)
         List<InstallPlanData> installPlanDataList = installPlanDataMapper.fondByPlanId(id);
@@ -282,8 +282,8 @@ public class InstallPlanServiceImpl implements InstallPlanService {
                     installedNumber++;
                 }
             }
-            installDetail.setTotalNumber(installLists.size());
-            installDetail.setInstalledNumber(installedNumber);
+            //installDetail.setTotalNumber(installLists.size());
+            //installDetail.setInstalledNumber(installedNumber);
         }
 
         //4、组装树形数据
@@ -455,10 +455,10 @@ public class InstallPlanServiceImpl implements InstallPlanService {
 
         log.info("saveExcelData excelData:{}",JSON.toJSONString(excelData));
 
-        if (excelData.getInstallList().size() > 0) {
+        if (!excelData.getInstallList().isEmpty()) {
             installListMapper.batchInsert(excelData.getInstallList());
         }
-        if (excelData.getInstallPlanDataList().size() > 0) {
+        if (!excelData.getInstallPlanDataList().isEmpty()) {
             installPlanDataMapper.batchInsert(excelData.getInstallPlanDataList());
         }
 
@@ -468,4 +468,16 @@ public class InstallPlanServiceImpl implements InstallPlanService {
         updateInstallPlan.setEnableUnit(excelData.getEnableUnit());
         this.updateByPrimaryKeySelective(updateInstallPlan);
     }
+
+    @Override
+    public PlanStatisticsVo statistics(Integer planId) {
+        PlanStatisticsVo planStatisticsVo = new PlanStatisticsVo();
+        StatisticsDeviceStatusVo deviceStatusVo = installPlanMapper.totalDeviceStatus(planId);
+
+        StatisticsReadRateVo readRateVo =  meterReadWaterRecordMapper.totalReadRate(planId);
+
+        planStatisticsVo.setReadRate(readRateVo);
+        planStatisticsVo.setDeviceStatus(deviceStatusVo);
+        return planStatisticsVo;
+    }
 }