|
@@ -6,16 +6,19 @@ import com.github.pagehelper.PageHelper;
|
|
|
import com.zcxk.core.common.enums.StatusEnum;
|
|
|
import com.zcxk.core.common.exception.BusinessException;
|
|
|
import com.zcxk.core.common.pojo.LoginUser;
|
|
|
+import com.zcxk.core.common.pojo.UserCondition;
|
|
|
import com.zcxk.core.common.util.BeanCopyUtils;
|
|
|
import com.zcxk.core.common.util.SnowflakeIdWorker;
|
|
|
import com.zcxk.core.common.util.UserUtil;
|
|
|
import com.zcxk.core.mysql.pageing.Pagination;
|
|
|
+import com.zcxk.core.utils.BigDecimalUtils;
|
|
|
+import com.zcxk.core.utils.ZoniotIntegerUtils;
|
|
|
import com.zcxk.rmcp.api.dto.DeviceInputDto;
|
|
|
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.query.CommonQueryCondition;
|
|
|
-import com.zcxk.rmcp.api.vo.DeviceVo;
|
|
|
+import com.zcxk.rmcp.api.vo.*;
|
|
|
import com.zcxk.rmcp.core.dao.DeviceMapper;
|
|
|
import com.zcxk.rmcp.core.entity.Device;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -23,8 +26,13 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import javax.annotation.Resource;
|
|
|
import com.zcxk.rmcp.web.service.DeviceService;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -133,4 +141,82 @@ public class DeviceServiceImpl implements DeviceService{
|
|
|
deviceMapper.delByIds(null);
|
|
|
log.info("end DeviceServiceImpl allDel ");
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DeviceStatisticsVo statisticsDevice() {
|
|
|
+ List<DeviceStatusVo> list = deviceMapper.totalDeviceStatus(UserUtil.getCurrentUser().getUserCondition());
|
|
|
+ if (CollectionUtils.isEmpty(list)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ // 总数
|
|
|
+ int allTotal = 0;
|
|
|
+ // 单个设备总数
|
|
|
+ int deviceTotal = 0;
|
|
|
+ DeviceStatisticsVo statisticsVo = new DeviceStatisticsVo();
|
|
|
+ Map<String, StatusStatisticsVo> statusMap = new HashMap<>();
|
|
|
+ List<DeviceStatisticsVo.DeviceRatio> ratioList = new ArrayList<>();
|
|
|
+ for (DeviceStatusVo deviceStatusVo : list) {
|
|
|
+ for (StatusStatisticsVo statistic : deviceStatusVo.getStatistics()) {
|
|
|
+ // 统计同一个状态的条数
|
|
|
+ totalStatus(statusMap, statistic);
|
|
|
+ deviceTotal += statistic.getTotal();
|
|
|
+ }
|
|
|
+ DeviceStatisticsVo.DeviceRatio ratio = new DeviceStatisticsVo.DeviceRatio();
|
|
|
+ ratio.setName(deviceStatusVo.getName());
|
|
|
+ ratio.setTotal(deviceTotal);
|
|
|
+ ratioList.add(ratio);
|
|
|
+ allTotal += deviceTotal;
|
|
|
+ }
|
|
|
+ // 占比运算
|
|
|
+ ratioDevice(ratioList, allTotal);
|
|
|
+ // 状态统计数
|
|
|
+ statisticsVo.setStatusList(statusMap.values().stream().collect(Collectors.toList()));
|
|
|
+ // 设备占比数
|
|
|
+ statisticsVo.setRatios(ratioList);
|
|
|
+ // 总数
|
|
|
+ statisticsVo.setTotal(ZoniotIntegerUtils.decimalFormat(allTotal));
|
|
|
+ return statisticsVo;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DeviceMapDataVo listDeviceAndCommunityInfo(Integer categoryId){
|
|
|
+ UserCondition condition = UserUtil.getCurrentUser().getUserCondition();
|
|
|
+ DeviceMapDataVo result = new DeviceMapDataVo();
|
|
|
+ result.setDeviceCommunityList(deviceMapper.listCommunityDevice(categoryId, condition));
|
|
|
+ result.setNoCellVoList(deviceMapper.listNoCellDevice(categoryId, condition));
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @author Andy
|
|
|
+ * @description 统计状态数
|
|
|
+ * @date 16:34 2021/7/21
|
|
|
+ * @param statusMap, statistic
|
|
|
+ * @return void
|
|
|
+ **/
|
|
|
+ private void totalStatus(Map<String, StatusStatisticsVo> statusMap, StatusStatisticsVo statistic){
|
|
|
+ StatusStatisticsVo statusStatisticsVo = statusMap.get(statistic.getStatus());
|
|
|
+ if (statusStatisticsVo == null) {
|
|
|
+ statusStatisticsVo = new StatusStatisticsVo();
|
|
|
+ }
|
|
|
+ statusStatisticsVo.setStatus(statistic.getStatus());
|
|
|
+ statusStatisticsVo.setTotal(statusStatisticsVo.getTotal() + statistic.getTotal());
|
|
|
+ statusMap.put(statistic.getStatus(), statusStatisticsVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @author Andy
|
|
|
+ * @description 占比运算
|
|
|
+ * @date 16:34 2021/7/21
|
|
|
+ * @param ratioList, total
|
|
|
+ * @return void
|
|
|
+ **/
|
|
|
+ private void ratioDevice(List<DeviceStatisticsVo.DeviceRatio> ratioList, int total){
|
|
|
+ for (DeviceStatisticsVo.DeviceRatio ratio : ratioList) {
|
|
|
+ ratio.setRatio(BigDecimalUtils.percentDivide(ratio.getTotal(), total, 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|