Commit 3dd459fe authored by 赵啸非's avatar 赵啸非

添加报表统计

parent eaa5dfca
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
public enum TimeUnitEnum {
/** 日 */
DAY(1, "每日"),
/** 月 */
MONTH(2, "月"),
/** 年 */
YEAR(3, "年");
private int value;
private String desc;
TimeUnitEnum(int value, String desc) {
this.value = value;
this.desc = desc;
}
public int getValue() {
return this.value;
}
public String getDesc() {
return desc;
}
public static TimeUnitEnum getByValue(int value) {
for (TimeUnitEnum yesNo : TimeUnitEnum.values()) {
if (yesNo.getValue() == value) {
return yesNo;
}
}
return null;
}
public static Map<String,String> getEnumMap(int... eItem) {
Map<String,String> resultMap= new LinkedHashMap<String,String>();
for (TimeUnitEnum item : TimeUnitEnum.values()) {
try{
boolean hasE = false;
for (int e : eItem){
if(item.getValue()==e){
hasE = true;
break;
}
}
if(!hasE){
resultMap.put(item.getValue()+"", item.getDesc());
}
}catch(Exception ex){
}
}
return resultMap;
}
}
package com.mortals.xhx.module.device.dao; package com.mortals.xhx.module.device.dao;
import com.mortals.framework.dao.ICRUDDao; import com.mortals.framework.dao.ICRUDDao;
import com.mortals.framework.model.PageInfo;
import com.mortals.xhx.module.device.model.DeviceStatEntity; import com.mortals.xhx.module.device.model.DeviceStatEntity;
import com.mortals.xhx.module.device.model.DeviceStatQuery;
import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
/** /**
* 设备统计Dao * 设备统计Dao
* 设备统计 DAO接口 * 设备统计 DAO接口
* *
* @author zxfei * @author zxfei
* @date 2022-07-05 * @date 2022-07-05
*/ */
public interface DeviceStatDao extends ICRUDDao<DeviceStatEntity,Long>{ @Mapper
public interface DeviceStatDao extends ICRUDDao<DeviceStatEntity, Long> {
String SQLID_GET_STATLIST = "getStatList";
List<DeviceStatEntity> getStatList(DeviceStatQuery query, PageInfo pageInfo);
} }
package com.mortals.xhx.module.device.dao.ibatis; package com.mortals.xhx.module.device.dao.ibatis;
import org.springframework.stereotype.Repository; import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.ParamDto;
import com.mortals.xhx.module.device.dao.DeviceStatDao; import com.mortals.xhx.module.device.dao.DeviceStatDao;
import com.mortals.xhx.module.device.model.DeviceStatEntity; import com.mortals.xhx.module.device.model.DeviceStatEntity;
import java.util.Date; import com.mortals.xhx.module.device.model.DeviceStatQuery;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis; import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
/** /**
* 设备统计DaoImpl DAO接口 * 设备统计DaoImpl DAO接口
* *
* @author zxfei * @author zxfei
* @date 2022-07-05 * @date 2022-07-05
*/ */
@Repository("deviceStatDao") @Repository("deviceStatDao")
public class DeviceStatDaoImpl extends BaseCRUDDaoMybatis<DeviceStatEntity,Long> implements DeviceStatDao { public class DeviceStatDaoImpl extends BaseCRUDDaoMybatis<DeviceStatEntity, Long> implements DeviceStatDao {
@Override
public List<DeviceStatEntity> getStatList(DeviceStatQuery query, PageInfo pageInfo) {
ParamDto queryParam = super.getQueryParam(query);
if (pageInfo.getPrePageResult() == -1) {
return getSqlSession().selectList(SQLID_GET_STATLIST, queryParam);
} else {
RowBounds rowBounds = new RowBounds(pageInfo.getBeginIndex(), pageInfo.getPrePageResult());
return getSqlSession().selectList(SQLID_GET_STATLIST, queryParam, rowBounds);
}
}
} }
package com.mortals.xhx.module.device.service; package com.mortals.xhx.module.device.service;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.service.ICRUDService; import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.feign.site.ISiteFeign;
import com.mortals.xhx.module.device.model.DeviceStatEntity; import com.mortals.xhx.module.device.model.DeviceStatEntity;
import org.springframework.beans.factory.annotation.Autowired;
/** import java.util.List;
* DeviceStatService
*
* 设备统计 service接口
*
* @author zxfei
* @date 2022-07-05
*/
public interface DeviceStatService extends ICRUDService<DeviceStatEntity,Long>{
/**
* DeviceStatService
* <p>
* 设备统计 service接口
*
* @author zxfei
* @date 2022-07-05
*/
public interface DeviceStatService extends ICRUDService<DeviceStatEntity, Long> {
List<DeviceStatEntity> getBillInfos(Long siteId, Integer datePattern, PageInfo pageInfo, Context context);
} }
\ No newline at end of file
package com.mortals.xhx.module.device.service.impl; package com.mortals.xhx.module.device.service.impl;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl; import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.xhx.common.code.DaySelectEnum;
import com.mortals.xhx.common.code.TimeUnitEnum;
import com.mortals.xhx.module.device.dao.DeviceStatDao; import com.mortals.xhx.module.device.dao.DeviceStatDao;
import com.mortals.xhx.module.device.model.DeviceStatEntity; import com.mortals.xhx.module.device.model.DeviceStatEntity;
import com.mortals.xhx.module.device.model.DeviceStatQuery;
import com.mortals.xhx.module.device.service.DeviceStatService; import com.mortals.xhx.module.device.service.DeviceStatService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/** /**
* DeviceStatService * DeviceStatService
* 设备统计 service实现 * 设备统计 service实现
* *
* @author zxfei * @author zxfei
* @date 2022-07-05 * @date 2022-07-05
*/ */
@Service("deviceStatService") @Service("deviceStatService")
public class DeviceStatServiceImpl extends AbstractCRUDServiceImpl<DeviceStatDao, DeviceStatEntity, Long> implements DeviceStatService { public class DeviceStatServiceImpl extends AbstractCRUDServiceImpl<DeviceStatDao, DeviceStatEntity, Long> implements DeviceStatService {
// @Autowired
// private ISiteFeign siteFeign; @Override
// public List<DeviceStatEntity> find(DeviceStatEntity params, Context context) throws AppException {
// return super.find(params, context);
// @Override }
// protected void findAfter(DeviceStatEntity params, PageInfo pageInfo, Context context, List<DeviceStatEntity> list) throws AppException {
// SitePdu sitePdu = new SitePdu(); @Override
// sitePdu.setSize(-1); public Result<DeviceStatEntity> find(DeviceStatEntity query, PageInfo pageInfo, Context context) throws AppException {
// Map<Long, SitePdu> collect = siteFeign.list(sitePdu).getData().getData().stream().collect(Collectors.toMap(x -> x.getId(), y -> y)); Result<DeviceStatEntity> deviceStatEntityResult = new Result<>();
// if (!ObjectUtils.isEmpty(query.getSelected())) {
// list.stream().forEach(item->{ PageInfo page = new PageInfo();
// if(ObjectUtils.isEmpty()) List<DeviceStatEntity> billInfos;
// }); //转换日期
// switch (DaySelectEnum.getByValue(query.getSelected())) {
// case 今天:
// page.setPrePageResult(1);
// super.findAfter(params, pageInfo, context, list); billInfos = this.getBillInfos(query.getSiteId(), TimeUnitEnum.DAY.getValue(), pageInfo, context);
// } deviceStatEntityResult.setList(billInfos);
deviceStatEntityResult.setPageInfo(pageInfo);
break;
case 近七天:
page.setPrePageResult(7);
billInfos = this.getBillInfos(query.getSiteId(), TimeUnitEnum.DAY.getValue(), pageInfo, context);
deviceStatEntityResult.setList(billInfos);
deviceStatEntityResult.setPageInfo(pageInfo);
break;
case 近三十天:
page.setPrePageResult(30);
billInfos = this.getBillInfos(query.getSiteId(), TimeUnitEnum.DAY.getValue(), pageInfo, context);
deviceStatEntityResult.setList(billInfos);
deviceStatEntityResult.setPageInfo(pageInfo);
break;
case 近三月:
page.setPrePageResult(3);
billInfos = this.getBillInfos(query.getSiteId(), TimeUnitEnum.MONTH.getValue(), pageInfo, context);
deviceStatEntityResult.setList(billInfos);
deviceStatEntityResult.setPageInfo(pageInfo);
break;
case 今年:
page.setPrePageResult(1);
billInfos = this.getBillInfos(query.getSiteId(), TimeUnitEnum.YEAR.getValue(), pageInfo, context);
deviceStatEntityResult.setList(billInfos);
deviceStatEntityResult.setPageInfo(pageInfo);
break;
default:
break;
}
return deviceStatEntityResult;
} else {
return super.find(query, pageInfo, context);
}
}
@Override
public List<DeviceStatEntity> getBillInfos(Long siteId, Integer datePattern, PageInfo pageInfo, Context context) {
List<DeviceStatEntity> statList = new ArrayList<>();
DeviceStatQuery query = new DeviceStatQuery();
query.setId(siteId);
if (datePattern == TimeUnitEnum.DAY.getValue()) {
query.setGroupList(Arrays.asList("day"));
query.setOrderColList(Arrays.asList(new OrderCol("day", OrderCol.DESCENDING)));
statList = this.getDao().getStatList(query, pageInfo);
} else if (datePattern == TimeUnitEnum.MONTH.getValue()) {
query.setGroupList(Arrays.asList("month"));
query.setOrderColList(Arrays.asList(new OrderCol("month", OrderCol.DESCENDING)));
statList = this.getDao().getStatList(query, pageInfo);
} else if (datePattern == TimeUnitEnum.YEAR.getValue()) {
query.setGroupList(Arrays.asList("year"));
query.setOrderColList(Arrays.asList(new OrderCol("year", OrderCol.DESCENDING)));
statList = this.getDao().getStatList(query, pageInfo);
} else {
throw new AppException("不支持当前日期格式查询统计!");
}
return statList;
}
} }
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.device.dao.ibatis.DeviceStatDaoImpl">
<!-- 获取统计列表 -->
<select id="getStatList" parameterType="paramDto" resultMap="OrderStatisticsEntity-Map">
select
<!-- 获取分组字段 -->
<if test="groupList != null and !groupList.isEmpty()">
<foreach collection="groupList" open="" close="" index="index" item="item">
${item},
</foreach>
</if>
id,
siteId,
createTime,
<!-- 设备总数-->
max(IFNULL(a.deviceTotalCount, 0)) deviceTotalCount,
<!-- 新增减少设备数量-->
ROUND(avg(IFNULL(a.deviceAddCount,0)),0) deviceAddCount,
<!-- 监控站点数量-->
max(IFNULL(a.siteTotalCount, 0)) siteTotalCount,
<!-- 昨日新增站点数量-->
ROUND(avg(IFNULL(a.siteAddCount,0)),0) siteAddCount,
<!-- 在线设备数量-->
max(IFNULL(a.deviceOnlineCount,0)) deviceOnlineCount,
<!-- 在线率-->
ROUND(avg(IFNULL(a.deviceOnlineRatio,0.00)),2) deviceOnlineRatio,
<!-- 停用设备数量-->
max(IFNULL(a.deviceStopCount,0)) deviceStopCount,
<!-- 停用率-->
ROUND(avg(IFNULL(a.deviceStopRatio,0.00)),2) deviceStopRatio,
<!-- 离线设备数量-->
max(IFNULL(a.deviceOfflineCount,0)) deviceOfflineCount,
<!-- 离线率-->
ROUND(avg(IFNULL(a.deviceOfflineRatio,0.00)),2) deviceOfflineRatio,
<!-- 未激活设备数量-->
max(IFNULL(a.deviceUnActiveCount,0)) deviceUnActiveCount,
<!-- 未激活率-->
ROUND(avg(IFNULL(a.deviceUnActiveRatio,0.00)),2) deviceUnActiveRatio,
<!-- 告警数量-->
sum(IFNULL(a.alarmTotalCount,0)) alarmTotalCount,
ROUND(avg(IFNULL(a.alarmAddCount,0)),0) alarmAddCount,
<!-- 消息推送数量-->
sum(IFNULL(a.pushTotalCount,0)) pushTotalCount,
ROUND(avg(IFNULL(a.pushAddCount,0)),0) pushAddCount,
sum(IFNULL(a.uploadMessageTotalCount,0)) uploadMessageTotalCount,
sum(IFNULL(a.downloadMessageTotalCount,0)) downloadMessageTotalCount
from mortals_xhx_device_stat as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
<include refid="_group_by_"/>
<include refid="_orderCols_"/>
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment