فهرست منبع

修正计算规则逻辑

wangchenghong 3 سال پیش
والد
کامیت
f8f2b88536

+ 2 - 2
pom.xml

@@ -90,9 +90,9 @@
 
         <!--jep -->
         <dependency>
-            <groupId>jep</groupId>
+            <groupId>org.scijava</groupId>
             <artifactId>jep</artifactId>
-            <version>2.24</version>
+            <version>2.4.2</version>
         </dependency>
 
         <dependency>

+ 1 - 1
src/main/java/com/persagy/apm/energy/report/common/service/impl/BianSunDataAnalysisPlatformServiceImpl.java

@@ -92,7 +92,7 @@ public class BianSunDataAnalysisPlatformServiceImpl implements PlatformService {
         for (String pjId : queryPlatformParamDTO.getProjectIdList()) {
             Double bianSunRate = getBianSunRate(queryPlatformParamDTO.getUserId(), queryPlatformParamDTO.getGroupCode(), pjId, queryPlatformParamDTO.getReportDate());
             if (null != bianSunRate && null != standardValue) {
-                if (DataUtils.getQualifyResult(standardValue, qualifyFormula, Math.abs(bianSunRate)) == 0.0) {
+                if (DataUtils.getQualifyResult(standardValue, qualifyFormula, bianSunRate) == 0.0) {
                     unsatisfiedCount++;
                     unsatisfiedPjIdList.add(pjId);
                 } else {

+ 1 - 1
src/main/java/com/persagy/apm/energy/report/common/service/impl/ZongZhiDataAnalysisPlatformServiceImpl.java

@@ -92,7 +92,7 @@ public class ZongZhiDataAnalysisPlatformServiceImpl implements PlatformService {
         for (String pjId : queryPlatformParamDTO.getProjectIdList()) {
             Double zongZhiRate = getZongZhiRate(queryPlatformParamDTO.getUserId(), queryPlatformParamDTO.getGroupCode(), pjId, queryPlatformParamDTO.getReportDate());
             if (null != zongZhiRate && null != standardValue) {
-                if (DataUtils.getQualifyResult(standardValue, qualifyFormula, Math.abs(zongZhiRate)) == 0.0) {
+                if (DataUtils.getQualifyResult(standardValue, qualifyFormula, zongZhiRate) == 0.0) {
                     unsatisfiedCount++;
                     unsatisfiedPjIdList.add(pjId);
                 } else {

+ 7 - 4
src/main/java/com/persagy/apm/energy/report/common/utils/DataUtils.java

@@ -46,10 +46,13 @@ public class DataUtils {
      */
     public static Double getQualifyResult(Double standardValue, String qualifyFormula, Double data) {
         JEP jep = new JEP();
-        String formula = "param1" + qualifyFormula + "param2";
-        jep.addVariable("param1", standardValue);
-        jep.addVariable("param2", data);
-        jep.parseExpression(formula);
+        // 添加常用函数
+        jep.addStandardFunctions();
+        // 添加常用常量
+        jep.addStandardConstants();
+        jep.addVariable("standard_value", standardValue);
+        jep.addVariable("source", data);
+        jep.parseExpression(qualifyFormula);
         return jep.getValue();
     }
 

+ 70 - 1
src/main/java/com/persagy/apm/energy/report/workorder/service/impl/IWorkOrderWebServiceImpl.java

@@ -8,8 +8,17 @@ import com.persagy.apm.energy.report.common.utils.DataUtils;
 import com.persagy.apm.energy.report.common.utils.DateUtils;
 import com.persagy.apm.energy.report.monthly.detail.business.model.Platform;
 import com.persagy.apm.energy.report.workorder.client.WorkOrderWebClient;
+import com.persagy.apm.energy.report.workorder.model.WorkOrder;
 import com.persagy.apm.energy.report.workorder.model.dto.QueryWorkOrderListByParamDTO;
+import com.persagy.apm.energy.report.workorder.repository.WorkOrderRepository;
 import com.persagy.apm.energy.report.workorder.service.IWorkOrderWebService;
+import org.apache.commons.lang.StringUtils;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
+import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -27,6 +36,8 @@ public class IWorkOrderWebServiceImpl implements IWorkOrderWebService {
     private WorkOrderWebClient workOrderWebClient;
     @Resource
     private CommonService commonService;
+    @Autowired
+    private WorkOrderRepository workOrderRepository;
 
     @Override
     public void getPjWorkOrderRate(QueryPjPlatformParamDTO queryPjPlatformParamDTO, Platform platform) {
@@ -34,7 +45,7 @@ public class IWorkOrderWebServiceImpl implements IWorkOrderWebService {
         Date reportDate = queryPjPlatformParamDTO.getReportDate();
         Date startDate = DateUtils.getFirstDayOfYear(reportDate);
         while (startDate.before(DateUtils.getMonthOff(reportDate, 1))) {
-            date_rateMap.put(startDate, getWorkOrderCompleteRate(queryPjPlatformParamDTO.getProjectId(), startDate, queryPjPlatformParamDTO.getUserId()));
+            date_rateMap.put(startDate, getWorkOrderCompleteRate(queryPjPlatformParamDTO.getProjectId(), startDate));
             startDate = DateUtils.getMonthOff(startDate, 1);
         }
         List<Double> monthlySummaries = date_rateMap.values().stream().collect(Collectors.toList());
@@ -65,6 +76,64 @@ public class IWorkOrderWebServiceImpl implements IWorkOrderWebService {
         return completeRate;
     }
 
+
+    private Double getWorkOrderCompleteRate(String projectId, Date reportDate) {
+        Double completeRate = null;
+        try {
+            Integer workCount = getWorkOrderNumByParam(projectId, reportDate, "ask_end_time");
+            Integer dealCount = getWorkOrderNumByParam(projectId, reportDate, "create_time");
+            if (null != workCount && workCount != 0) {
+                completeRate = Double.valueOf(dealCount) / workCount * 100;
+            }
+            return completeRate;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return completeRate;
+    }
+
+    private Integer getWorkOrderNumByParam(String projectId, Date reportDate, String timeType) {
+        try {
+            String startTime = DateUtils.date2Str(reportDate, DateUtils.SDFSECOND);
+            String endTime = DateUtils.date2Str(DateUtils.getMonthOff(reportDate, 1), DateUtils.SDFSECOND);
+            BoolQueryBuilder queryOrderNumBuilder = createQueryParam(projectId, timeType, startTime, endTime);
+            NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
+            nativeSearchQueryBuilder.withQuery(queryOrderNumBuilder);
+            NativeSearchQuery query = nativeSearchQueryBuilder.build();
+            Page<WorkOrder> resultList = workOrderRepository.search(query);
+            if (null != resultList) {
+                return resultList.getSize();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private BoolQueryBuilder createQueryParam(String pjId, String timeType, String startTime, String endTime) {
+        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
+        queryBuilder.must(QueryBuilders.matchQuery("project_id", pjId));
+        //时间查询
+        if (StringUtils.isNotBlank(timeType)) {
+            if (StringUtils.isNotBlank(startTime)) {
+                if ("create_time".equals(timeType)) {
+                    queryBuilder.must(QueryBuilders.rangeQuery("create_time").gte(startTime));
+                } else if ("ask_end_time".equals(timeType)) {
+                    queryBuilder.must(QueryBuilders.rangeQuery("ask_end_time").gte(startTime));
+                }
+            }
+            if (StringUtils.isNotBlank(endTime)) {
+                if ("create_time".equals(timeType)) {
+                    queryBuilder.must(QueryBuilders.rangeQuery("create_time").lt(endTime));
+                } else if ("ask_end_time".equals(timeType)) {
+                    queryBuilder.must(QueryBuilders.rangeQuery("ask_end_time").lt(endTime));
+                }
+            }
+        }
+        return queryBuilder;
+    }
+
+
     @Override
     public void getAreaWorkOrderRate(QueryAreaPlatformParamDTO queryAreaPlatformParamDTO, Platform platform) {
         // 合格标准