Browse Source

优化统计分析-设备查询接口

develop
zhaoxianglong 9 months ago
parent
commit
02793aa285
  1. 27
      zc-business/src/main/java/com/zc/business/controller/StatusController.java
  2. 3
      zc-business/src/main/java/com/zc/business/mapper/StatusMapper.java
  3. 8
      zc-business/src/main/java/com/zc/business/service/impl/StatusService.java
  4. 38
      zc-business/src/main/resources/mapper/business/StatusMapper.xml

27
zc-business/src/main/java/com/zc/business/controller/StatusController.java

@ -89,30 +89,19 @@ public class StatusController extends BaseController {
status.setStartTime(todayStart);
status.setTime(currentTime);
String[] types = status.getType().split(",");
status.setTypes(types);
Map<String, Map<String, String>> maps = new HashMap<>();
List<Status> statuses = statusService.getStatusList(status);
for (String type : types) {
status.setType(type);
List<Status> listStatus = statusService.list(status);
// List<Status> listStatu=listStatus.stream().filter(iteam ->iteam.getType()!=null && iteam.getType().equals(type)).collect(Collectors.toList());
//根据时间分组
Map<String, List<Status>> map = listStatus.stream()
.collect(Collectors.groupingBy(Status -> (Status.getTime().getYear() + "-" + Status.getTime().getMonthValue() + "-" + Status.getTime().getDayOfMonth())));
//根据类型分组
// Map<String, List<Status>> maps = listStatu.stream().filter(iteam->iteam.getType()!=null).collect(Collectors.groupingBy(Status::getType));
//生成有序map
Map<String, List<Status>> mapTime = new TreeMap<>(map);
Map<String, String> mapSort = new TreeMap<>();
for (Map.Entry<String, List<Status>> entry : mapTime.entrySet()) {
List<Status> groupItems = entry.getValue();
long count = groupItems.stream().filter(iteam -> Objects.equals(iteam.getDeviceStatus(), "1")).count();
String onlineRate = String.format("%.2f%%", (double) count / groupItems.size() * 100);
mapSort.put(entry.getKey(), onlineRate);
}
maps.put(type, mapSort);
Map<String, String> collect = statuses.stream().filter(item -> Objects.equals(item.getType(), type))
.collect(Collectors.toMap(
item -> item.getTime().getYear() + "-" + item.getTime().getMonthValue() + "-" + item.getTime().getDayOfMonth(),
Status::getSuccessRate
));
maps.put(type, collect);
}
// Map<String, List<Status>> mapStatus = new TreeMap<>(maps);
return AjaxResult.success(maps);
}

3
zc-business/src/main/java/com/zc/business/mapper/StatusMapper.java

@ -1,9 +1,11 @@
package com.zc.business.mapper;
import com.zc.business.domain.Status;
import org.apache.ibatis.annotations.Param;
import org.json.JSONObject;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* @author mengff
@ -21,5 +23,6 @@ public interface StatusMapper {
List<Status> export(@Param("status")Status status);
List<Status> deviceStatusListById(@Param("status")Status status);
List<Status> listStatusByTypes(@Param("status")Status status);
List<Status> getStatusList(@Param("status")Status status);
}

8
zc-business/src/main/java/com/zc/business/service/impl/StatusService.java

@ -1,10 +1,12 @@
package com.zc.business.service.impl;
import com.zc.business.domain.Status;
import com.zc.business.mapper.StatusMapper;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @author mengff
@ -45,4 +47,10 @@ public class StatusService {
List<Status> list = statusMapper.listStatusByTypes(status);
return list;
}
public List<Status> getStatusList(Status status) {
List<Status> list = statusMapper.getStatusList(status);
return list;
}
}

38
zc-business/src/main/resources/mapper/business/StatusMapper.xml

@ -11,6 +11,7 @@
<result column="device_ip" jdbcType="VARCHAR" property="deviceIp"/>
<result column="success_rate" jdbcType="VARCHAR" property="successRate"/>
<result column="lost_rate" jdbcType="VARCHAR" property="lostRate"/>
<result column="success_rate" jdbcType="VARCHAR" property="successRate"/>
<result column="direction" jdbcType="VARCHAR" property="direction"/>
<result column="manufacturer" jdbcType="VARCHAR" property="production"/>
@ -187,6 +188,43 @@
</select>
<select id="getStatusList" parameterType="com.zc.business.domain.Status" resultMap="BaseResultMap">
SELECT COALESCE
(d.child_type,d.device_type ) AS type,
s.time,
ROUND( avg( s.success_rate ), 2 ) success_rate
FROM
status s
LEFT JOIN dc_device d ON s.device_id = d.id
<where>
<if test="status.time != null">
AND s.time BETWEEN #{status.startTime,jdbcType=DATE} AND #{status.time,jdbcType=DATE}
</if>
<if test="status.type != null">
AND (d.device_type in
<foreach item="typeItem" collection="status.types" open="(" separator="," close=")">
#{typeItem}
</foreach>
or d.child_type in
<foreach item="typeItem" collection="status.types" open="(" separator="," close=")">
#{typeItem}
</foreach>
)
</if>
<if test="status.deviceId != null">
AND s.device_id = #{status.deviceId}
</if>
<if test="status.useState != null and status.useState != 0">
AND d.use_state = #{status.useState}
</if>
GROUP BY
d.child_type,
d.device_type,
DAY (s.time)
</where>
</select>
<select id="listStatusBySection" parameterType="com.zc.business.domain.Status" resultMap="BaseResultMap">
select s.id, s.device_no, s.device_name, s.device_status,s.time,
d.device_ip,s.success_rate,s.lost_rate,d.direction,e.manufacturer,e.model,d.facilities_type,m.section_id,d.remark,COALESCE(d.child_type,

Loading…
Cancel
Save