浏览代码

百分比数值增加百分号单位

lixing 3 年之前
父节点
当前提交
2e74f08733
共有 20 个文件被更改,包括 204 次插入17 次删除
  1. 4 0
      src/main/java/com/persagy/apm/report/common/constants/DataConstants.java
  2. 3 3
      src/main/java/com/persagy/apm/report/common/schedule/ReportGenerateFailScheduleTask.java
  3. 18 0
      src/main/java/com/persagy/apm/report/common/utils/DataUtils.java
  4. 5 0
      src/main/java/com/persagy/apm/report/common/utils/DateUtils.java
  5. 16 1
      src/main/java/com/persagy/apm/report/dependencies/saasweb/service/impl/SaasWebServiceImpl.java
  6. 24 0
      src/main/java/com/persagy/apm/report/detail/model/dto/UpdateParagraphSupplementDTO.java
  7. 23 0
      src/main/java/com/persagy/apm/report/detail/model/dto/UpdateReportDetailDTO.java
  8. 2 0
      src/main/java/com/persagy/apm/report/detail/model/vo/ParagraphVO.java
  9. 12 0
      src/main/java/com/persagy/apm/report/detail/paragraphvalue/service/IReportParagraphValueService.java
  10. 23 0
      src/main/java/com/persagy/apm/report/detail/paragraphvalue/service/impl/ReportParagraphValueServiceImpl.java
  11. 3 2
      src/main/java/com/persagy/apm/report/indicator/factory/EnergyBudgetFactory.java
  12. 4 2
      src/main/java/com/persagy/apm/report/indicator/factory/EnergyEfficiencyFactory.java
  13. 4 3
      src/main/java/com/persagy/apm/report/indicator/factory/EnvFactory.java
  14. 6 1
      src/main/java/com/persagy/apm/report/indicator/factory/IotFactory.java
  15. 2 1
      src/main/java/com/persagy/apm/report/indicator/utils/IndicatorUtils.java
  16. 10 0
      src/main/java/com/persagy/apm/report/outline/controller/ReportOutlineController.java
  17. 10 0
      src/main/java/com/persagy/apm/report/outline/service/IReportOutlineService.java
  18. 1 1
      src/main/java/com/persagy/apm/report/outline/service/impl/GenerateReportThreadPool.java
  19. 22 0
      src/main/java/com/persagy/apm/report/outline/service/impl/ReportOutlineServiceImpl.java
  20. 12 3
      src/main/java/com/persagy/apm/report/paragraphs/service/impl/iot/ProjectIotBuilder.java

+ 4 - 0
src/main/java/com/persagy/apm/report/common/constants/DataConstants.java

@@ -17,4 +17,8 @@ public class DataConstants {
     public static final String SPLIT_FLAG = ",";
 
     public static final String SQM = "/㎡";
+
+    public static final String PERCENT = "%";
+
+
 }

+ 3 - 3
src/main/java/com/persagy/apm/report/common/schedule/ReportGenerateFailScheduleTask.java

@@ -28,9 +28,9 @@ import java.util.stream.Collectors;
 public class ReportGenerateFailScheduleTask {
     @Autowired
     IReportOutlineService reportOutlineService;
-    @Value("${maxGenerateMinutes}")
+    @Value("${maxGenerateMinutes:5}")
     private int maxGenerateMinutes;
-    @Value("${failReportPeriod}")
+    @Value("${failReportPeriod:15}")
     private String failReportPeriod;
 
     /**
@@ -39,7 +39,7 @@ public class ReportGenerateFailScheduleTask {
      * @author lixing
      * @version V1.0 2021/8/9 12:01 下午
      */
-    @Scheduled(fixedRateString = "${failReportPeriod}")
+    @Scheduled(fixedRateString = "${failReportPeriod:15}")
     public void checkAndFailReportGenerateState() {
         log.info("开始检查生成时间超过{}ms, 依然处于生成中的报告", failReportPeriod);
         // 查询生成状态为生成中的报告

+ 18 - 0
src/main/java/com/persagy/apm/report/common/utils/DataUtils.java

@@ -141,6 +141,24 @@ public class DataUtils {
     }
 
     /**
+     * 两个double做乘法
+     *
+     * @param d1 第一个double值
+     * @param d2 第二个double值
+     * @return 结果
+     * @author lixing
+     * @version V1.0 2021/6/2 11:02 上午
+     */
+    public static Double doubleMultiply(Double d1, Double d2) {
+        if (d1 == null || d2 == null) {
+            throw new IllegalArgumentException("两个double做乘法,其中一个为空或两个都为空");
+        }
+        BigDecimal bigDecimal1 = new BigDecimal(d1);
+        BigDecimal bigDecimal2 = new BigDecimal(d2);
+        return bigDecimal1.multiply(bigDecimal2).doubleValue();
+    }
+
+    /**
      * 两个double做加法
      *
      * @param d1 第一个double值

+ 5 - 0
src/main/java/com/persagy/apm/report/common/utils/DateUtils.java

@@ -208,6 +208,11 @@ public class DateUtils {
         return Date.from(lastYearFirstDay.atStartOfDay(zoneId).toInstant());
     }
 
+    public static Double getDateDurationMs(Date beginDate, Date endDate) {
+        long diff = endDate.getTime() - beginDate.getTime();
+        return (double) diff;
+    }
+
     public static Double getDateDuration(Date beginDate, Date endDate) {
         long nh = 1000 * 60 * 60;
         long diff = endDate.getTime() - beginDate.getTime();

+ 16 - 1
src/main/java/com/persagy/apm/report/dependencies/saasweb/service/impl/SaasWebServiceImpl.java

@@ -446,14 +446,29 @@ public class SaasWebServiceImpl implements ISaasWebService {
         return filterPartitionMap2Tree(filterPartitionMap);
     }
 
+//    @Override
+//    public List<PartitionVO> getAvailableAreaTree(List<String> buildingTypes) {
+//        // 遍历用户所有可选分区树,标记分区父节点及分区拥有的项目
+//        List<FilterPartitionVO> partitions = partitionProjectTree2FilterPartitionList();
+//        // 筛选分区
+//        Map<String, FilterPartitionVO> filterPartitionMap = filterPartitionsByBuildingTypes(partitions, buildingTypes);
+//        // 将筛选后的分区重新组装成树
+//        return filterPartitionMap2Tree(filterPartitionMap);
+//    }
+
     @Override
     public List<PartitionVO> getAvailableAreaTree(List<String> buildingTypes) {
+        Date startTime = new Date();
         // 遍历用户所有可选分区树,标记分区父节点及分区拥有的项目
         List<FilterPartitionVO> partitions = partitionProjectTree2FilterPartitionList();
+        System.out.println("timeDuration1:" + DateUtils.getDateDurationMs(startTime, new Date()));
         // 筛选分区
         Map<String, FilterPartitionVO> filterPartitionMap = filterPartitionsByBuildingTypes(partitions, buildingTypes);
+        System.out.println("timeDuration2:" + DateUtils.getDateDurationMs(startTime, new Date()));
         // 将筛选后的分区重新组装成树
-        return filterPartitionMap2Tree(filterPartitionMap);
+        List<PartitionVO> partitionVOS = filterPartitionMap2Tree(filterPartitionMap);
+        System.out.println("timeDuration3:" + DateUtils.getDateDurationMs(startTime, new Date()));
+        return partitionVOS;
     }
 
     @Override

+ 24 - 0
src/main/java/com/persagy/apm/report/detail/model/dto/UpdateParagraphSupplementDTO.java

@@ -0,0 +1,24 @@
+package com.persagy.apm.report.detail.model.dto;
+
+import com.persagy.apm.report.detail.model.vo.AttrValueVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-05-17 11:08:35
+ */
+@Data
+@ApiModel(value = "更新报告备注参数")
+public class UpdateParagraphSupplementDTO {
+    @NotNull(message = "段落id不能为空")
+    @ApiModelProperty(value = "段落id", required = true)
+    private String paragraphId;
+
+    @ApiModelProperty(value = "补充说明")
+    private List<AttrValueVO> supplement;
+}

+ 23 - 0
src/main/java/com/persagy/apm/report/detail/model/dto/UpdateReportDetailDTO.java

@@ -0,0 +1,23 @@
+package com.persagy.apm.report.detail.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-05-17 11:08:35
+ */
+@Data
+@ApiModel(value = "获取报告详情入参")
+public class UpdateReportDetailDTO {
+    @NotNull(message = "报告主键不能为空")
+    @ApiModelProperty(value = "报告主键", required = true)
+    private String reportOutlineId;
+
+    @ApiModelProperty(value = "需要更新的段落内容")
+    private List<UpdateParagraphSupplementDTO> paragraphs;
+}

+ 2 - 0
src/main/java/com/persagy/apm/report/detail/model/vo/ParagraphVO.java

@@ -16,6 +16,8 @@ import java.util.List;
 @ApiModel(value = "段落")
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class ParagraphVO {
+    @ApiModelProperty("段落id")
+    private String id;
     @ApiModelProperty("段落定义编码")
     private String defineCode;
     @ApiModelProperty("段落名称")

+ 12 - 0
src/main/java/com/persagy/apm/report/detail/paragraphvalue/service/IReportParagraphValueService.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.detail.paragraphvalue.service;
 
+import com.persagy.apm.report.detail.model.vo.AttrValueVO;
 import com.persagy.apm.report.detail.paragraphvalue.model.*;
 import com.persagy.apm.report.detail.paragraphvalue.model.dto.*;
 
@@ -95,4 +96,15 @@ public interface IReportParagraphValueService {
      * @version V1.0 2021/7/20 10:08 上午
      */
     void deleteByReport(String reportOutlineId);
+
+    /**
+     * 更新报告补充说明
+     *
+     * @param reportOutlineId 报告概要id
+     * @param paragraphId 段落id
+     * @param supplement 补充说明
+     * @author lixing
+     * @version V1.0 2021/7/20 10:08 上午
+     */
+    void updateParagraphSupplement(String reportOutlineId, String paragraphId, List<AttrValueVO> supplement);
 }

+ 23 - 0
src/main/java/com/persagy/apm/report/detail/paragraphvalue/service/impl/ReportParagraphValueServiceImpl.java

@@ -2,6 +2,7 @@ package com.persagy.apm.report.detail.paragraphvalue.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.persagy.apm.common.context.AppContext;
+import com.persagy.apm.report.detail.model.vo.AttrValueVO;
 import com.persagy.apm.report.detail.paragraphvalue.dao.ReportParagraphValueMapper;
 import com.persagy.apm.report.detail.paragraphvalue.model.vo.ReportParagraphValueItemVO;
 import com.persagy.apm.report.detail.paragraphvalue.service.IReportParagraphValueService;
@@ -241,4 +242,26 @@ public class ReportParagraphValueServiceImpl extends ServiceImpl<ReportParagraph
         queryWrapper.eq(ReportParagraphValue::getReportOutlineId, reportOutlineId);
         remove(queryWrapper);
     }
+
+    @Override
+    public void updateParagraphSupplement(String reportOutlineId, String paragraphId, List<AttrValueVO> supplement) {
+        if (StringUtils.isBlank(reportOutlineId) ||
+                StringUtils.isBlank(paragraphId) ||
+                CollectionUtils.isEmpty(supplement)) {
+            return;
+        }
+
+        // 查询需要更新的数据
+        QueryReportParagraphValueDTO queryReportParagraphValueDTO = new QueryReportParagraphValueDTO();
+        queryReportParagraphValueDTO.setReportOutlineId(reportOutlineId);
+        queryReportParagraphValueDTO.setParagraphId(paragraphId);
+        List<ReportParagraphValue> reportParagraphValues = queryReportParagraphValueList(queryReportParagraphValueDTO);
+        if (CollectionUtils.isEmpty(reportParagraphValues)) {
+            return;
+        }
+        ReportParagraphValue reportParagraphValue = reportParagraphValues.get(0);
+        reportParagraphValue.setSupplement(supplement);
+        reportParagraphValue.setModifier(AppContext.getContext().getAccountId());
+        updateById(reportParagraphValue);
+    }
 }

+ 3 - 2
src/main/java/com/persagy/apm/report/indicator/factory/EnergyBudgetFactory.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.indicator.factory;
 
+import com.persagy.apm.report.common.constants.DataConstants;
 import com.persagy.apm.report.common.utils.DataUtils;
 import com.persagy.apm.report.common.utils.DateUtils;
 import com.persagy.apm.report.dependencies.manualfilling.enums.ManualFillingDataTypeEnum;
@@ -193,7 +194,7 @@ public class EnergyBudgetFactory {
         Double proportion = getProportion(currentMonth, monthlyBudget);
         String proportionStr = proportion == null? null:String.valueOf(proportion);
         return new AttrValueVO(BudgetContentCodes.monthlyProportion.name(),
-                proportionStr, AttrValueTypeEnum.number_1);
+                proportionStr, AttrValueTypeEnum.number_1, DataConstants.PERCENT);
     }
 
     /**
@@ -209,7 +210,7 @@ public class EnergyBudgetFactory {
         Double proportion = getProportion(aggregate, annualBudget);
         String proportionStr = proportion == null? null:String.valueOf(proportion);
         return new AttrValueVO(BudgetContentCodes.annualProportion.name(),
-                proportionStr, AttrValueTypeEnum.number_1);
+                proportionStr, AttrValueTypeEnum.number_1, DataConstants.PERCENT);
     }
 
     /**

+ 4 - 2
src/main/java/com/persagy/apm/report/indicator/factory/EnergyEfficiencyFactory.java

@@ -1,6 +1,7 @@
 package com.persagy.apm.report.indicator.factory;
 
 import com.google.gson.Gson;
+import com.persagy.apm.report.common.constants.DataConstants;
 import com.persagy.apm.report.common.utils.DataUtils;
 import com.persagy.apm.report.common.utils.DateUtils;
 import com.persagy.apm.report.dependencies.energyefficiencyweb.model.vo.EnergyEfficiencyDataVO;
@@ -128,11 +129,12 @@ public class EnergyEfficiencyFactory {
     public AttrValueVO getUnqualifiedProportion(Double projectCount, Double unqualifiedCount) {
         if (projectCount == null || unqualifiedCount == null) {
             return new AttrValueVO(AreaEnergyEfficiencyContentCodes.unqualifiedProportion.name(),
-                    null, AttrValueTypeEnum.number);
+                    null, AttrValueTypeEnum.number_2);
         }
 
         return new AttrValueVO(AreaEnergyEfficiencyContentCodes.unqualifiedProportion.name(),
-                String.valueOf(DataUtils.doubleDivide(unqualifiedCount, projectCount)), AttrValueTypeEnum.number);
+                String.valueOf(DataUtils.doubleDivide(unqualifiedCount, projectCount)),
+                AttrValueTypeEnum.number_2, DataConstants.PERCENT);
     }
 
     /**

+ 4 - 3
src/main/java/com/persagy/apm/report/indicator/factory/EnvFactory.java

@@ -2,6 +2,7 @@ package com.persagy.apm.report.indicator.factory;
 
 import com.alibaba.excel.util.CollectionUtils;
 import com.google.gson.Gson;
+import com.persagy.apm.report.common.constants.DataConstants;
 import com.persagy.apm.report.common.utils.DataUtils;
 import com.persagy.apm.report.dependencies.dmpalarm.enums.EnumAlarmTreatState;
 import com.persagy.apm.report.dependencies.dmpalarm.model.AlarmRecord;
@@ -121,7 +122,7 @@ public class EnvFactory {
         Double envComplianceRate = environmentWebService.getEnvComplianceRate(projectId, date, envDefine);
         String envComplianceRateStr = envComplianceRate == null ? null : String.valueOf(envComplianceRate);
         return new AttrValueVO(ProjectEnvContentCodes.complianceRate.name(),
-                envComplianceRateStr, AttrValueTypeEnum.number);
+                envComplianceRateStr, AttrValueTypeEnum.number_2, DataConstants.PERCENT);
     }
 
     /**
@@ -188,11 +189,11 @@ public class EnvFactory {
     public AttrValueVO getHandleProportion(Double handledCount, Double totalCount) {
         if (handledCount == null || totalCount == null) {
             return new AttrValueVO(ProjectEnvContentCodes.handleProportion.name(),
-                    null, AttrValueTypeEnum.number);
+                    null, AttrValueTypeEnum.number_2, DataConstants.PERCENT);
         }
         Double proportion = DataUtils.doubleDivide(handledCount, totalCount);
         return new AttrValueVO(ProjectEnvContentCodes.handleProportion.name(),
-                String.valueOf(proportion), AttrValueTypeEnum.number);
+                String.valueOf(proportion), AttrValueTypeEnum.number_2, DataConstants.PERCENT);
     }
 
     /**

+ 6 - 1
src/main/java/com/persagy/apm/report/indicator/factory/IotFactory.java

@@ -1,6 +1,7 @@
 package com.persagy.apm.report.indicator.factory;
 
 import com.google.gson.Gson;
+import com.persagy.apm.report.common.constants.DataConstants;
 import com.persagy.apm.report.common.utils.DataUtils;
 import com.persagy.apm.report.common.utils.DateUtils;
 import com.persagy.apm.report.dependencies.iotdataanalysis.service.IDataAnalysisWebService;
@@ -64,10 +65,14 @@ public class IotFactory {
      */
     public AttrValueVO getCurrentMonth(IotDefine iotDefine, String projectId, Date date) {
         Double currentMonthValue = getCurrentMonthValue(iotDefine, projectId, date);
+        if (currentMonthValue != null) {
+            // 达标率返回值百分比的分子,这里除以100,返回原始数据
+            currentMonthValue = DataUtils.doubleDivide(currentMonthValue, 100d);
+        }
         String currentMonthStr = currentMonthValue == null ? null : String.valueOf(currentMonthValue);
         return new AttrValueVO(ProjectIotContentCodes.currentMonth.name(),
                 currentMonthStr,
-                AttrValueTypeEnum.number_2);
+                AttrValueTypeEnum.number_2, DataConstants.PERCENT);
     }
 
     /**

+ 2 - 1
src/main/java/com/persagy/apm/report/indicator/utils/IndicatorUtils.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.report.indicator.utils;
 
+import com.persagy.apm.report.common.constants.DataConstants;
 import com.persagy.apm.report.common.utils.DataUtils;
 import com.persagy.apm.report.detail.enums.AttrValueTypeEnum;
 import com.persagy.apm.report.detail.model.vo.AttrValueVO;
@@ -28,7 +29,7 @@ public class IndicatorUtils {
             range = DataUtils.doubleDivide(growth, baseValue);
         }
         String rangeStr = range == null ? null : String.valueOf(range);
-        return new AttrValueVO(attrCode, rangeStr, valueType);
+        return new AttrValueVO(attrCode, rangeStr, valueType, DataConstants.PERCENT);
     }
 
     /**

+ 10 - 0
src/main/java/com/persagy/apm/report/outline/controller/ReportOutlineController.java

@@ -7,6 +7,7 @@ import com.persagy.apm.common.response.CommonResult;
 import com.persagy.apm.common.response.PageList;
 import com.persagy.apm.common.utils.ResultHelper;
 import com.persagy.apm.report.common.utils.DateUtils;
+import com.persagy.apm.report.detail.model.dto.UpdateReportDetailDTO;
 import com.persagy.apm.report.userconfig.reporttype.model.ConvertReportTypeTool;
 import com.persagy.apm.report.userconfig.reporttype.model.ReportType;
 import com.persagy.apm.report.userconfig.reporttype.model.vo.ResponseReportTypeItemVO;
@@ -160,5 +161,14 @@ public class ReportOutlineController {
                 getReportDetailDTO.getReportOutlineId());
         return ResultHelper.single(reportDetailInfo);
     }
+
+    @ApiOperation(value = "更新报告")
+    @PostMapping("update")
+    public CommonResult updateReportDetail(
+            @Valid @RequestBody UpdateReportDetailDTO updateReportDetailDTO) {
+        reportOutlineService.updateReportDetail(
+                updateReportDetailDTO);
+        return ResultHelper.success();
+    }
 }
 

+ 10 - 0
src/main/java/com/persagy/apm/report/outline/service/IReportOutlineService.java

@@ -2,6 +2,7 @@ package com.persagy.apm.report.outline.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.persagy.apm.report.dependencies.saasweb.model.vo.SimpleProjectVO;
+import com.persagy.apm.report.detail.model.dto.UpdateReportDetailDTO;
 import com.persagy.apm.report.detail.model.vo.ReportDetailItemVO;
 import com.persagy.apm.report.outline.model.ReportOutline;
 import com.persagy.apm.report.outline.model.dto.*;
@@ -164,4 +165,13 @@ public interface IReportOutlineService {
      * @version V1.0 2021/6/3 4:19 下午
      */
     String getBelongName(String reportBelongType, String belongId);
+
+    /**
+     * 更新报告详情
+     *
+     * @param updateReportDetailDTO 更新参数
+     * @author lixing
+     * @version V1.0 2021/8/20 3:16 下午
+     */
+    void updateReportDetail(UpdateReportDetailDTO updateReportDetailDTO);
 }

+ 1 - 1
src/main/java/com/persagy/apm/report/outline/service/impl/GenerateReportThreadPool.java

@@ -22,7 +22,7 @@ import java.util.concurrent.*;
 public class GenerateReportThreadPool {
     @Autowired
     IReportGenerator reportGenerator;
-    @Value("${maxGenerateMinutes}")
+    @Value("${maxGenerateMinutes:5}")
     private int maxGenerateMinutes;
 
     private final ExecutorService es;

+ 22 - 0
src/main/java/com/persagy/apm/report/outline/service/impl/ReportOutlineServiceImpl.java

@@ -10,6 +10,10 @@ import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.common.model.dto.Sort;
 import com.persagy.apm.report.common.utils.ApmStrUtils;
 import com.persagy.apm.report.common.utils.DateUtils;
+import com.persagy.apm.report.detail.model.dto.UpdateParagraphSupplementDTO;
+import com.persagy.apm.report.detail.model.dto.UpdateReportDetailDTO;
+import com.persagy.apm.report.detail.model.vo.AttrValueVO;
+import com.persagy.apm.report.detail.paragraphvalue.model.dto.UpdateReportParagraphValueDTO;
 import com.persagy.apm.report.userconfig.paragraph.model.ConvertParagraphTool;
 import com.persagy.apm.report.userconfig.paragraph.model.vo.ParagraphItemVO;
 import com.persagy.apm.report.userconfig.paragraphcustom.model.ParagraphCustom;
@@ -207,6 +211,7 @@ public class ReportOutlineServiceImpl extends ServiceImpl<ReportOutlineMapper, R
                     queryParagraphCustomDetail(paragraphItemVO.getCustomId());
             // 拼装返回结果
             ParagraphVO paragraphVO = new ParagraphVO();
+            paragraphVO.setId(paragraphItemVO.getId());
             paragraphVO.setName(paragraphItemVO.getName());
             paragraphVO.setDefineCode(paragraphDefineService.getModelCode(paragraphItemVO.getDefineId()));
             paragraphVO.setHeaderAttrs(Lists.newArrayList(paragraphCustom.getHeaderAttrs()));
@@ -482,4 +487,21 @@ public class ReportOutlineServiceImpl extends ServiceImpl<ReportOutlineMapper, R
         }
         return belongName;
     }
+
+    @Override
+    public void updateReportDetail(UpdateReportDetailDTO updateReportDetailDTO) {
+        List<UpdateParagraphSupplementDTO> paragraphs = updateReportDetailDTO.getParagraphs();
+        if (CollectionUtils.isEmpty(paragraphs)) {
+            return;
+        }
+        for (UpdateParagraphSupplementDTO paragraph : paragraphs) {
+            String paragraphId = paragraph.getParagraphId();
+            List<AttrValueVO> supplement = paragraph.getSupplement();
+            if (CollectionUtils.isEmpty(supplement)) {
+                continue;
+            }
+            paragraphValueService.updateParagraphSupplement(
+                    updateReportDetailDTO.getReportOutlineId(), paragraphId, supplement);
+        }
+    }
 }

+ 12 - 3
src/main/java/com/persagy/apm/report/paragraphs/service/impl/iot/ProjectIotBuilder.java

@@ -3,8 +3,8 @@ package com.persagy.apm.report.paragraphs.service.impl.iot;
 import com.alibaba.excel.util.CollectionUtils;
 import com.google.gson.Gson;
 import com.google.gson.JsonSyntaxException;
-import com.persagy.apm.report.userconfig.function.model.Function;
-import com.persagy.apm.report.userconfig.function.service.IFunctionService;
+import com.persagy.apm.report.common.constants.DataConstants;
+import com.persagy.apm.report.common.utils.DataUtils;
 import com.persagy.apm.report.detail.enums.AttrValueTypeEnum;
 import com.persagy.apm.report.detail.model.vo.AttrValueVO;
 import com.persagy.apm.report.detail.model.vo.GroupVO;
@@ -14,8 +14,11 @@ import com.persagy.apm.report.indicator.codes.iot.ProjectIotContentCodes;
 import com.persagy.apm.report.indicator.codes.iot.ProjectIotHeaderCodes;
 import com.persagy.apm.report.indicator.factory.IotFactory;
 import com.persagy.apm.report.indicator.model.entity.IotDefine;
+import com.persagy.apm.report.indicator.utils.IndicatorUtils;
 import com.persagy.apm.report.outline.model.ReportOutline;
 import com.persagy.apm.report.paragraphs.service.impl.ProjectParagraphBuilder;
+import com.persagy.apm.report.userconfig.function.model.Function;
+import com.persagy.apm.report.userconfig.function.service.IFunctionService;
 import org.mockito.internal.util.collections.Sets;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -50,8 +53,14 @@ public class ProjectIotBuilder extends ProjectParagraphBuilder {
                 String name = item.getName();
                 List<AttrValueVO> attrs = item.getAttrs();
                 Map<String, AttrValueVO> attrMap = attrValueList2Map(codeSet, attrs);
+                Double attrDoubleValue = IndicatorUtils.getAttrDoubleValue(
+                        attrMap.get(ProjectIotContentCodes.currentMonth.name()));
+                if (attrDoubleValue != null) {
+                    attrDoubleValue = DataUtils.doubleMultiply(attrDoubleValue, 100d);
+                }
+                String attrValueStr = attrDoubleValue == null ? "" : String.valueOf(attrDoubleValue);
                 String itemInfo = name + ":" +
-                        attrMap.get(ProjectIotContentCodes.currentMonth.name()).getValue() + " " +
+                        attrValueStr + DataConstants.PERCENT + " " +
                         attrMap.get(ProjectIotContentCodes.isQualified.name()).getValue();
 
                 itemsSummary = itemsSummary == null ? itemInfo : itemsSummary + "," + itemInfo;