Procházet zdrojové kódy

质量月报 - 碳三反应器性能指标趋势图

wangggziwen před 1 rokem
rodič
revize
7432da4085

+ 120 - 0
master/src/main/java/com/ruoyi/project/production/controller/TMonthlyQualityReportController.java

@@ -5,6 +5,7 @@ import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.file.ExcelUtils;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.project.production.controller.vo.C3ReactorAnalysisVO;
 import com.ruoyi.project.production.controller.vo.C3ReactorTableVO;
 import com.ruoyi.project.production.controller.vo.MonthlyQualityReportQueryVO;
 import com.ruoyi.project.production.domain.*;
@@ -116,6 +117,125 @@ public class TMonthlyQualityReportController extends BaseController
     @Autowired
     private ITMonthlyQualityReportZ404Service tMonthlyQualityReportZ404Service;
 
+    /**
+     * 碳三反应器性能指标趋势图
+     */
+    @PreAuthorize("@ss.hasPermi('production:quality:list')")
+    @GetMapping("/c3ReactorAnalysis")
+    public AjaxResult c3ReactorAnalysis(MonthlyQualityReportQueryVO vo)
+    {
+        Date startDate = vo.getStartDate();
+        Date endDate = vo.getEndDate();
+        int startYear = startDate.getYear() + 1900;
+        int endYear = endDate.getYear() + 1900;
+        int startMonth = startDate.getMonth() + 1;
+        int endMonth = endDate.getMonth() + 1;
+        Map<String, C3ReactorAnalysisVO> dataMap = new HashMap<>();
+        do {
+            //in
+            TMonthlyQualityReportS5010 tMonthlyQualityReportS5010 = new TMonthlyQualityReportS5010();
+            tMonthlyQualityReportS5010.setStartDate(startDate);
+            tMonthlyQualityReportS5010.setEndDate(endDate);
+            List<TMonthlyQualityReportS5010> tMonthlyQualityReportS5010s = tMonthlyQualityReportS5010Service.selectTMonthlyQualityReportS5010List(tMonthlyQualityReportS5010);
+            //out
+            TMonthlyQualityReportS5012 tMonthlyQualityReportS5012 = new TMonthlyQualityReportS5012();
+            tMonthlyQualityReportS5012.setStartDate(startDate);
+            tMonthlyQualityReportS5012.setEndDate(endDate);
+            List<TMonthlyQualityReportS5012> tMonthlyQualityReportS5012s = tMonthlyQualityReportS5012Service.selectTMonthlyQualityReportS5012List(tMonthlyQualityReportS5012);
+            //avg
+            BigDecimal propaneInAvg = new BigDecimal(BigInteger.ZERO);
+            BigDecimal propyleneInAvg = new BigDecimal(BigInteger.ZERO);
+            BigDecimal pdInAvg = new BigDecimal(BigInteger.ZERO);
+            BigDecimal maInAvg = new BigDecimal(BigInteger.ZERO);
+            BigDecimal propaneOutAvg = new BigDecimal(BigInteger.ZERO);
+            BigDecimal propyleneOutAvg = new BigDecimal(BigInteger.ZERO);
+            BigDecimal pdOutAvg = new BigDecimal(BigInteger.ZERO);
+            BigDecimal maOutAvg = new BigDecimal(BigInteger.ZERO);
+            BigDecimal conversion = new BigDecimal(BigInteger.ZERO);
+            BigDecimal propyleneSelectivity = new BigDecimal(BigInteger.ZERO);
+            //sum
+            BigDecimal propaneInSum = new BigDecimal(BigInteger.ZERO);
+            BigDecimal propyleneInSum = new BigDecimal(BigInteger.ZERO);
+            BigDecimal pdInSum = new BigDecimal(BigInteger.ZERO);
+            BigDecimal maInSum = new BigDecimal(BigInteger.ZERO);
+            BigDecimal propaneOutSum = new BigDecimal(BigInteger.ZERO);
+            BigDecimal propyleneOutSum = new BigDecimal(BigInteger.ZERO);
+            BigDecimal pdOutSum = new BigDecimal(BigInteger.ZERO);
+            BigDecimal maOutSum = new BigDecimal(BigInteger.ZERO);
+            //list
+            ArrayList<BigDecimal> propaneInList = new ArrayList<BigDecimal>();
+            ArrayList<BigDecimal> propyleneInList = new ArrayList<BigDecimal>();
+            ArrayList<BigDecimal> pdInList = new ArrayList<BigDecimal>();
+            ArrayList<BigDecimal> maInList = new ArrayList<BigDecimal>();
+            ArrayList<BigDecimal> propaneOutList = new ArrayList<BigDecimal>();
+            ArrayList<BigDecimal> propyleneOutList = new ArrayList<BigDecimal>();
+            ArrayList<BigDecimal> pdOutList = new ArrayList<BigDecimal>();
+            ArrayList<BigDecimal> maOutList = new ArrayList<BigDecimal>();
+            //放入list
+            for (TMonthlyQualityReportS5010 monthlyQualityReportS5010 : tMonthlyQualityReportS5010s) {
+                String propane = monthlyQualityReportS5010.getPropane();
+                String propylene = monthlyQualityReportS5010.getPropylene();
+                String pd = monthlyQualityReportS5010.getPropadiene();
+                String ma = monthlyQualityReportS5010.getMethylacetylene();
+                if (StringUtils.isNotEmpty(propane)) { propaneInList.add(new BigDecimal(propane)); }
+                if (StringUtils.isNotEmpty(propylene)) { propyleneInList.add(new BigDecimal(propylene)); }
+                if (StringUtils.isNotEmpty(pd)) { pdInList.add(new BigDecimal(pd)); }
+                if (StringUtils.isNotEmpty(ma)) { maInList.add(new BigDecimal(ma)); }
+            }
+            for (TMonthlyQualityReportS5012 monthlyQualityReportS5012 : tMonthlyQualityReportS5012s) {
+                String propane = monthlyQualityReportS5012.getPropane();
+                String propylene = monthlyQualityReportS5012.getPropylene();
+                String pd = monthlyQualityReportS5012.getPropadiene();
+                String ma = monthlyQualityReportS5012.getMethylacetylene();
+                if (StringUtils.isNotEmpty(propane)) { propaneOutList.add(new BigDecimal(propane)); }
+                if (StringUtils.isNotEmpty(propylene)) { propyleneOutList.add(new BigDecimal(propylene)); }
+                if (StringUtils.isNotEmpty(pd)) { pdOutList.add(new BigDecimal(pd)); }
+                if (StringUtils.isNotEmpty(ma)) { maOutList.add(new BigDecimal(ma)); }
+            }
+            //计算sum
+            for (BigDecimal value : propaneInList) { propaneInSum = propaneInSum.add(value); }
+            for (BigDecimal value : propyleneInList) { propyleneInSum = propyleneInSum.add(value); }
+            for (BigDecimal value : pdInList) { pdInSum = pdInSum.add(value); }
+            for (BigDecimal value : maInList) { maInSum = maInSum.add(value); }
+            for (BigDecimal value : propaneOutList) { propaneOutSum = propaneOutSum.add(value); }
+            for (BigDecimal value : propyleneOutList) { propyleneOutSum = propyleneOutSum.add(value); }
+            for (BigDecimal value : pdOutList) { pdOutSum = pdOutSum.add(value); }
+            for (BigDecimal value : maOutList) { maOutSum = maOutSum.add(value); }
+            //计算avg
+            if (propaneInList.size() != 0) { propaneInAvg = propaneInSum.divide(new BigDecimal(propaneInList.size()), 2, RoundingMode.HALF_UP); }
+            if (propyleneInList.size() != 0) { propyleneInAvg = propyleneInSum.divide(new BigDecimal(propyleneInList.size()), 2, RoundingMode.HALF_UP); }
+            if (pdInList.size() != 0) { pdInAvg = pdInSum.divide(new BigDecimal(pdInList.size()), 2, RoundingMode.HALF_UP); }
+            if (maInList.size() != 0) { maInAvg = maInSum.divide(new BigDecimal(maInList.size()), 2, RoundingMode.HALF_UP); }
+            if (propaneOutList.size() != 0) { propaneOutAvg = propaneOutSum.divide(new BigDecimal(propaneOutList.size()), 2, RoundingMode.HALF_UP); }
+            if (propyleneOutList.size() != 0) { propyleneOutAvg = propyleneOutSum.divide(new BigDecimal(propyleneOutList.size()), 2, RoundingMode.HALF_UP); }
+            if (pdOutList.size() != 0) { pdOutAvg = pdOutSum.divide(new BigDecimal(pdOutList.size()), 2, RoundingMode.HALF_UP); }
+            if (maOutList.size() != 0) { maOutAvg = maOutSum.divide(new BigDecimal(maOutList.size()), 2, RoundingMode.HALF_UP); }
+            if (pdInAvg.compareTo(BigDecimal.ZERO) != 0 && maInAvg.compareTo(BigDecimal.ZERO) != 0) {
+                conversion = BigDecimal.TEN.multiply(BigDecimal.TEN).multiply((pdInAvg.add(maInAvg).subtract(pdOutAvg).subtract(maOutAvg)).divide(pdInAvg.add(maInAvg), 2, RoundingMode.HALF_UP));
+            }
+            if (propaneInAvg.compareTo(BigDecimal.ZERO) != 0 && propyleneInAvg.compareTo(BigDecimal.ZERO) != 0
+                    && pdInAvg.compareTo(BigDecimal.ZERO) != 0 && maInAvg.compareTo(BigDecimal.ZERO) != 0
+                    && propaneOutAvg.compareTo(BigDecimal.ZERO) != 0 && propyleneOutAvg.compareTo(BigDecimal.ZERO) != 0
+                    && pdOutAvg.compareTo(BigDecimal.ZERO) != 0 && maOutAvg.compareTo(BigDecimal.ZERO) != 0) {
+                propyleneSelectivity = BigDecimal.TEN.multiply(BigDecimal.TEN).multiply(((propyleneOutAvg.divide(propaneOutAvg.add(propyleneOutAvg).add(pdOutAvg).add(maOutAvg), 2, RoundingMode.HALF_UP))
+                        .subtract(propyleneInAvg.divide(propaneInAvg.add(propyleneInAvg).add(pdInAvg).add(maInAvg), 2, RoundingMode.HALF_UP)))
+                        .divide(((pdInAvg.add(maInAvg)).divide(propaneInAvg.add(propyleneInAvg).add(pdInAvg).add(maInAvg), 2, RoundingMode.HALF_UP))
+                                .subtract((pdOutAvg.add(maOutAvg)).divide(propaneOutAvg.add(propyleneOutAvg).add(pdOutAvg).add(maOutAvg), 2, RoundingMode.HALF_UP)), 2, RoundingMode.HALF_UP));
+            }
+            C3ReactorAnalysisVO analysisVO = new C3ReactorAnalysisVO();
+            analysisVO.setConversion(conversion);
+            analysisVO.setPropyleneSelectivity(propyleneSelectivity);
+            dataMap.put(startYear + "-" + startMonth, analysisVO);
+            if (startMonth == 12) {
+                startMonth = 1;
+                startYear++;
+            } else {
+                startMonth++;
+            }
+        } while (startYear != endYear || startMonth != endMonth + 1);
+        return AjaxResult.success(dataMap);
+    }
+
     /**
      * 碳三反应器性能指标表格
      */

+ 32 - 0
master/src/main/java/com/ruoyi/project/production/controller/vo/C3ReactorAnalysisVO.java

@@ -0,0 +1,32 @@
+package com.ruoyi.project.production.controller.vo;
+
+import java.math.BigDecimal;
+
+/**
+ * 碳三反应器性能指标趋势图VO
+ *
+ * @author Wang Zi Wen
+ * @email wangggziwen@163.com
+ * @date 2023/11/27 10:24:29
+ */
+public class C3ReactorAnalysisVO {
+    private BigDecimal conversion;
+
+    private BigDecimal propyleneSelectivity;
+
+    public BigDecimal getConversion() {
+        return conversion;
+    }
+
+    public void setConversion(BigDecimal conversion) {
+        this.conversion = conversion;
+    }
+
+    public BigDecimal getPropyleneSelectivity() {
+        return propyleneSelectivity;
+    }
+
+    public void setPropyleneSelectivity(BigDecimal propyleneSelectivity) {
+        this.propyleneSelectivity = propyleneSelectivity;
+    }
+}

+ 9 - 0
ui/src/api/production/quality.js

@@ -1,5 +1,14 @@
 import request from '@/utils/request'
 
+// 碳三反应器性能指标趋势图
+export function c3ReactorAnalysis(query) {
+  return request({
+    url: '/production/quality/c3ReactorAnalysis',
+    method: 'get',
+    params: query
+  })
+}
+
 // 碳三反应器性能指标表格
 export function c3ReactorTable(query) {
   return request({

+ 69 - 5
ui/src/views/production/quality/index.vue

@@ -2273,7 +2273,7 @@ import { listS6101, getS6101, delS6101, addS6101, updateS6101, exportS6101 } fro
 import { listS6107, getS6107, delS6107, addS6107, updateS6107, exportS6107 } from "@/api/production/s6107";
 import { listS6301, getS6301, delS6301, addS6301, updateS6301, exportS6301 } from "@/api/production/s6301";
 import { listZ404, getZ404, delZ404, addZ404, updateZ404, exportZ404 } from "@/api/production/z404";
-import { exportQuality, c3ReactorTable } from "@/api/production/quality";
+import { exportQuality, c3ReactorTable, c3ReactorAnalysis } from "@/api/production/quality";
 import { treeselect } from "@/api/system/dept";
 import { getToken } from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
@@ -4140,10 +4140,74 @@ export default {
           });
           break;
         case "11":
-          // let params = {
-          //   "startDate": this.sampleDate[0],
-          //   "endDate": this.sampleDate[1]
-          // };
+          this.disposeChart();
+          c3ReactorAnalysis(this.analysisQueryParams).then(response => {
+            let data = response.data;
+            let conversionArray = [];
+            let propyleneSelectivityArray = [];
+            let sampleDateArray = [];
+            for(const key in data) {
+              sampleDateArray.push(key);
+              conversionArray.push(data[key].conversion);
+              propyleneSelectivityArray.push(data[key].propyleneSelectivity);
+            }
+            let option = {
+              title: {
+                text: dictLabel,
+                left: 'center',
+                textStyle: {
+                  fontSize: 16
+                }
+              },
+              tooltip: {
+                trigger: 'axis'
+              },
+              legend: {
+                x: 'center',
+                y: 'bottom',
+                data: ['conversion', 'Selectivity']
+              },
+              grid: {
+                top: '10%',
+                left: '3%',
+                right: '4%',
+                bottom: '10%',
+                containLabel: true
+              },
+              toolbox: {
+                feature: {
+                  saveAsImage: {}
+                }
+              },
+              xAxis: {
+                type: 'category',
+                boundaryGap: false,
+                data: sampleDateArray,
+                axisLabel: {
+                  interval: 0,
+                  rotate: 45
+                }
+              },
+              yAxis: {
+                type: 'value'
+              },
+              series: [
+                {
+                  name: 'conversion',
+                  type: 'line',
+                  data: conversionArray
+                },
+                {
+                  name: 'Selectivity',
+                  type: 'line',
+                  data: propyleneSelectivityArray
+                }
+              ]
+            };
+            this.chart = this.echarts.init(document.getElementById('chart'));
+            this.chart.setOption(option);
+          });
+
           c3ReactorTable({
             "startDate": this.analysisSampleDate[0],
             "endDate": this.analysisSampleDate[1]