From 614ac98b652339f43a12aef88476c6fde8c078bc Mon Sep 17 00:00:00 2001
From: ICEC <414933307@qq.com>
Date: Fri, 17 Jul 2020 11:03:06 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B1=B1=E4=B8=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../api/sd_dashboard/sd_changemouldtime.js    |  25 +
 ruoyi-ui/src/api/sd_dashboard/sd_dashboard.js |  38 +
 ruoyi-ui/src/api/sd_dashboard/sd_density.js   |  29 +
 .../src/api/sd_dashboard/sd_technologist.js   | 108 ++
 ruoyi-ui/src/permission.js                    | 128 +--
 .../fx_dashboard/dashboard_current_show.vue   | 758 ++++++++++++++
 .../views/sd_dashboard/dashboard_30day.vue    | 718 +++++++++++++
 .../views/sd_dashboard/dashboard_current.vue  | 804 +++++++++++++++
 .../sd_dashboard/dashboard_daterange.vue      | 952 ++++++++++++++++++
 .../views/sd_dashboard/dashboard_group.vue    | 781 ++++++++++++++
 .../views/sd_dashboard/dashboard_lastday.vue  | 722 +++++++++++++
 .../src/views/sd_density/sd_density_30d.vue   | 194 ++++
 .../src/views/sd_density/sd_density_72h.vue   | 196 ++++
 .../sd_density/sd_density_date_range.vue      | 261 +++++
 .../src/views/sd_density/sd_density_group.vue | 189 ++++
 .../db/mssql/DB_Ajax_DashBoard_48102.java     |  61 ++
 .../com/ruoyi/db/sd_mssql/DB_8053_Test.java   | 139 +++
 .../db/sd_mssql/DB_Ajax_DashBoard_8053.java   | 374 +++++++
 ...B_Ajax_DashBoard_ChangeMouldTime_8053.java | 201 ++++
 .../DB_Ajax_DashBoard_Density_8053.java       | 284 ++++++
 .../DB_Ajax_DashBoard_Technologist_8053.java  | 556 ++++++++++
 .../project/sd_changemouldtime/banner.txt     |  24 +
 .../SDChangeMouldTimeController.java          |  43 +
 .../com/ruoyi/project/sd_dashboard/banner.txt |  24 +
 .../controller/SDDashBoardController.java     |  54 +
 .../sd_density/SDDensityController.java       |  49 +
 ruoyi/src/main/resources/application.yml      |   2 +-
 27 files changed, 7649 insertions(+), 65 deletions(-)
 create mode 100644 ruoyi-ui/src/api/sd_dashboard/sd_changemouldtime.js
 create mode 100644 ruoyi-ui/src/api/sd_dashboard/sd_dashboard.js
 create mode 100644 ruoyi-ui/src/api/sd_dashboard/sd_density.js
 create mode 100644 ruoyi-ui/src/api/sd_dashboard/sd_technologist.js
 create mode 100644 ruoyi-ui/src/views/fx_dashboard/dashboard_current_show.vue
 create mode 100644 ruoyi-ui/src/views/sd_dashboard/dashboard_30day.vue
 create mode 100644 ruoyi-ui/src/views/sd_dashboard/dashboard_current.vue
 create mode 100644 ruoyi-ui/src/views/sd_dashboard/dashboard_daterange.vue
 create mode 100644 ruoyi-ui/src/views/sd_dashboard/dashboard_group.vue
 create mode 100644 ruoyi-ui/src/views/sd_dashboard/dashboard_lastday.vue
 create mode 100644 ruoyi-ui/src/views/sd_density/sd_density_30d.vue
 create mode 100644 ruoyi-ui/src/views/sd_density/sd_density_72h.vue
 create mode 100644 ruoyi-ui/src/views/sd_density/sd_density_date_range.vue
 create mode 100644 ruoyi-ui/src/views/sd_density/sd_density_group.vue
 create mode 100644 ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_8053_Test.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_8053.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_ChangeMouldTime_8053.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_Density_8053.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_Technologist_8053.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/sd_changemouldtime/banner.txt
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/sd_changemouldtime/controller/SDChangeMouldTimeController.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/sd_dashboard/banner.txt
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/sd_dashboard/controller/SDDashBoardController.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/sd_density/SDDensityController.java

diff --git a/ruoyi-ui/src/api/sd_dashboard/sd_changemouldtime.js b/ruoyi-ui/src/api/sd_dashboard/sd_changemouldtime.js
new file mode 100644
index 000000000..1b8d34e05
--- /dev/null
+++ b/ruoyi-ui/src/api/sd_dashboard/sd_changemouldtime.js
@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+// 查询服务器详细
+export function getChangeMouldTimeList() {
+  return request({
+    url: '/sd_changemouldtime/list',
+    method: 'get'
+  })
+}
+
+
+export function getDateRangeChangeMouldTime(fDateStart, fDateEnd) {
+  return request({
+    url: '/sd_changemouldtime/rangetimeavg/' + fDateStart + '/' + fDateEnd,
+    method: 'get'
+  })
+}
+
+
+export function DoGetChangeMouldTimeListDateRange(fDateStart, fDateEnd) {
+  return request({
+    url: '/sd_changemouldtime/DoGetChangeMouldTimeListDateRange/' + fDateStart + '/' + fDateEnd,
+    method: 'get'
+  })
+}
diff --git a/ruoyi-ui/src/api/sd_dashboard/sd_dashboard.js b/ruoyi-ui/src/api/sd_dashboard/sd_dashboard.js
new file mode 100644
index 000000000..df299a66d
--- /dev/null
+++ b/ruoyi-ui/src/api/sd_dashboard/sd_dashboard.js
@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+
+// 查询服务器详细
+export function getDashboardGroup() {
+  return request({
+    url: '/sd_dashboard/group',
+    method: 'get'
+  })
+}
+export function getLastDay() {
+  return request({
+    url: '/sd_dashboard/lastday',
+    method: 'get'
+  })
+}
+export function get30Day() {
+  return request({
+    url: '/sd_dashboard/30day',
+    method: 'get'
+  })
+}
+
+export function getcurrent() {
+  return request({
+    url: '/sd_dashboard/current',
+    method: 'get'
+  })
+}
+
+export function getDateRange(fDateStart,fDateEnd) {
+
+
+  return request({
+    url: '/sd_dashboard/daterange/'+fDateStart+'/'+fDateEnd,
+    method: 'get'
+  })
+}
+
diff --git a/ruoyi-ui/src/api/sd_dashboard/sd_density.js b/ruoyi-ui/src/api/sd_dashboard/sd_density.js
new file mode 100644
index 000000000..85160a562
--- /dev/null
+++ b/ruoyi-ui/src/api/sd_dashboard/sd_density.js
@@ -0,0 +1,29 @@
+import request from '@/utils/request'
+
+// 查询服务器详细
+export function getDensity30Day() {
+  return request({
+    url: '/sd_density/30day',
+    method: 'get'
+  })
+}
+export function getDensity72h() {
+  return request({
+    url: '/sd_density/72h',
+    method: 'get'
+  })
+}
+export function getDensityGroup() {
+  return request({
+    url: '/sd_density/group',
+    method: 'get'
+  })
+}
+
+
+export function getDensityDataRange(fDateStart,fDateEnd) {
+  return request({
+    url: '/sd_density/getDensityDataRange/'+fDateStart+'/'+fDateEnd,
+    method: 'get'
+  })
+}
diff --git a/ruoyi-ui/src/api/sd_dashboard/sd_technologist.js b/ruoyi-ui/src/api/sd_dashboard/sd_technologist.js
new file mode 100644
index 000000000..92fd6ba13
--- /dev/null
+++ b/ruoyi-ui/src/api/sd_dashboard/sd_technologist.js
@@ -0,0 +1,108 @@
+import request from '@/utils/request'
+
+// 查询服务器详细
+export function getConfirmation() {
+  return request({
+    url: '/fx_technologist/getConfirmation',
+    method: 'get'
+  })
+}
+
+
+export function getBestODM() {
+  return request({
+    url: '/fx_technologist/getBestODM',
+    method: 'get'
+  })
+}
+
+
+export function getBestOEM() {
+  return request({
+    url: '/fx_technologist/getBestOEM',
+    method: 'get'
+  })
+}
+
+export function getFinishedSampleAvgDay() {
+  return request({
+    url: '/fx_technologist/getFinishedSampleAvgDay',
+    method: 'get'
+  })
+}
+
+
+export function getUnFinishedSampleAvgDay() {
+  return request({
+    url: '/fx_technologist/getUnFinishedSampleAvgDay',
+    method: 'get'
+  })
+}
+
+export function DayFinishedSampleOrder() {
+  return request({
+    url: '/fx_technologist/DayFinishedSampleOrder',
+    method: 'get'
+  })
+}
+
+
+export function DayNewMould() {
+  return request({
+    url: '/fx_technologist/DayNewMould',
+    method: 'get'
+  })
+}
+
+export function DayFinishedSample() {
+  return request({
+    url: '/fx_technologist/DayFinishedSample',
+    method: 'get'
+  })
+}
+
+
+export function DayFinishedBOM() {
+  return request({
+    url: '/fx_technologist/DayFinishedBOM',
+    method: 'get'
+  })
+}
+
+
+export function ALL() {
+  return request({
+    url: '/fx_technologist/All',
+    method: 'get'
+  })
+}
+
+
+export function AllDataDataRange(fDateStart,fDateEnd) {
+  return request({
+    url: '/fx_technologist/AllDataDataRange/'+fDateStart+'/'+fDateEnd,
+    method: 'get'
+  })
+}
+
+export function getBestHunsha() {
+  return request({
+    url: '/fx_technologist/getBestHunsha',
+    method: 'get'
+  })
+}
+
+
+export function getBestJiancai() {
+  return request({
+    url: '/fx_technologist/getBestJiancai',
+    method: 'get'
+  })
+}
+
+export function getBestHuakuang() {
+  return request({
+    url: '/fx_technologist/getBestHuakuang',
+    method: 'get'
+  })
+}
diff --git a/ruoyi-ui/src/permission.js b/ruoyi-ui/src/permission.js
index 17e5b3d54..00c2f3ee4 100644
--- a/ruoyi-ui/src/permission.js
+++ b/ruoyi-ui/src/permission.js
@@ -1,64 +1,64 @@
-import router from './router'
-import store from './store'
-import { Message } from 'element-ui'
-import NProgress from 'nprogress'
-import 'nprogress/nprogress.css'
-import { getToken } from '@/utils/auth'
-
-NProgress.configure({ showSpinner: false })
-
-const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
-
-router.beforeEach((to, from, next) => {
-  NProgress.start()
-  if (getToken()) {
-    /* has token*/
-    if (to.path === '/login') {
-      next({ path: '/' })
-      NProgress.done()
-    } else {
-      if (store.getters.roles.length === 0) {
-        // 判断当前用户是否已拉取完user_info信息
-        store.dispatch('GetInfo').then(res => {
-          // 拉取user_info
-          const roles = res.roles
-          store.dispatch('GenerateRoutes', { roles }).then(accessRoutes => {
-          // 测试 默认静态页面
-          // store.dispatch('permission/generateRoutes', { roles }).then(accessRoutes => {
-            // 根据roles权限生成可访问的路由表
-            router.addRoutes(accessRoutes) // 动态添加可访问路由表
-            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
-          })
-        })
-          .catch(err => {
-            store.dispatch('FedLogOut').then(() => {
-              Message.error(err)
-              next({ path: '/' })
-            })
-          })
-      } else {
-        next()
-        // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
-        // if (hasPermission(store.getters.roles, to.meta.roles)) {
-        //   next()
-        // } else {
-        //   next({ path: '/401', replace: true, query: { noGoBack: true }})
-        // }
-        // 可删 ↑
-      }
-    }
-  } else {
-    // 没有token
-    if (whiteList.indexOf(to.path) !== -1) {
-      // 在免登录白名单,直接进入
-      next()
-    } else {
-      next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
-      NProgress.done()
-    }
-  }
-})
-
-router.afterEach(() => {
-  NProgress.done()
-})
+import router from './router'
+import store from './store'
+import { Message } from 'element-ui'
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
+import { getToken } from '@/utils/auth'
+
+NProgress.configure({ showSpinner: false })
+
+const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
+
+router.beforeEach((to, from, next) => {
+  NProgress.start()
+  if (getToken()) {
+    /* has token*/
+    if (to.path === '/login') {
+      next({ path: '/' })
+      NProgress.done()
+    } else {
+      if (store.getters.roles.length === 0) {
+        // 判断当前用户是否已拉取完user_info信息
+        store.dispatch('GetInfo').then(res => {
+          // 拉取user_info
+          const roles = res.roles
+          store.dispatch('GenerateRoutes', { roles }).then(accessRoutes => {
+          // 测试 默认静态页面
+          // store.dispatch('permission/generateRoutes', { roles }).then(accessRoutes => {
+            // 根据roles权限生成可访问的路由表
+            router.addRoutes(accessRoutes) // 动态添加可访问路由表
+            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
+          })
+        })
+          .catch(err => {
+            store.dispatch('FedLogOut').then(() => {
+              Message.error(err)
+              next({ path: '/' })
+            })
+          })
+      } else {
+        next()
+        // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
+        // if (hasPermission(store.getters.roles, to.meta.roles)) {
+        //   next()
+        // } else {
+        //   next({ path: '/401', replace: true, query: { noGoBack: true }})
+        // }
+        // 可删 ↑
+      }
+    }
+  } else {
+    // 没有token
+    if (whiteList.indexOf(to.path) !== -1) {
+      // 在免登录白名单,直接进入
+      next()
+    } else {
+      next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
+      NProgress.done()
+    }
+  }
+})
+
+router.afterEach(() => {
+  NProgress.done()
+})
diff --git a/ruoyi-ui/src/views/fx_dashboard/dashboard_current_show.vue b/ruoyi-ui/src/views/fx_dashboard/dashboard_current_show.vue
new file mode 100644
index 000000000..af29aa148
--- /dev/null
+++ b/ruoyi-ui/src/views/fx_dashboard/dashboard_current_show.vue
@@ -0,0 +1,758 @@
+<template>
+  <div class="dashboard-editor-container">
+
+
+
+    <el-row :gutter="32">
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_zhengpin_avg" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">正品率</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_change_moulding_time" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均换模时间</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_density" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均密度</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_energy_avg" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">产能达标率</h2>
+        </div>
+      </el-col>
+    </el-row>
+
+    <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
+      <div class="ibox ">
+        <div class="ibox-title">
+          <h5>产线明细 </h5>
+        </div>
+        <div class="ibox-content">
+          <el-table
+            :data="tableData"
+            stripe
+            border
+            style="width: 100%">
+            <el-table-column
+              prop="Line"
+              label="线号"
+              width="50">
+            </el-table-column>
+            <el-table-column
+              prop="ChangeMould"
+              label="是否换模中">
+              <template scope="scope">
+                <span v-if="scope.row.ChangeMould" style="color:red">换模中</span>
+                <span v-else style="color: #37B328">否</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="SoCode"
+              label="订单号">
+            </el-table-column>
+            <el-table-column
+              prop="MouldingStyleCode"
+              label="框型">
+            </el-table-column>
+            <el-table-column
+              prop="FinishedQuantity"
+              label="完成箱数">
+            </el-table-column>
+            <el-table-column
+              prop="Quantity"
+              label="订单箱数">
+            </el-table-column>
+            <el-table-column
+              prop="NormalCapacity"
+              label="标准产能">
+            </el-table-column>
+            <el-table-column
+              prop="currentspeed"
+              label="牵引产能">
+            </el-table-column>
+            <el-table-column
+              prop="CapacityStandardObtainedRate"
+              label="产能达标率">
+            </el-table-column>
+            <el-table-column
+              prop="CurrentYield"
+              label="当班正品率">
+            </el-table-column>
+            <el-table-column
+              prop="ChangeMouldTime"
+              label="换模用时">
+            </el-table-column>
+            <el-table-column
+              prop="Person"
+              label="人员">
+            </el-table-column>
+            <el-table-column
+              prop="LastUpdateDate"
+              label="最后操作时间">
+            </el-table-column>
+
+          </el-table>
+        </div>
+      </div>
+    </el-row>
+
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+
+  require('echarts/theme/macarons') // echarts theme
+  import resize from '../dashboard/mixins/resize'
+  import {getcurrent} from '@/api/dashboard/fxdashboard'
+
+  let lineChartData = {
+    xAxisData: [],
+    actualData: []
+  }
+
+  export default {
+    mixins: [resize],
+    name: 'density30day',
+    data() {
+      return {
+        tableData: []
+      }
+    },
+
+    created() {
+      this.getData()
+
+    },
+    mounted() {
+
+
+    },
+    methods: {
+      getData() {
+
+
+        getcurrent().then(response => {
+          console.log(response);
+          var j,k;
+          var avg_zhengpin_avg = 0;
+          var avg_density = 0;
+          var avg_energy_avg = 0;
+          var avg_chang_moulding_time = 0;
+          var sum_quantity = 0;
+          var sum_currentfinishedquantity = 0;
+          j = 0;
+          k = 0;
+
+
+          var data_ajax = JSON.parse(response.msg);
+          response.data = data_ajax;
+
+          for (var i = 0; i < response.data.length; i++) {
+            lineChartData.xAxisData.push((response.data[i].time + '').replace(' 00:00:00.0', ''))
+            lineChartData.actualData.push(parseFloat(response.data[i].density).toFixed(4))
+
+
+            this.tableData.push({
+              ChangeMould: response.data[i].ChangeMould,
+              Line: response.data[i].Line,
+              MouldingStyleCode: response.data[i].MouldingStyleCode,
+              FinishedQuantity: response.data[i].FinishedQuantity,
+              GroupProcessTime: (response.data[i].GroupTime * 1) - (response.data[i].GroupChangeMouldTime * 1),
+              NormalCapacity: response.data[i].NormalCapacity * 2,
+              currentspeed: (response.data[i].Speed * 60 * 60 * 24).toFixed(0),
+              CapacityStandardObtainedRate: (response.data[i].CapacityStandardObtainedRate * 100).toFixed(2) + '%',
+              CurrentYield: (response.data[i].CurrentYield * 100).toFixed(2) + '%',
+              SoCode: response.data[i].SoCode,
+              ChangeMouldTime: response.data[i].ChangeMouldTime,
+              Person: response.data[i].OperatePersonName,
+              Quantity: response.data[i].Quantity,
+              LastUpdateDate: response.data[i].LastUpdateDate
+
+
+            })
+
+            if (data_ajax[i].ChangeMouldTime !== 0) {
+              avg_chang_moulding_time = avg_chang_moulding_time + (data_ajax[i].ChangeMouldTime) * 1;
+              j = j + 1;
+            }
+
+            if (data_ajax[i].CurrentYield <= 1.2 && data_ajax[i].CurrentYield !== 0 && data_ajax[i].CurrentYield >= 0.3) {
+              avg_zhengpin_avg = avg_zhengpin_avg + (data_ajax[i].CurrentYield) * 1;
+              k = k + 1;
+            }
+
+            avg_density = parseFloat(avg_density) + parseFloat(data_ajax[i].AvgDensity);
+
+            avg_energy_avg = avg_energy_avg + (data_ajax[i].CapacityStandardObtainedRate );
+
+
+            sum_quantity = 2000;
+
+            sum_currentfinishedquantity = sum_currentfinishedquantity + (data_ajax[i].FinishedQuantity) * 1;
+
+          }
+
+          const chart_energy_avg = echarts.init(document.getElementById("chart_energy_avg"));
+          const chart_zhengpin_avg = echarts.init(document.getElementById("chart_zhengpin_avg"));
+          const chart_density = echarts.init(document.getElementById("chart_density"));
+          const chart_change_moulding_time = echarts.init(document.getElementById("chart_change_moulding_time"));
+
+
+          option_zhengpin_avg.series[0].data[0].value = (avg_zhengpin_avg / k * 100).toFixed(0);
+          chart_zhengpin_avg.setOption(option_zhengpin_avg, true);
+
+          option_density.series[0].data[0].value = (avg_density / data_ajax.length).toFixed(3);
+          chart_density.setOption(option_density, true);
+
+          option_change_moulding_time.series[0].data[0].value = (avg_chang_moulding_time / j).toFixed(0);
+          chart_change_moulding_time.setOption(option_change_moulding_time, true);
+
+          option_energy_avg.series[0].data[0].value = (avg_energy_avg / data_ajax.length * 100).toFixed(0);
+          chart_energy_avg.setOption(option_energy_avg, true);
+
+        })
+      }
+    }
+
+  }
+
+
+  var colorTemplate_energy_avg = [//50-85  85-100  100-120
+    [0.5, "rgba(255,0,0,0.8)"],
+    [5 / 7, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_zhengpin_avg = [//50-75  75-85  85-100
+    [6 / 10, "rgba(255,0,0,0.8)"],
+    [7 / 10, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_density = [//0.4-0.42  红  0.4-0.38  0.38-0.36
+    [1 / 3, "rgba(0,200,250,0.8)"],
+    [2 / 3, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+  var colorTemplate_change_moulding_time = [ //30-70  蓝  70-90 绿  90-120 红
+    [4 / 9, "rgba(0,200,250,0.8)"],
+    [6 / 9, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+
+
+  var data_energy_avg = [{
+    // name: "产能达标率",
+    value: 50,
+  }];
+
+  var data_zhengpin_avg = [{
+    // name: "正品率",
+    value: 0,
+  }];
+  var data_density = [{
+    // name: "密度",
+    value: 0,
+  }];
+  var data_change_moulding_time = [{
+    // name: "换模时间",
+    value: 0,
+  }];
+
+  // 指定图表的配置项和数据
+  var option_energy_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 7, // 仪表盘刻度的分割段数,默认 10。
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_energy_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_energy_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_zhengpin_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 100, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 5, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_zhengpin_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_zhengpin_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_density = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{c}",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 0.36, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 0.42, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 6, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_density, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_density
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_change_moulding_time = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 30, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 9, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_change_moulding_time, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_change_moulding_time
+    }]
+
+  };
+
+
+</script>
+
+
+<style lang="scss" scoped>
+  .dashboard-editor-container {
+    padding: 32px;
+    background-color: rgb(240, 242, 245);
+    position: relative;
+
+    .chart-wrapper {
+      background: #fff;
+      padding: 16px 16px 0;
+      margin-bottom: 32px;
+    }
+  }
+
+  @media (max-width: 1024px) {
+    .chart-wrapper {
+      padding: 8px;
+    }
+  }
+</style>
+
diff --git a/ruoyi-ui/src/views/sd_dashboard/dashboard_30day.vue b/ruoyi-ui/src/views/sd_dashboard/dashboard_30day.vue
new file mode 100644
index 000000000..97fc803b7
--- /dev/null
+++ b/ruoyi-ui/src/views/sd_dashboard/dashboard_30day.vue
@@ -0,0 +1,718 @@
+<template>
+  <div class="dashboard-editor-container">
+
+
+    <el-row :gutter="32">
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_zhengpin_avg" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">正品率</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_change_moulding_time"  style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均换模时间</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_density"  style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均密度</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_energy_avg"  style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">产能达标率</h2>
+        </div>
+      </el-col>
+    </el-row>
+
+    <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
+      <div class="ibox ">
+        <div class="ibox-title">
+          <h5>产线明细 </h5>
+        </div>
+        <div class="ibox-content">
+          <el-table
+            :data="tableData"
+            stripe
+            border
+            style="width: 100%">
+            <el-table-column
+              prop="line"
+              label="线号"
+              width="100">
+            </el-table-column>
+            <el-table-column
+              prop="Moulds"
+              label="换膜次数">
+            </el-table-column>
+            <el-table-column
+              prop="sumbox"
+              label="完成箱数">
+            </el-table-column>
+            <el-table-column
+              prop="avg_currentcapacity"
+              label="平均实际产能">
+            </el-table-column>
+            <el-table-column
+              prop="avg_normalcapacity"
+              label="平均标准产能">
+            </el-table-column>
+            <el-table-column
+              prop="capacityrate"
+              label="产能达标率">
+            </el-table-column>
+            <el-table-column
+              prop="yieldrate"
+              label="正品达标率">
+            </el-table-column>
+            <el-table-column
+              prop="avg_density"
+              label="平均密度">
+            </el-table-column>
+
+
+
+          </el-table>
+        </div>
+      </div>
+    </el-row>
+
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+
+  require('echarts/theme/macarons') // echarts theme
+  import resize from '../dashboard/mixins/resize'
+  import {get30Day} from '@/api/sd_dashboard/sd_dashboard'
+
+  const lineChartData = {
+    xAxisData: [],
+    actualData: []
+  }
+
+  export default {
+    mixins: [resize],
+    name: 'density30day',
+    data() {
+      return {
+        tableData: []
+      }
+    },
+
+    created() {
+      this.getData()
+
+    },
+    mounted() {
+
+
+    },
+    methods: {
+      getData() {
+
+        get30Day().then(response => {
+
+          var j;
+          var avg_zhengpin_avg = 0;
+          var avg_density = 0;
+          var avg_energy_avg = 0;
+          var avg_chang_moulding_time = 0;
+          var sum_quantity = 0;
+          var sum_currentfinishedquantity = 0;
+          j = 0;
+
+          var data_ajax = response.data;
+
+          for (var i = 0; i < response.data.length; i++) {
+            lineChartData.xAxisData.push((response.data[i].time + '').replace(' 00:00:00.0', ''))
+            lineChartData.actualData.push(parseFloat(response.data[i].density).toFixed(4))
+
+
+            this.tableData.push({
+              line: response.data[i].line,
+              Moulds: ((response.data[i].Moulds.split('/')).length - 1),
+              sumbox: response.data[i].sumbox,
+              avg_currentcapacity: (response.data[i].avg_currentcapacity * 1 * response.data[i].sum_box_meter / response.data[i].sum_device_meter).toFixed(2),
+              avg_normalcapacity: (response.data[i].avg_normalcapacity * 1).toFixed(2),
+              capacityrate: (response.data[i].avg_currentcapacity / response.data[i].avg_normalcapacity * response.data[i].sum_box_meter / response.data[i].sum_device_meter * 100).toFixed(2) + "%",
+              yieldrate: (response.data[i].sum_box_meter / response.data[i].sum_device_meter * 100).toFixed(2) + "%",
+              avg_density: (response.data[i].avg_density * 1).toFixed(4),
+              lastchangemouldtime: (response.data[i].lastchangemouldtime),
+
+            })
+
+            if (data_ajax[i].lastchangemouldtime !== 0) {
+              avg_chang_moulding_time = avg_chang_moulding_time + (data_ajax[i].lastchangemouldtime) * 1;
+              j = j + 1;
+            }
+            avg_density = parseFloat(avg_density) + parseFloat(data_ajax[i].avg_density);
+            avg_energy_avg = avg_energy_avg + (data_ajax[i].avg_currentcapacity / data_ajax[i].avg_normalcapacity);
+            avg_zhengpin_avg = avg_zhengpin_avg + (data_ajax[i].sum_box_meter / data_ajax[i].sum_device_meter);
+            sum_quantity = 2000;
+            sum_currentfinishedquantity = sum_currentfinishedquantity + (data_ajax[i].sumbox) * 1;
+
+
+          }
+
+          const chart_energy_avg = echarts.init(document.getElementById("chart_energy_avg"));
+          const chart_zhengpin_avg = echarts.init(document.getElementById("chart_zhengpin_avg"));
+          const chart_density = echarts.init(document.getElementById("chart_density"));
+          const chart_change_moulding_time = echarts.init(document.getElementById("chart_change_moulding_time"));
+
+          // 设置仪表盘数据
+          option_zhengpin_avg.series[0].data[0].value = (avg_zhengpin_avg / data_ajax.length * 100).toFixed(0);
+          chart_zhengpin_avg.setOption(option_zhengpin_avg, true);
+
+          option_density.series[0].data[0].value = (avg_density / data_ajax.length).toFixed(3);
+          chart_density.setOption(option_density, true);
+
+          //option_change_moulding_time.series[0].data[0].value = (avg_chang_moulding_time / data_ajax.length).toFixed(0);
+          option_change_moulding_time.series[0].data[0].value =  0 ;
+          chart_change_moulding_time.setOption(option_change_moulding_time, true);
+
+          option_energy_avg.series[0].data[0].value = (avg_energy_avg / data_ajax.length * avg_zhengpin_avg / data_ajax.length * 100).toFixed(0);
+          chart_energy_avg.setOption(option_energy_avg, true);
+
+        })
+      }
+    }
+
+  }
+
+
+  var colorTemplate_energy_avg = [//50-85  85-100  100-120
+    [0.5, "rgba(255,0,0,0.8)"],
+    [5 / 7, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_zhengpin_avg = [//50-75  75-85  85-100
+    [6 / 10, "rgba(255,0,0,0.8)"],
+    [7 / 10, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_density = [//0.4-0.42  红  0.4-0.38  0.38-0.36
+    [1 / 3, "rgba(0,200,250,0.8)"],
+    [2 / 3, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+  var colorTemplate_change_moulding_time = [ //30-70  蓝  70-90 绿  90-120 红
+    [4 / 9, "rgba(0,200,250,0.8)"],
+    [6 / 9, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+
+
+  var data_energy_avg = [{
+    // name: "产能达标率",
+    value: 50,
+  }];
+
+  var data_zhengpin_avg = [{
+    // name: "正品率",
+    value: 0,
+  }];
+  var data_density = [{
+    // name: "密度",
+    value: 0,
+  }];
+  var data_change_moulding_time = [{
+    // name: "换模时间",
+    value: 0,
+  }];
+
+  // 指定图表的配置项和数据
+  var option_energy_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 7, // 仪表盘刻度的分割段数,默认 10。
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_energy_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_energy_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_zhengpin_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 100, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 5, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_zhengpin_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_zhengpin_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_density = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{c}",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 0.36, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 0.42, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 6, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_density, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_density
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_change_moulding_time = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 30, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 9, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_change_moulding_time, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_change_moulding_time
+    }]
+
+  };
+
+
+</script>
+
+
+<style lang="scss" scoped>
+  .dashboard-editor-container {
+    padding: 32px;
+    background-color: rgb(240, 242, 245);
+    position: relative;
+
+    .chart-wrapper {
+      background: #fff;
+      padding: 16px 16px 0;
+      margin-bottom: 32px;
+    }
+  }
+
+  @media (max-width: 1024px) {
+    .chart-wrapper {
+      padding: 8px;
+    }
+  }
+</style>
+
diff --git a/ruoyi-ui/src/views/sd_dashboard/dashboard_current.vue b/ruoyi-ui/src/views/sd_dashboard/dashboard_current.vue
new file mode 100644
index 000000000..6ae3bbd25
--- /dev/null
+++ b/ruoyi-ui/src/views/sd_dashboard/dashboard_current.vue
@@ -0,0 +1,804 @@
+<template>
+  <div class="dashboard-editor-container">
+<!--    <el-row :gutter="32">-->
+
+<!--      <el-col :xs="24" :sm="12" :lg="12" style="height: 170px">-->
+
+
+<!--        <table class="ibox" style="font-size:24px;width: 100%;margin-top: 50px" >-->
+<!--          <tbody>-->
+<!--          <tr>-->
+<!--            &lt;!&ndash; <td>-->
+<!--                    <strong>日期</strong> <i id="groupdate"></i>-->
+<!--                </td>                                         &ndash;&gt;-->
+<!--            <td id="groupdate">-->
+<!--            </td>-->
+<!--            <td>-->
+<!--              <strong>班次</strong> 白班-->
+<!--            </td>-->
+<!--          <tr>-->
+<!--          </tr>-->
+<!--          <td>-->
+<!--            <strong>班组</strong> -->
+<!--          </td>-->
+<!--          <td>-->
+<!--            <strong>开线数量</strong> <i id="line_open_numbers">31/32</i>-->
+<!--          </td>-->
+<!--          </tbody>-->
+<!--        </table>-->
+<!--        &lt;!&ndash;右上角 生产进度 &ndash;&gt;-->
+
+<!--      </el-col>-->
+
+
+
+
+
+<!--      <el-col :xs="24" :sm="12" :lg="12">-->
+<!--        <div class="ibox">-->
+<!--          <div class="m-b-xs">-->
+<!--            <h5 style="font-size:20px;">生产进度</h5>-->
+<!--            <h2 id=shengchanjindu>65%</h2>-->
+<!--            <div id=finishedbox class="m-t-sm small">当班已完成: 1200/2500 (箱)</div>-->
+<!--            <el-progress id="shengchanjinduavg" :percentage="56" :format="format"></el-progress>-->
+
+<!--          </div>-->
+<!--        </div>-->
+<!--      </el-col>-->
+
+<!--    </el-row>-->
+
+
+    <el-row :gutter="32">
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_zhengpin_avg" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">正品率</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_change_moulding_time" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均换模时间</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_density" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均密度</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_energy_avg" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">产能达标率</h2>
+        </div>
+      </el-col>
+    </el-row>
+
+    <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
+      <div class="ibox ">
+        <div class="ibox-title">
+          <h5>产线明细 </h5>
+        </div>
+        <div class="ibox-content">
+          <el-table
+            :data="tableData"
+            stripe
+            border
+            style="width: 100%">
+            <el-table-column
+              prop="Line"
+              label="线号"
+              width="50">
+            </el-table-column>
+            <el-table-column
+              prop="ChangeMould"
+              label="是否换模中">
+              <template scope="scope">
+                <span v-if="scope.row.ChangeMould" style="color:red">换模中</span>
+                <span v-else style="color: #37B328">否</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="SoCode"
+              label="订单号">
+            </el-table-column>
+            <el-table-column
+              prop="MouldingStyleCode"
+              label="框型">
+            </el-table-column>
+            <el-table-column
+              prop="FinishedQuantity"
+              label="完成箱数">
+            </el-table-column>
+            <el-table-column
+              prop="Quantity"
+              label="订单箱数">
+            </el-table-column>
+            <el-table-column
+              prop="NormalCapacity"
+              label="标准产能">
+            </el-table-column>
+            <el-table-column
+              prop="currentspeed"
+              label="牵引产能">
+            </el-table-column>
+            <el-table-column
+              prop="CapacityStandardObtainedRate"
+              label="产能达标率">
+            </el-table-column>
+            <el-table-column
+              prop="CurrentYield"
+              label="当班正品率">
+            </el-table-column>
+            <el-table-column
+              prop="ChangeMouldTime"
+              label="换模用时">
+            </el-table-column>
+            <el-table-column
+              prop="Person"
+              label="人员">
+            </el-table-column>
+            <el-table-column
+              prop="LastUpdateDate"
+              label="最后操作时间">
+            </el-table-column>
+
+          </el-table>
+        </div>
+      </div>
+    </el-row>
+
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+
+  require('echarts/theme/macarons') // echarts theme
+  import resize from '../dashboard/mixins/resize'
+  import {getcurrent} from '@/api/sd_dashboard/sd_dashboard'
+
+  let lineChartData = {
+    xAxisData: [],
+    actualData: []
+  }
+
+  export default {
+    mixins: [resize],
+    name: 'sd_dashboard',
+    data() {
+      return {
+        tableData: []
+      }
+    },
+
+    created() {
+      this.getData()
+
+    },
+    mounted() {
+
+
+    },
+    methods: {
+      getData() {
+
+
+        getcurrent().then(response => {
+          console.log(response);
+          var j,k;
+          var avg_zhengpin_avg = 0;
+          var avg_density = 0;
+          var avg_energy_avg = 0;
+          var avg_chang_moulding_time = 0;
+          var sum_quantity = 0;
+          var sum_currentfinishedquantity = 0;
+          j = 0;
+          k = 0;
+
+
+          var data_ajax = JSON.parse(response.msg);
+          response.data = data_ajax;
+
+          for (var i = 0; i < response.data.length; i++) {
+            lineChartData.xAxisData.push((response.data[i].time + '').replace(' 00:00:00.0', ''))
+            lineChartData.actualData.push(parseFloat(response.data[i].density).toFixed(4))
+
+
+            this.tableData.push({
+              ChangeMould: response.data[i].ChangeMould,
+              Line: response.data[i].Line,
+              MouldingStyleCode: response.data[i].MouldingStyleCode,
+              FinishedQuantity: response.data[i].FinishedQuantity,
+              GroupProcessTime: (response.data[i].GroupTime * 1) - (response.data[i].GroupChangeMouldTime * 1),
+              NormalCapacity: response.data[i].NormalCapacity * 2,
+              currentspeed: (response.data[i].Speed * 60 * 60 * 24).toFixed(0),
+              CapacityStandardObtainedRate: (response.data[i].CapacityStandardObtainedRate * 100).toFixed(2) + '%',
+              CurrentYield: (response.data[i].CurrentYield * 100).toFixed(2) + '%',
+              SoCode: response.data[i].SoCode,
+              ChangeMouldTime: response.data[i].ChangeMouldTime,
+              Person: response.data[i].OperatePersonName,
+              Quantity: response.data[i].Quantity,
+              LastUpdateDate: response.data[i].LastUpdateDate
+
+
+            })
+
+            if (data_ajax[i].ChangeMouldTime !== 0) {
+              avg_chang_moulding_time = avg_chang_moulding_time + (data_ajax[i].ChangeMouldTime) * 1;
+              j = j + 1;
+            }
+
+            if (data_ajax[i].CurrentYield <= 1.2 && data_ajax[i].CurrentYield !== 0 && data_ajax[i].CurrentYield >= 0.3) {
+              avg_zhengpin_avg = avg_zhengpin_avg + (data_ajax[i].CurrentYield) * 1;
+              k = k + 1;
+            }
+
+            avg_density = parseFloat(avg_density) + parseFloat(data_ajax[i].AvgDensity);
+
+            avg_energy_avg = avg_energy_avg + (data_ajax[i].CapacityStandardObtainedRate );
+
+
+            sum_quantity = 2000;
+
+            sum_currentfinishedquantity = sum_currentfinishedquantity + (data_ajax[i].FinishedQuantity) * 1;
+
+          }
+
+          const chart_energy_avg = echarts.init(document.getElementById("chart_energy_avg"));
+          const chart_zhengpin_avg = echarts.init(document.getElementById("chart_zhengpin_avg"));
+          const chart_density = echarts.init(document.getElementById("chart_density"));
+          const chart_change_moulding_time = echarts.init(document.getElementById("chart_change_moulding_time"));
+
+
+          option_zhengpin_avg.series[0].data[0].value = (avg_zhengpin_avg / k * 100).toFixed(0);
+          chart_zhengpin_avg.setOption(option_zhengpin_avg, true);
+
+          option_density.series[0].data[0].value = (avg_density / data_ajax.length).toFixed(3);
+          chart_density.setOption(option_density, true);
+
+          option_change_moulding_time.series[0].data[0].value = (avg_chang_moulding_time / j).toFixed(0);
+          chart_change_moulding_time.setOption(option_change_moulding_time, true);
+
+          option_energy_avg.series[0].data[0].value = (avg_energy_avg / data_ajax.length * 100).toFixed(0);
+          chart_energy_avg.setOption(option_energy_avg, true);
+
+        })
+      }
+    }
+
+  }
+
+
+  var colorTemplate_energy_avg = [//50-85  85-100  100-120
+    [0.5, "rgba(255,0,0,0.8)"],
+    [5 / 7, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_zhengpin_avg = [//50-75  75-85  85-100
+    [6 / 10, "rgba(255,0,0,0.8)"],
+    [7 / 10, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_density = [//0.4-0.42  红  0.4-0.38  0.38-0.36
+    [1 / 3, "rgba(0,200,250,0.8)"],
+    [2 / 3, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+  var colorTemplate_change_moulding_time = [ //30-70  蓝  70-90 绿  90-120 红
+    [4 / 9, "rgba(0,200,250,0.8)"],
+    [6 / 9, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+
+
+  var data_energy_avg = [{
+    // name: "产能达标率",
+    value: 50,
+  }];
+
+  var data_zhengpin_avg = [{
+    // name: "正品率",
+    value: 0,
+  }];
+  var data_density = [{
+    // name: "密度",
+    value: 0,
+  }];
+  var data_change_moulding_time = [{
+    // name: "换模时间",
+    value: 0,
+  }];
+
+  // 指定图表的配置项和数据
+  var option_energy_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 7, // 仪表盘刻度的分割段数,默认 10。
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_energy_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_energy_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_zhengpin_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 100, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 5, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_zhengpin_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_zhengpin_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_density = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{c}",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 0.36, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 0.42, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 6, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_density, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_density
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_change_moulding_time = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 30, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 9, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_change_moulding_time, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_change_moulding_time
+    }]
+
+  };
+
+
+</script>
+
+
+<style lang="scss" scoped>
+  .dashboard-editor-container {
+    padding: 32px;
+    background-color: rgb(240, 242, 245);
+    position: relative;
+
+    .chart-wrapper {
+      background: #fff;
+      padding: 16px 16px 0;
+      margin-bottom: 32px;
+    }
+  }
+
+  @media (max-width: 1024px) {
+    .chart-wrapper {
+      padding: 8px;
+    }
+  }
+</style>
+
diff --git a/ruoyi-ui/src/views/sd_dashboard/dashboard_daterange.vue b/ruoyi-ui/src/views/sd_dashboard/dashboard_daterange.vue
new file mode 100644
index 000000000..f33bddc37
--- /dev/null
+++ b/ruoyi-ui/src/views/sd_dashboard/dashboard_daterange.vue
@@ -0,0 +1,952 @@
+<template>
+  <div class="dashboard-editor-container">
+    <div class="ibox-title">
+      <el-row :gutter="32">
+
+      <el-col :xs="24" :sm="24" :lg="24">
+
+        <b>选择时间范围</b>
+
+        <el-date-picker
+          v-model="daterange_time1"
+          align="right"
+          value-format="yyyy-MM-dd"
+          type="date"
+          placeholder="选择日期"
+          :picker-options="pickerOptions">
+        </el-date-picker>
+        <el-select style="width: 90px" v-model="daterange_group_value1" placeholder="请选择">
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
+        <b>--</b>
+        <el-date-picker
+          v-model="daterange_time2"
+          align="right"
+          value-format="yyyy-MM-dd"
+          type="date"
+          placeholder="选择日期"
+          :picker-options="pickerOptions">
+        </el-date-picker>
+        <el-select style="width: 90px" v-model="daterange_group_value2" placeholder="请选择">
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
+        <el-button @click="getData" type="primary">查询</el-button>
+        <el-button @click="exportExcel" type="primary">导出明细</el-button>
+
+
+      </el-col>
+      </el-row>
+    </div>
+
+    <el-row :gutter="32">
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_zhengpin_avg" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">正品率</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_change_moulding_time" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均换模时间</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_density" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均密度</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_energy_avg" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">产能达标率</h2>
+        </div>
+      </el-col>
+    </el-row>
+
+    <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
+      <b>汇总统计</b>
+      <div class="ibox-content">
+        <el-col :xs="24" :sm="18" :lg="18">
+        <el-table
+          id="exportTableData"
+          :data="tableDataSum"
+          stripe
+          border
+          style="width: 100%">
+          <el-table-column
+            prop="开线数量"
+            label="开线数量"
+            width="100">
+          </el-table-column>
+          <el-table-column
+            prop="完成箱数"
+            label="完成箱数">
+          </el-table-column>
+          <el-table-column
+            prop="线均箱数"
+            label="线均箱数">
+          </el-table-column>
+          <el-table-column
+            prop="产能达标率"
+            label="产能达标率">
+          </el-table-column>
+          <el-table-column
+            prop="正品达标率"
+            label="正品率">
+          </el-table-column>
+          <el-table-column
+            prop="平均密度"
+            label="平均密度">
+          </el-table-column>
+
+        </el-table>
+        </el-col>
+        <el-col :xs="24" :sm="6" :lg="6">
+
+        <el-table
+          id="exportTableData3"
+          :data="tableDataSum2"
+          stripe
+          border
+          style="width: 100%">
+          <el-table-column
+            prop="换模次数"
+            label="换模次数">
+          </el-table-column>
+          <el-table-column
+            prop="平均换模时间"
+            label="平均换模时间">
+          </el-table-column>
+        </el-table>
+        </el-col>
+
+      </div>
+    </el-row>
+
+
+    <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
+      <b>产线明细</b>
+      <div class="ibox-content">
+        <el-table
+          id="exportTableData2"
+          :data="tableData"
+          stripe
+          border
+          style="width: 100%">
+          <el-table-column
+            prop="line"
+            label="线号"
+            width="100">
+          </el-table-column>
+          <el-table-column
+            prop="Moulds"
+            label="模具">
+          </el-table-column>
+          <el-table-column
+            prop="sumbox"
+            label="完成箱数">
+          </el-table-column>
+          <el-table-column
+            prop="avg_currentcapacity"
+            label="平均实际产能">
+          </el-table-column>
+          <el-table-column
+            prop="avg_normalcapacity"
+            label="平均标准产能">
+          </el-table-column>
+          <el-table-column
+            prop="capacityrate"
+            label="产能达标率">
+          </el-table-column>
+          <el-table-column
+            prop="yieldrate"
+            label="正品率">
+          </el-table-column>
+          <el-table-column
+            prop="avg_density"
+            label="平均密度">
+          </el-table-column>
+
+
+        </el-table>
+      </div>
+    </el-row>
+
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+  import FileSaver from 'file-saver'
+  import XLSX from 'xlsx'
+  require('echarts/theme/macarons') // echarts theme
+  import resize from '../dashboard/mixins/resize'
+  import {getDateRange} from '@/api/sd_dashboard/sd_dashboard'
+  import {getDateRangeChangeMouldTime} from '@/api/sd_dashboard/sd_changemouldtime'
+
+  const lineChartData = {
+    xAxisData: [],
+    actualData: []
+  }
+
+  export default {
+    mixins: [resize],
+    name: 'density30day',
+    data() {
+      return {
+        tableData: [],
+        tableDataSum: [],
+        tableDataSum2: [],
+
+        options: [{
+          value: '08:00:01',
+          label: '08:00'
+        }, {
+          value: '20:00:00',
+          label: '20:00'
+        }],
+        daterange_group_value1: [],
+        daterange_group_value2: [],
+        pickerOptions: {
+          disabledDate(time) {
+            return time.getTime() > Date.now();
+          },
+          shortcuts: [{
+            text: '今天',
+            onClick(picker) {
+              picker.$emit('pick', new Date());
+            }
+          }, {
+            text: '昨天',
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() - 3600 * 1000 * 24);
+              picker.$emit('pick', date);
+            }
+          }, {
+            text: '一周前',
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit('pick', date);
+            }
+          }]
+        },
+        daterange_time1: '',
+        daterange_time2: '',
+      }
+    },
+
+    created() {
+
+      this.daterange_group_value1 = "08:00:01"
+      this.daterange_group_value2 = "08:00:01"
+      this.daterange_time1= '2020-07-16'
+      this.daterange_time2= '2020-07-16'
+
+
+    },
+    mounted() {
+
+
+    },
+    methods: {
+        getData() {
+        const fDateStart = this.daterange_time1 + ' ' + this.daterange_group_value1
+        const fDateEnd = this.daterange_time2 + ' ' + this.daterange_group_value2
+        this.lineChartData = {
+          xAxisData: [],
+          actualData: []
+        }
+        this.tableData=[];
+        this.tableDataSum=[];
+        this.tableDataSum2=[];
+
+
+
+          getDateRange(fDateStart,fDateEnd).then(response => {
+
+          var j,k,l;
+          var avg_zhengpin_avg = 0;
+          var avg_density = 0;
+          var avg_energy_avg = 0;
+          var avg_chang_moulding_time = 0;
+          var sum_quantity = 0;
+          var sum_currentfinishedquantity = 0;
+          var line_sum = 0;
+          j = 0;
+          k = 0;
+          l = 0;
+
+
+          var data_ajax = response.data;
+
+          for (var i = 0; i < response.data.length; i++) {
+            lineChartData.xAxisData.push((response.data[i].time + '').replace(' 00:00:00.0', ''))
+            lineChartData.actualData.push(parseFloat(response.data[i].density).toFixed(4))
+
+
+            this.tableData.push({
+              line: response.data[i].line,
+              Moulds: response.data[i].Moulds+'-',
+              sumbox: response.data[i].sumbox,
+              avg_currentcapacity: (response.data[i].avg_currentcapacity * 1 * response.data[i].sum_box_meter / response.data[i].sum_device_meter).toFixed(2),
+              avg_normalcapacity: (response.data[i].avg_normalcapacity * 1).toFixed(2),
+              capacityrate: (response.data[i].avg_currentcapacity / response.data[i].avg_normalcapacity * response.data[i].sum_box_meter / response.data[i].sum_device_meter * 100).toFixed(2) + "%",
+              yieldrate: (response.data[i].sum_box_meter / response.data[i].sum_device_meter * 100).toFixed(2) + "%",
+              avg_density: (response.data[i].avg_density * 1).toFixed(4),
+              lastchangemouldtime: (response.data[i].lastchangemouldtime),
+
+            })
+
+
+
+
+
+            if (data_ajax[i].lastchangemouldtime >= 10) {
+              avg_chang_moulding_time = avg_chang_moulding_time + (data_ajax[i].lastchangemouldtime) * 1;
+              j = j + 1;
+            }
+
+            if (data_ajax[i].sum_device_meter !== null) {
+              avg_zhengpin_avg = avg_zhengpin_avg + (data_ajax[i].sum_box_meter / data_ajax[i].sum_device_meter) * 1;
+              k = k + 1;
+            }
+
+            if (data_ajax[i].avg_currentcapacity !== null) {
+              avg_energy_avg = avg_energy_avg + (data_ajax[i].avg_currentcapacity / data_ajax[i].avg_normalcapacity);
+              l = l + 1;
+            }
+            avg_density = parseFloat(avg_density) + parseFloat(data_ajax[i].avg_density);
+        //    avg_energy_avg = avg_energy_avg + (data_ajax[i].avg_currentcapacity / data_ajax[i].avg_normalcapacity);
+          //  avg_zhengpin_avg = avg_zhengpin_avg + (data_ajax[i].sum_box_meter / data_ajax[i].sum_device_meter);
+            sum_quantity = 2000;
+           sum_currentfinishedquantity = sum_currentfinishedquantity + (data_ajax[i].sumbox) * 1;
+
+
+          }
+
+          const chart_energy_avg = echarts.init(document.getElementById("chart_energy_avg"));
+          const chart_zhengpin_avg = echarts.init(document.getElementById("chart_zhengpin_avg"));
+          const chart_density = echarts.init(document.getElementById("chart_density"));
+          const chart_change_moulding_time = echarts.init(document.getElementById("chart_change_moulding_time"));
+
+          // 设置仪表盘数据
+
+
+
+          option_zhengpin_avg.series[0].data[0].value = (avg_zhengpin_avg / k * 100).toFixed(0);
+          chart_zhengpin_avg.setOption(option_zhengpin_avg, true);
+
+          option_density.series[0].data[0].value = (avg_density / data_ajax.length).toFixed(3);
+          chart_density.setOption(option_density, true);
+
+          //option_change_moulding_time.series[0].data[0].value = (avg_chang_moulding_time / data_ajax.length).toFixed(0);
+          // option_change_moulding_time.series[0].data[0].value = 0;
+          // chart_change_moulding_time.setOption(option_change_moulding_time, true);
+
+          option_energy_avg.series[0].data[0].value = (avg_energy_avg / l * avg_zhengpin_avg / k * 100).toFixed(0);
+          chart_energy_avg.setOption(option_energy_avg, true);
+
+            //汇总数据填充
+            this.tableDataSum.push({
+              平均密度:(avg_density / data_ajax.length).toFixed(3),
+              正品达标率: (avg_zhengpin_avg / k * 100).toFixed(0)+'%',
+              产能达标率: (avg_energy_avg / l * avg_zhengpin_avg / k * 100).toFixed(0)+'%',
+              线均箱数: (sum_currentfinishedquantity/(response.data.length)).toFixed(1),
+              完成箱数: sum_currentfinishedquantity.toFixed(1),
+              开线数量: (response.data.length),
+
+
+            })
+
+        })
+
+
+        getDateRangeChangeMouldTime(fDateStart,fDateEnd).then(response => {
+          const chart_change_moulding_time = echarts.init(document.getElementById("chart_change_moulding_time"));
+
+          option_change_moulding_time.series[0].data[0].value = (response.data[0].avgchangemouldtime * 1);
+
+          chart_change_moulding_time.setOption(option_change_moulding_time, true);
+
+
+
+
+          //总表数据填充
+          this.tableDataSum2.push({
+            平均换模时间: (response.data[0].avgchangemouldtime * 1),
+            换模次数:  (response.data[0].num * 1),
+          })
+
+
+
+
+        })
+
+
+
+
+      },
+      exportExcel () {
+        /* generate workbook object from table */
+        let wb = XLSX.utils.table_to_book(document.querySelector('#exportTableData2'));
+        /* get binary string as output */
+        let wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' });
+        try {
+          FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), '车间报表.xlsx');
+        } catch (e)
+        {
+          if (typeof console !== 'undefined')
+            console.log(e, wbout)
+        }
+        return wbout
+      },
+
+    }
+
+  }
+
+
+  var colorTemplate_energy_avg = [//50-85  85-100  100-120
+    [0.5, "rgba(255,0,0,0.8)"],
+    [5 / 7, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_zhengpin_avg = [//50-75  75-85  85-100
+    [6 / 10, "rgba(255,0,0,0.8)"],
+    [7 / 10, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_density = [//0.4-0.42  红  0.4-0.38  0.38-0.36
+    [1 / 3, "rgba(0,200,250,0.8)"],
+    [2 / 3, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+  var colorTemplate_change_moulding_time = [ //30-70  蓝  70-90 绿  90-120 红
+    [4 / 9, "rgba(0,200,250,0.8)"],
+    [6 / 9, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+
+
+  var data_energy_avg = [{
+    // name: "产能达标率",
+    value: 50,
+  }];
+
+  var data_zhengpin_avg = [{
+    // name: "正品率",
+    value: 0,
+  }];
+  var data_density = [{
+    // name: "密度",
+    value: 0,
+  }];
+  var data_change_moulding_time = [{
+    // name: "换模时间",
+    value: 0,
+  }];
+
+  // 指定图表的配置项和数据
+  var option_energy_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 7, // 仪表盘刻度的分割段数,默认 10。
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_energy_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_energy_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_zhengpin_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 100, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 5, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_zhengpin_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_zhengpin_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_density = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{c}",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 0.36, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 0.42, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 6, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_density, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_density
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_change_moulding_time = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 30, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 9, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_change_moulding_time, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_change_moulding_time
+    }]
+
+  };
+
+
+</script>
+
+
+<style lang="scss" scoped>
+  .dashboard-editor-container {
+    padding: 32px;
+    background-color: rgb(240, 242, 245);
+    position: relative;
+
+    .chart-wrapper {
+      background: #fff;
+      padding: 16px 16px 0;
+      margin-bottom: 32px;
+    }
+  }
+
+  @media (max-width: 1024px) {
+    .chart-wrapper {
+      padding: 8px;
+    }
+  }
+</style>
+
diff --git a/ruoyi-ui/src/views/sd_dashboard/dashboard_group.vue b/ruoyi-ui/src/views/sd_dashboard/dashboard_group.vue
new file mode 100644
index 000000000..fd5aaa407
--- /dev/null
+++ b/ruoyi-ui/src/views/sd_dashboard/dashboard_group.vue
@@ -0,0 +1,781 @@
+<template>
+  <div class="dashboard-editor-container">
+    <el-row :gutter="32">
+
+      <el-col :xs="24" :sm="12" :lg="12" style="height: 170px">
+
+
+        <table class="ibox" style="font-size:24px;width: 100%;margin-top: 50px" >
+          <tbody>
+          <tr>
+            <!-- <td>
+                    <strong>日期</strong> <i id="groupdate"></i>
+                </td>                                         -->
+            <td id="groupdate">
+            </td>
+            <td>
+              <strong>班次</strong> 白班
+            </td>
+          <tr>
+          </tr>
+          <td>
+            <strong>班组</strong> 陈亮
+          </td>
+          <td>
+            <strong>开线数量</strong> <i id="line_open_numbers">31/32</i>
+          </td>
+          </tbody>
+        </table>
+        <!--右上角 生产进度 -->
+
+      </el-col>
+
+
+
+
+
+      <el-col :xs="24" :sm="12" :lg="12">
+        <div class="ibox">
+          <div class="m-b-xs">
+            <h5 style="font-size:20px;">生产进度</h5>
+            <h2 id=shengchanjindu>65%</h2>
+            <div id=finishedbox class="m-t-sm small">当班已完成: 1200/2500 (箱)</div>
+            <el-progress id="shengchanjinduavg" :percentage="56" :format="format"></el-progress>
+
+          </div>
+        </div>
+      </el-col>
+
+    </el-row>
+
+
+    <el-row :gutter="32">
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_zhengpin_avg" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">正品率</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_change_moulding_time" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均换模时间</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_density" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均密度</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_energy_avg" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">产能达标率</h2>
+        </div>
+      </el-col>
+    </el-row>
+
+    <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
+      <div class="ibox ">
+        <div class="ibox-title">
+          <h5>产线明细 </h5>
+        </div>
+        <div class="ibox-content">
+          <el-table
+            :data="tableData"
+            stripe
+            border
+            style="width: 100%">
+            <el-table-column
+              prop="line"
+              label="线号"
+              width="100">
+            </el-table-column>
+            <el-table-column
+              prop="Moulds"
+              label="量产模具">
+            </el-table-column>
+            <el-table-column
+              prop="FinishedQuantity"
+              label="完成箱数">
+            </el-table-column>
+            <el-table-column
+              prop="GroupProcessTime"
+              label="量产用时">
+            </el-table-column>
+            <el-table-column
+              prop="NormalCapacity"
+              label="标准产能">
+            </el-table-column>
+            <el-table-column
+              prop="currentspeed"
+              label="牵引产能">
+            </el-table-column>
+            <el-table-column
+              prop="CapacityStandardObtainedRate"
+              label="产能达标率">
+            </el-table-column>
+            <el-table-column
+              prop="CurrentYield"
+              label="正品率">
+            </el-table-column>
+            <el-table-column
+              prop="AvgDensity"
+              label="平均密度">
+            </el-table-column>
+            <el-table-column
+              prop="MouldAndChangeMouldTime"
+              label="换模型号-用时">
+            </el-table-column>
+            <el-table-column
+              prop="Person"
+              label="人员">
+            </el-table-column>
+
+          </el-table>
+        </div>
+      </div>
+    </el-row>
+
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+
+  require('echarts/theme/macarons') // echarts theme
+  import resize from '../dashboard/mixins/resize'
+  import {getDashboardGroup} from '@/api/sd_dashboard/sd_dashboard'
+
+  let lineChartData = {
+    xAxisData: [],
+    actualData: []
+  }
+
+  export default {
+    mixins: [resize],
+    name: 'density30day',
+    data() {
+      return {
+        tableData: []
+      }
+    },
+
+    created() {
+      this.getData()
+
+    },
+    mounted() {
+
+
+    },
+    methods: {
+      getData() {
+
+
+        getDashboardGroup().then(response => {
+
+          var j;
+          var avg_zhengpin_avg = 0;
+          var avg_density = 0;
+          var avg_energy_avg = 0;
+          var avg_chang_moulding_time = 0;
+          var sum_quantity = 0;
+          var sum_currentfinishedquantity = 0;
+          j = 0;
+
+          var data_ajax = response.data;
+
+          for (var i = 0; i < response.data.length; i++) {
+            lineChartData.xAxisData.push((response.data[i].time + '').replace(' 00:00:00.0', ''))
+            lineChartData.actualData.push(parseFloat(response.data[i].density).toFixed(4))
+
+
+            this.tableData.push({
+              line: response.data[i].line,
+              Moulds: response.data[i].Moulds,
+              FinishedQuantity: response.data[i].FinishedQuantity,
+              GroupProcessTime: (response.data[i].GroupTime * 1) - (response.data[i].GroupChangeMouldTime * 1),
+              NormalCapacity: response.data[i].NormalCapacity,
+              currentspeed: (response.data[i].currentspeed * 1).toFixed(0),
+              CapacityStandardObtainedRate: (response.data[i].CapacityStandardObtainedRate * 100).toFixed(2) + '%',
+              CurrentYield: (response.data[i].CurrentYield * 100).toFixed(2) + '%',
+              AvgDensity: (response.data[i].AvgDensity * 1).toFixed(4),
+              MouldAndChangeMouldTime: response.data[i].MouldAndChangeMouldTime,
+              Person: response.data[i].Person,
+            })
+
+            if (data_ajax[i].GroupChangeMouldTime !== 0) {
+              avg_chang_moulding_time = avg_chang_moulding_time + (data_ajax[i].GroupChangeMouldTime) * 1;
+              j = j + 1;
+            }
+
+            avg_density = parseFloat(avg_density) + parseFloat(data_ajax[i].AvgDensity);
+
+            avg_energy_avg = avg_energy_avg + (data_ajax[i].CapacityStandardObtainedRate) * 1;
+
+            avg_zhengpin_avg = avg_zhengpin_avg + (data_ajax[i].CurrentYield) * 1;
+
+            sum_quantity = 2000;
+
+            sum_currentfinishedquantity = sum_currentfinishedquantity + (data_ajax[i].FinishedQuantity) * 1;
+
+
+          }
+
+          const chart_energy_avg = echarts.init(document.getElementById("chart_energy_avg"));
+          const chart_zhengpin_avg = echarts.init(document.getElementById("chart_zhengpin_avg"));
+          const chart_density = echarts.init(document.getElementById("chart_density"));
+          const chart_change_moulding_time = echarts.init(document.getElementById("chart_change_moulding_time"));
+
+
+          option_zhengpin_avg.series[0].data[0].value = (avg_zhengpin_avg / data_ajax.length * 100).toFixed(0);
+          chart_zhengpin_avg.setOption(option_zhengpin_avg, true);
+
+          option_density.series[0].data[0].value = (avg_density / data_ajax.length).toFixed(3);
+          chart_density.setOption(option_density, true);
+
+          option_change_moulding_time.series[0].data[0].value = (avg_chang_moulding_time / j).toFixed(0);
+          chart_change_moulding_time.setOption(option_change_moulding_time, true);
+
+          option_energy_avg.series[0].data[0].value = (avg_energy_avg / data_ajax.length * 100).toFixed(0);
+          chart_energy_avg.setOption(option_energy_avg, true);
+
+        })
+      }
+    }
+
+  }
+
+
+  var colorTemplate_energy_avg = [//50-85  85-100  100-120
+    [0.5, "rgba(255,0,0,0.8)"],
+    [5 / 7, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_zhengpin_avg = [//50-75  75-85  85-100
+    [6 / 10, "rgba(255,0,0,0.8)"],
+    [7 / 10, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_density = [//0.4-0.42  红  0.4-0.38  0.38-0.36
+    [1 / 3, "rgba(0,200,250,0.8)"],
+    [2 / 3, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+  var colorTemplate_change_moulding_time = [ //30-70  蓝  70-90 绿  90-120 红
+    [4 / 9, "rgba(0,200,250,0.8)"],
+    [6 / 9, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+
+
+  var data_energy_avg = [{
+    // name: "产能达标率",
+    value: 50,
+  }];
+
+  var data_zhengpin_avg = [{
+    // name: "正品率",
+    value: 0,
+  }];
+  var data_density = [{
+    // name: "密度",
+    value: 0,
+  }];
+  var data_change_moulding_time = [{
+    // name: "换模时间",
+    value: 0,
+  }];
+
+  // 指定图表的配置项和数据
+  var option_energy_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 7, // 仪表盘刻度的分割段数,默认 10。
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_energy_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_energy_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_zhengpin_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 100, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 5, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_zhengpin_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_zhengpin_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_density = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{c}",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 0.36, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 0.42, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 6, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_density, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_density
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_change_moulding_time = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 30, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 9, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_change_moulding_time, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_change_moulding_time
+    }]
+
+  };
+
+
+</script>
+
+
+<style lang="scss" scoped>
+  .dashboard-editor-container {
+    padding: 32px;
+    background-color: rgb(240, 242, 245);
+    position: relative;
+
+    .chart-wrapper {
+      background: #fff;
+      padding: 16px 16px 0;
+      margin-bottom: 32px;
+    }
+  }
+
+  @media (max-width: 1024px) {
+    .chart-wrapper {
+      padding: 8px;
+    }
+  }
+</style>
+
diff --git a/ruoyi-ui/src/views/sd_dashboard/dashboard_lastday.vue b/ruoyi-ui/src/views/sd_dashboard/dashboard_lastday.vue
new file mode 100644
index 000000000..1a2c64d4f
--- /dev/null
+++ b/ruoyi-ui/src/views/sd_dashboard/dashboard_lastday.vue
@@ -0,0 +1,722 @@
+<template>
+  <div class="dashboard-editor-container">
+
+
+    <el-row :gutter="32">
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_zhengpin_avg" style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">正品率</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_change_moulding_time"  style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均换模时间</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_density"  style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">平均密度</h2>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12" :lg="6">
+        <div class="ibox">
+          <div id="chart_energy_avg"  style="width: 100%;height: 204px;left: 0%;"></div>
+          <h2 class="text-center" style="margin-top: 0px;">产能达标率</h2>
+        </div>
+      </el-col>
+    </el-row>
+
+    <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
+      <div class="ibox ">
+        <div class="ibox-title">
+          <h5>产线明细 </h5>
+        </div>
+        <div class="ibox-content">
+          <el-table
+            :data="tableData"
+            stripe
+            border
+            style="width: 100%">
+            <el-table-column
+              prop="line"
+              label="线号"
+              width="100">
+            </el-table-column>
+            <el-table-column
+              prop="Moulds"
+              label="模具">
+            </el-table-column>
+            <el-table-column
+              prop="sumbox"
+              label="完成箱数">
+            </el-table-column>
+            <el-table-column
+              prop="avg_currentcapacity"
+              label="平均实际产能">
+            </el-table-column>
+            <el-table-column
+              prop="avg_normalcapacity"
+              label="平均标准产能">
+            </el-table-column>
+            <el-table-column
+              prop="capacityrate"
+              label="产能达标率">
+            </el-table-column>
+            <el-table-column
+              prop="yieldrate"
+              label="正品达标率">
+            </el-table-column>
+            <el-table-column
+              prop="avg_density"
+              label="平均密度">
+            </el-table-column>
+            <el-table-column
+              prop="lastchangemouldtime"
+              label="上次换模时间">
+            </el-table-column>
+
+
+          </el-table>
+        </div>
+      </div>
+    </el-row>
+
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+
+  require('echarts/theme/macarons') // echarts theme
+  import resize from '../dashboard/mixins/resize'
+  import {getLastDay} from '@/api/sd_dashboard/sd_dashboard'
+
+
+  const lineChartData = {
+    xAxisData: [],
+    actualData: []
+  }
+
+  export default {
+    mixins: [resize],
+    name: 'density30day',
+    data() {
+      return {
+        tableData: []
+      }
+    },
+
+    created() {
+      this.getData()
+
+    },
+    mounted() {
+
+
+    },
+    methods: {
+      getData() {
+
+        getLastDay().then(response => {
+
+          var j;
+          var avg_zhengpin_avg = 0;
+          var avg_density = 0;
+          var avg_energy_avg = 0;
+          var avg_chang_moulding_time = 0;
+          var sum_quantity = 0;
+          var sum_currentfinishedquantity = 0;
+          j = 0;
+
+          var data_ajax = response.data;
+
+          for (var i = 0; i < response.data.length; i++) {
+            lineChartData.xAxisData.push((response.data[i].time + '').replace(' 00:00:00.0', ''))
+            lineChartData.actualData.push(parseFloat(response.data[i].density).toFixed(4))
+
+
+            this.tableData.push({
+              line: response.data[i].line,
+              Moulds: response.data[i].Moulds,
+              sumbox: response.data[i].sumbox,
+              avg_currentcapacity: (response.data[i].avg_currentcapacity * 1 * response.data[i].sum_box_meter / response.data[i].sum_device_meter).toFixed(2),
+              avg_normalcapacity: (response.data[i].avg_normalcapacity * 1).toFixed(2),
+              capacityrate: (response.data[i].avg_currentcapacity / response.data[i].avg_normalcapacity * response.data[i].sum_box_meter / response.data[i].sum_device_meter * 100).toFixed(2) + "%",
+              yieldrate: (response.data[i].sum_box_meter / response.data[i].sum_device_meter * 100).toFixed(2) + "%",
+              avg_density: (response.data[i].avg_density * 1).toFixed(4),
+              lastchangemouldtime: (response.data[i].lastchangemouldtime),
+
+            })
+
+            if (data_ajax[i].lastchangemouldtime !== 0) {
+              avg_chang_moulding_time = avg_chang_moulding_time + (data_ajax[i].lastchangemouldtime) * 1;
+              j = j + 1;
+            }
+            avg_density = parseFloat(avg_density) + parseFloat(data_ajax[i].avg_density);
+            avg_energy_avg = avg_energy_avg + (data_ajax[i].avg_currentcapacity / data_ajax[i].avg_normalcapacity);
+            avg_zhengpin_avg = avg_zhengpin_avg + (data_ajax[i].sum_box_meter / data_ajax[i].sum_device_meter);
+            sum_quantity = 2000;
+            sum_currentfinishedquantity = sum_currentfinishedquantity + (data_ajax[i].sumbox) * 1;
+
+
+          }
+
+          const chart_energy_avg = echarts.init(document.getElementById("chart_energy_avg"));
+          const chart_zhengpin_avg = echarts.init(document.getElementById("chart_zhengpin_avg"));
+          const chart_density = echarts.init(document.getElementById("chart_density"));
+          const chart_change_moulding_time = echarts.init(document.getElementById("chart_change_moulding_time"));
+
+          // 设置仪表盘数据
+          option_zhengpin_avg.series[0].data[0].value = (avg_zhengpin_avg / data_ajax.length * 100).toFixed(0);
+          chart_zhengpin_avg.setOption(option_zhengpin_avg, true);
+
+          option_density.series[0].data[0].value = (avg_density / data_ajax.length).toFixed(3);
+          chart_density.setOption(option_density, true);
+
+          //option_change_moulding_time.series[0].data[0].value = (avg_chang_moulding_time / data_ajax.length).toFixed(0);
+          option_change_moulding_time.series[0].data[0].value =  0 ;
+          chart_change_moulding_time.setOption(option_change_moulding_time, true);
+
+          option_energy_avg.series[0].data[0].value = (avg_energy_avg / data_ajax.length * avg_zhengpin_avg / data_ajax.length * 100).toFixed(0);
+          chart_energy_avg.setOption(option_energy_avg, true);
+
+        })
+      }
+    }
+
+  }
+
+
+  var colorTemplate_energy_avg = [//50-85  85-100  100-120
+    [0.5, "rgba(255,0,0,0.8)"],
+    [5 / 7, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_zhengpin_avg = [//50-75  75-85  85-100
+    [6 / 10, "rgba(255,0,0,0.8)"],
+    [7 / 10, "rgba(0,180,0,0.8)"],
+    [1, "rgba(0,200,250,0.8)"]
+  ];
+  var colorTemplate_density = [//0.4-0.42  红  0.4-0.38  0.38-0.36
+    [1 / 3, "rgba(0,200,250,0.8)"],
+    [2 / 3, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+  var colorTemplate_change_moulding_time = [ //30-70  蓝  70-90 绿  90-120 红
+    [4 / 9, "rgba(0,200,250,0.8)"],
+    [6 / 9, "rgba(0,180,0,0.8)"],
+    [1, "rgba(255,0,0,0.8)"]
+  ];
+
+
+  var data_energy_avg = [{
+    // name: "产能达标率",
+    value: 50,
+  }];
+
+  var data_zhengpin_avg = [{
+    // name: "正品率",
+    value: 0,
+  }];
+  var data_density = [{
+    // name: "密度",
+    value: 0,
+  }];
+  var data_change_moulding_time = [{
+    // name: "换模时间",
+    value: 0,
+  }];
+
+  // 指定图表的配置项和数据
+  var option_energy_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 7, // 仪表盘刻度的分割段数,默认 10。
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_energy_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_energy_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_zhengpin_avg = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 50, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 100, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 5, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_zhengpin_avg, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}%", // 格式化函数或者字符串
+      },
+
+      data: data_zhengpin_avg
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_density = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{c}",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 0.36, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 0.42, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 6, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_density, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_density
+    }]
+
+  };
+  // 指定图表的配置项和数据
+  var option_change_moulding_time = {
+
+    //backgroundColor: "#000",
+
+    tooltip: { // 本系列特定的 tooltip 设定。
+      show: true,
+      formatter: "{b}:{c}%",
+      backgroundColor: "rgba(50,50,50,0.7)", // 提示框浮层的背景颜色。注意:series.tooltip 仅在 tooltip.trigger 为 'item' 时有效。
+      borderColor: "#333", // 提示框浮层的边框颜色。...
+      borderWidth: 0, // 提示框浮层的边框宽。...
+      padding: 5, // 提示框浮层内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距。...
+      textStyle: { // 提示框浮层的文本样式。...
+        // color ,fontStyle ,fontWeight ,fontFamily ,fontSize ,lineHeight ,.......
+      },
+    },
+
+    series: [{
+      name: "单仪表盘示例", // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
+      type: "gauge", // 系列类型
+      radius: "80%", // 参数:number, string。 仪表盘半径,默认 75% ,可以是相对于容器高宽中较小的一项的一半的百分比,也可以是绝对的数值。
+      center: ["50%", "55%"], // 仪表盘位置(圆心坐标)
+      startAngle: 225, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+      endAngle: -45, // 仪表盘结束角度,默认 -45
+      clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
+      min: 30, // 最小的数据值,默认 0 。映射到 minAngle。
+      max: 120, // 最大的数据值,默认 100 。映射到 maxAngle。
+      splitNumber: 9, // 仪表盘刻度的分割段数,默认 10。
+
+      axisLine: { // 仪表盘轴线(轮廓线)相关配置。
+        show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
+        lineStyle: { // 仪表盘轴线样式。
+          color: colorTemplate_change_moulding_time, //仪表盘的轴线可以被分成不同颜色的多段。每段的  结束位置(范围是[0,1]) 和  颜色  可以通过一个数组来表示。默认取值:[[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']]
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 15, //轴线宽度,默认 30。
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      splitLine: { // 分隔线样式。
+        show: true, // 是否显示分隔线,默认 true。
+        length: 21, // 分隔线线长。支持相对半径的百分比,默认 30。
+        lineStyle: { // 分隔线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 2, //线度,默认 2。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        }
+      },
+
+      axisTick: { // 刻度(线)样式。
+        show: true, // 是否显示刻度(线),默认 true。
+        splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
+        length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
+        lineStyle: { // 刻度线样式。
+          color: "#eee", //线的颜色,默认 #eee。
+          opacity: 1, //图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+          width: 1, //线度,默认 1。
+          type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
+          //shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+          //shadowColor: "#000", //阴影颜色。支持的格式同color。
+        },
+      },
+      axisLabel: { // 刻度标签。
+        show: true, // 是否显示标签,默认 true。
+        distance: 1, // 标签与刻度线的距离,默认 5。
+        color: "#000", // 文字的颜色,默认 #fff。
+        fontSize: 10, // 文字的字体大小,默认 5。
+        formatter: "{value}", // 刻度标签的内容格式器,支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板,模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板,函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
+      },
+      pointer: { // 仪表盘指针。
+        show: true, // 是否显示指针,默认 true。
+        length: "70%", // 指针长度,可以是绝对数值,也可以是相对于半径的百分比,默认 80%。
+        width: 5, // 指针宽度,默认 8。
+      },
+      itemStyle: { // 仪表盘指针样式。
+        color: "auto", // 指针颜色,默认(auto)取数值所在的区间的颜色
+        opacity: 1, // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。
+        borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
+        borderType: "solid", // 柱条的描边类型,默认为实线,支持 'solid', 'dashed', 'dotted'。
+        borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color,不支持回调函数。
+        //shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。
+        //shadowColor: "#000", // 阴影颜色。支持的格式同color。
+      },
+      emphasis: { // 高亮的 仪表盘指针样式
+        itemStyle: {
+          //高亮 和正常  两者具有同样的配置项,只是在不同状态下配置项的值不同。
+        }
+      },
+      title: { // 仪表盘标题。
+        show: true, // 是否显示标题,默认 true。
+        offsetCenter: [0,
+          "20%"], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "#000", // 文字的颜色,默认 #333。
+        fontSize: 15, // 文字的字体大小,默认 15。
+      },
+      detail: { // 仪表盘详情,用于显示数据。
+        show: true, // 是否显示详情,默认 true。
+        offsetCenter: [0,
+          "50%"], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
+        color: "auto", // 文字的颜色,默认 auto。
+        fontSize: 20, // 文字的字体大小,默认 15。
+        formatter: "{value}", // 格式化函数或者字符串
+      },
+
+      data: data_change_moulding_time
+    }]
+
+  };
+
+
+</script>
+
+
+<style lang="scss" scoped>
+  .dashboard-editor-container {
+    padding: 32px;
+    background-color: rgb(240, 242, 245);
+    position: relative;
+
+    .chart-wrapper {
+      background: #fff;
+      padding: 16px 16px 0;
+      margin-bottom: 32px;
+    }
+  }
+
+  @media (max-width: 1024px) {
+    .chart-wrapper {
+      padding: 8px;
+    }
+  }
+</style>
+
diff --git a/ruoyi-ui/src/views/sd_density/sd_density_30d.vue b/ruoyi-ui/src/views/sd_density/sd_density_30d.vue
new file mode 100644
index 000000000..164754dd0
--- /dev/null
+++ b/ruoyi-ui/src/views/sd_density/sd_density_30d.vue
@@ -0,0 +1,194 @@
+<template>
+  <div >
+    <el-container >
+      <div id="chart_density_avg" style="width: 90%;height: 600px;top:20px"></div>
+    </el-container>
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+
+  require('echarts/theme/macarons') // echarts theme
+  import resize from '../dashboard/mixins/resize'
+  import { getDensity30Day } from '@/api/sd_dashboard/sd_density'
+
+  let lineChartData = {
+    xAxisData: [],
+    actualData: []
+  }
+
+  export default  {
+    mixins: [resize],
+    name: 'density30day',
+
+    created() {
+      this.getData()
+    },
+    mounted() {
+
+
+    },
+    methods: {
+      getData() {
+
+        lineChartData = {
+          xAxisData: [],
+          actualData: []
+        }
+
+        getDensity30Day().then(response => {
+          for (var i = 0; i < response.data.length; i++) {
+            lineChartData.xAxisData.push((response.data[i].time + '').replace(' 00:00:00.0', ''))
+            lineChartData.actualData.push(parseFloat(response.data[i].density).toFixed(3))
+          }
+
+          const chart_energy_avg = echarts.init(document.getElementById('chart_density_avg'))
+
+          option_energy_avg.xAxis[0].data = lineChartData.xAxisData
+          option_energy_avg.series[0].data = lineChartData.actualData
+          option_energy_avg.title.text = '30天平均密度'
+          option_energy_avg.yAxis[0].min = (Math.min.apply(null, lineChartData.actualData).toFixed(2)*1-0.01)
+          option_energy_avg.yAxis[0].max = (Math.max.apply(null, lineChartData.actualData).toFixed(2)*1+0.01)
+
+
+
+
+
+
+          chart_energy_avg.setOption(option_energy_avg, true)
+
+        })
+      }
+    }
+
+  }
+
+  const option_energy_avg = {
+    title: {
+      text: '',
+      textStyle: {
+        color: '#000',
+        fontSize: 18
+      },
+      itemGap: 5,
+
+      x: 'center'
+    },
+    tooltip: {
+      trigger: 'axis'
+    },
+    xAxis: [{
+      type: 'category',
+      data: ['1#', '2#', '3#', '30#'],
+      axisLine: {
+        lineStyle: {
+          color: '#999'
+        }
+      }
+    }],
+    yAxis: [{
+      type: 'value',
+      min: 0.36,
+      max: 0.42,
+
+      // splitNumber: 12,
+      splitLine: {
+        lineStyle: {
+          type: 'dashed',
+          color: '#DDD'
+        }
+      },
+      axisLine: {
+        show: false,
+        lineStyle: {
+          color: '#333'
+        }
+      },
+      nameTextStyle: {
+        color: '#999'
+      },
+      splitArea: {
+        show: false
+      }
+    }],
+    series: [{
+      name: '密度',
+      type: 'line',
+      data: [80, 72],
+      lineStyle: {
+        normal: {
+          width: 8,
+          color: {
+            type: 'linear',
+
+            colorStops: [{
+              offset: 0,
+              color: '#A9F387' // 0% 处的颜色
+            }, {
+              offset: 1,
+              color: '#48D8BF' // 100% 处的颜色
+            }],
+            globalCoord: false // 缺省为 false
+          },
+          shadowColor: 'rgba(72,216,191, 0.3)',
+          shadowBlur: 10,
+          shadowOffsetY: 20
+        }
+      },
+      itemStyle: {
+        normal: {
+          color: '#a32323',
+          borderWidth: 10,
+          /*shadowColor: 'rgba(72,216,191, 0.3)',
+          shadowBlur: 100,*/
+          borderColor: '#A9F387',
+          label : {show: true}
+        }
+      },
+      smooth: false,
+      markLine: {
+        label: {
+          formatter: '{b}: {c}'
+        },
+        precision: 4,
+        lineStyle: {
+          width: 3,
+          color: 'red'
+        },
+        data: [{
+          name: '目标',
+          yAxis: '0.38'
+        }, {
+          type: 'average',
+          name: '平均'
+        }]
+      }
+    }]
+
+  }
+
+
+</script>
+
+
+<style lang="scss" scoped>
+  .dashboard-editor-container {
+    padding: 32px;
+    background-color: rgb(240, 242, 245);
+    position: relative;
+
+    .chart-wrapper {
+      background: #fff;
+      padding: 16px 16px 0;
+      margin-bottom: 32px;
+    }
+  }
+
+  @media (max-width:1024px) {
+    .chart-wrapper {
+      padding: 8px;
+    }
+  }
+</style>
+
diff --git a/ruoyi-ui/src/views/sd_density/sd_density_72h.vue b/ruoyi-ui/src/views/sd_density/sd_density_72h.vue
new file mode 100644
index 000000000..31fc388f4
--- /dev/null
+++ b/ruoyi-ui/src/views/sd_density/sd_density_72h.vue
@@ -0,0 +1,196 @@
+<template>
+  <div >
+    <el-container >
+      <div id="chart_density_avg" style="width: 90%;height: 600px;top:20px"></div>
+    </el-container>
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+
+  require('echarts/theme/macarons') // echarts theme
+  import resize from '../dashboard/mixins/resize'
+  import { getDensity72h } from '@/api/sd_dashboard/sd_density'
+
+  let lineChartData = {
+    xAxisData: [],
+    actualData: []
+  }
+
+  export default  {
+    mixins: [resize],
+    name: 'density72h',
+
+    created() {
+      this.getData()
+    },
+    mounted() {
+
+
+    },
+    methods: {
+      getData() {
+
+        lineChartData = {
+          xAxisData: [],
+          actualData: []
+        }
+
+        getDensity72h().then(response => {
+          for (let i = 0; i < response.data.length; i++) {
+            lineChartData.xAxisData.push((response.data[i].time + '').replace(':00.0', ''))
+            lineChartData.actualData.push(parseFloat(response.data[i].density).toFixed(3))
+          }
+
+          const chart_energy_avg = echarts.init(document.getElementById('chart_density_avg'))
+
+          option_energy_avg.xAxis[0].data = lineChartData.xAxisData
+          option_energy_avg.series[0].data = lineChartData.actualData
+          option_energy_avg.title.text = '72小时平均密度'
+          option_energy_avg.yAxis[0].min = (Math.min.apply(null, lineChartData.actualData).toFixed(2)*1-0.01)
+          option_energy_avg.yAxis[0].max = (Math.max.apply(null, lineChartData.actualData).toFixed(2)*1+0.01)
+
+
+
+
+
+
+
+
+          chart_energy_avg.setOption(option_energy_avg, true)
+
+        })
+      }
+    }
+
+  }
+
+  const option_energy_avg = {
+    title: {
+      text: '',
+      textStyle: {
+        color: '#000',
+        fontSize: 18
+      },
+      itemGap: 5,
+
+      x: 'center'
+    },
+    tooltip: {
+      trigger: 'axis'
+    },
+    xAxis: [{
+      type: 'category',
+      data: ['1#', '2#', '3#', '30#'],
+      axisLine: {
+        lineStyle: {
+          color: '#999'
+        }
+      }
+    }],
+    yAxis: [{
+      type: 'value',
+      min: 0.36,
+      max: 0.42,
+
+      // splitNumber: 12,
+      splitLine: {
+        lineStyle: {
+          type: 'dashed',
+          color: '#DDD'
+        }
+      },
+      axisLine: {
+        show: false,
+        lineStyle: {
+          color: '#333'
+        }
+      },
+      nameTextStyle: {
+        color: '#999'
+      },
+      splitArea: {
+        show: false
+      }
+    }],
+    series: [{
+      name: '密度',
+      type: 'line',
+      data: [80, 72],
+      lineStyle: {
+        normal: {
+          width: 8,
+          color: {
+            type: 'linear',
+
+            colorStops: [{
+              offset: 0,
+              color: '#A9F387' // 0% 处的颜色
+            }, {
+              offset: 1,
+              color: '#48D8BF' // 100% 处的颜色
+            }],
+            globalCoord: false // 缺省为 false
+          },
+          shadowColor: 'rgba(72,216,191, 0.3)',
+          shadowBlur: 10,
+          shadowOffsetY: 20
+        }
+      },
+      itemStyle: {
+        normal: {
+          color: '#a32323',
+          borderWidth: 10,
+          /*shadowColor: 'rgba(72,216,191, 0.3)',
+          shadowBlur: 100,*/
+          label : {show: true},
+          borderColor: '#A9F387'
+        }
+      },
+      smooth: false,
+      markLine: {
+        label: {
+          formatter: '{b}: {c}'
+        },
+        precision: 4,
+        lineStyle: {
+          width: 3,
+          color: 'red'
+        },
+        data: [{
+          name: '目标',
+          yAxis: '0.38'
+        }, {
+          type: 'average',
+          name: '平均'
+        }]
+      }
+    }]
+
+  }
+
+
+</script>
+
+
+<style lang="scss" scoped>
+  .dashboard-editor-container {
+    padding: 32px;
+    background-color: rgb(240, 242, 245);
+    position: relative;
+
+    .chart-wrapper {
+      background: #fff;
+      padding: 16px 16px 0;
+      margin-bottom: 32px;
+    }
+  }
+
+  @media (max-width:1024px) {
+    .chart-wrapper {
+      padding: 8px;
+    }
+  }
+</style>
+
diff --git a/ruoyi-ui/src/views/sd_density/sd_density_date_range.vue b/ruoyi-ui/src/views/sd_density/sd_density_date_range.vue
new file mode 100644
index 000000000..8169a31c5
--- /dev/null
+++ b/ruoyi-ui/src/views/sd_density/sd_density_date_range.vue
@@ -0,0 +1,261 @@
+<template>
+  <div >
+    <div class="ibox-title">
+      <el-row :gutter="24">
+
+        <el-col :xs="24" :sm="24" :lg="24">
+
+          <b>选择时间范围</b>
+
+          <el-date-picker
+            v-model="daterange_time1"
+            align="right"
+            value-format="yyyy-MM-dd"
+            type="date"
+            placeholder="选择日期"
+            :picker-options="pickerOptions">
+          </el-date-picker>
+
+          <b>--</b>
+          <el-date-picker
+            v-model="daterange_time2"
+            align="right"
+            value-format="yyyy-MM-dd"
+            type="date"
+            placeholder="选择日期"
+            :picker-options="pickerOptions">
+          </el-date-picker>
+
+          <el-button @click="getData" type="primary">查询</el-button>
+
+        </el-col>
+      </el-row>
+    </div>
+    <el-container >
+
+
+      <div id="chart_density_avg" style="width: 90%;height: 600px;top:20px"></div>
+    </el-container>
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+
+  require('echarts/theme/macarons') // echarts theme
+  import resize from '../dashboard/mixins/resize'
+  import { getDensityDataRange } from '@/api/sd_dashboard/sd_density'
+
+  let lineChartData = {
+    xAxisData: [],
+    actualData: []
+  }
+
+  export default  {
+    mixins: [resize],
+    name: 'density30day',
+    data() {
+      return {
+        tableData: [],
+        pickerOptions: {
+          disabledDate(time) {
+            return time.getTime() > Date.now();
+          },
+          shortcuts: [{
+            text: '今天',
+            onClick(picker) {
+              picker.$emit('pick', new Date());
+            }
+          }, {
+            text: '昨天',
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() - 3600 * 1000 * 24);
+              picker.$emit('pick', date);
+            }
+          }, {
+            text: '一周前',
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit('pick', date);
+            }
+          }, {
+            text: '30天前',
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() - 3600 * 1000 * 24 * 30);
+              picker.$emit('pick', date);
+            }
+          }]
+        },
+        daterange_time1: '',
+        daterange_time2: '',
+      }
+    },
+
+    created() {
+      // this.getData()
+    },
+    mounted() {
+
+
+    },
+    methods: {
+      getData() {
+
+        lineChartData = {
+          xAxisData: [],
+          actualData: []
+        }
+
+        getDensityDataRange(this.daterange_time1,this.daterange_time2).then(response => {
+          for (var i = 0; i < response.data.length; i++) {
+            lineChartData.xAxisData.push((response.data[i].time + '').replace(' 00:00:00.0', ''))
+            lineChartData.actualData.push(parseFloat(response.data[i].density).toFixed(3))
+          }
+
+          const chart_energy_avg = echarts.init(document.getElementById('chart_density_avg'))
+
+          option_energy_avg.xAxis[0].data = lineChartData.xAxisData
+          option_energy_avg.series[0].data = lineChartData.actualData
+          option_energy_avg.title.text = '平均密度'
+          option_energy_avg.yAxis[0].min = (Math.min.apply(null, lineChartData.actualData).toFixed(2)*1-0.01)
+          option_energy_avg.yAxis[0].max = (Math.max.apply(null, lineChartData.actualData).toFixed(2)*1+0.01)
+
+          chart_energy_avg.setOption(option_energy_avg, true)
+
+        })
+      }
+    }
+
+  }
+
+  const option_energy_avg = {
+    title: {
+      text: '',
+      textStyle: {
+        color: '#000',
+        fontSize: 18
+      },
+      itemGap: 5,
+
+      x: 'center'
+    },
+    tooltip: {
+      trigger: 'axis'
+    },
+    xAxis: [{
+      type: 'category',
+      data: ['1#', '2#', '3#', '30#'],
+      axisLine: {
+        lineStyle: {
+          color: '#999'
+        }
+      }
+    }],
+    yAxis: [{
+      type: 'value',
+      min: 0.36,
+      max: 0.42,
+
+      // splitNumber: 12,
+      splitLine: {
+        lineStyle: {
+          type: 'dashed',
+          color: '#DDD'
+        }
+      },
+      axisLine: {
+        show: false,
+        lineStyle: {
+          color: '#333'
+        }
+      },
+      nameTextStyle: {
+        color: '#999'
+      },
+      splitArea: {
+        show: false
+      }
+    }],
+    series: [{
+      name: '密度',
+      type: 'line',
+      data: [80, 72],
+      lineStyle: {
+        normal: {
+          width: 8,
+          color: {
+            type: 'linear',
+
+            colorStops: [{
+              offset: 0,
+              color: '#A9F387' // 0% 处的颜色
+            }, {
+              offset: 1,
+              color: '#48D8BF' // 100% 处的颜色
+            }],
+            globalCoord: false // 缺省为 false
+          },
+          shadowColor: 'rgba(72,216,191, 0.3)',
+          shadowBlur: 10,
+          shadowOffsetY: 20
+        }
+      },
+      itemStyle: {
+        normal: {
+          color: '#a32323',
+          borderWidth: 10,
+          /*shadowColor: 'rgba(72,216,191, 0.3)',
+          shadowBlur: 100,*/
+          borderColor: '#A9F387',
+          label : {show: true}
+        }
+      },
+      smooth: false,
+      markLine: {
+        label: {
+          formatter: '{b}: {c}'
+        },
+        precision: 4,
+        lineStyle: {
+          width: 3,
+          color: 'red'
+        },
+        data: [{
+          name: '目标',
+          yAxis: '0.38'
+        }, {
+          type: 'average',
+          name: '平均'
+        }]
+      }
+    }]
+
+  }
+
+
+</script>
+
+
+<style lang="scss" scoped>
+  .dashboard-editor-container {
+    padding: 32px;
+    background-color: rgb(240, 242, 245);
+    position: relative;
+
+    .chart-wrapper {
+      background: #fff;
+      padding: 16px 16px 0;
+      margin-bottom: 32px;
+    }
+  }
+
+  @media (max-width:1024px) {
+    .chart-wrapper {
+      padding: 8px;
+    }
+  }
+</style>
+
diff --git a/ruoyi-ui/src/views/sd_density/sd_density_group.vue b/ruoyi-ui/src/views/sd_density/sd_density_group.vue
new file mode 100644
index 000000000..84c9a7ffe
--- /dev/null
+++ b/ruoyi-ui/src/views/sd_density/sd_density_group.vue
@@ -0,0 +1,189 @@
+<template>
+  <div >
+    <el-container >
+      <div id="chart_density_avg" style="width: 90%;height: 600px;top:20px"></div>
+    </el-container>
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+
+  require('echarts/theme/macarons') // echarts theme
+  import resize from '../dashboard/mixins/resize'
+  import { getDensityGroup } from '@/api/sd_dashboard/sd_density'
+
+  let lineChartData = {
+    xAxisData: [],
+    actualData: []
+  }
+
+  export default  {
+    mixins: [resize],
+    name: 'density30day',
+
+    created() {
+      this.getData()
+    },
+    mounted() {
+
+
+    },
+    methods: {
+      getData() {
+
+        lineChartData = {
+          xAxisData: [],
+          actualData: []
+        }
+
+        getDensityGroup().then(response => {
+          for (var i = 0; i < response.data.length; i++) {
+            lineChartData.xAxisData.push((response.data[i].time + '').replace(' 00:00:00.0', ''))
+            lineChartData.actualData.push(parseFloat(response.data[i].density).toFixed(3))
+          }
+
+          const chart_energy_avg = echarts.init(document.getElementById('chart_density_avg'))
+
+          option_energy_avg.xAxis[0].data = lineChartData.xAxisData
+          option_energy_avg.series[0].data = lineChartData.actualData
+          option_energy_avg.title.text = '当班平均密度'
+          option_energy_avg.yAxis[0].min = (Math.min.apply(null, lineChartData.actualData).toFixed(2)*1-0.01)
+          option_energy_avg.yAxis[0].max = (Math.max.apply(null, lineChartData.actualData).toFixed(2)*1+0.01)
+
+          chart_energy_avg.setOption(option_energy_avg, true)
+
+        })
+      }
+    }
+
+  }
+
+  const option_energy_avg = {
+    title: {
+      text: '',
+      textStyle: {
+        color: '#000',
+        fontSize: 18
+      },
+      itemGap: 5,
+
+      x: 'center'
+    },
+    tooltip: {
+      trigger: 'axis'
+    },
+    xAxis: [{
+      type: 'category',
+      data: ['1#', '2#', '3#', '30#'],
+      axisLine: {
+        lineStyle: {
+          color: '#999'
+        }
+      }
+    }],
+    yAxis: [{
+      type: 'value',
+      min: 0.36,
+      max: 0.42,
+
+      // splitNumber: 12,
+      splitLine: {
+        lineStyle: {
+          type: 'dashed',
+          color: '#DDD'
+        }
+      },
+      axisLine: {
+        show: false,
+        lineStyle: {
+          color: '#333'
+        }
+      },
+      nameTextStyle: {
+        color: '#999'
+      },
+      splitArea: {
+        show: false
+      }
+    }],
+    series: [{
+      name: '密度',
+      type: 'line',
+      data: [80, 72],
+      lineStyle: {
+        normal: {
+          width: 8,
+          color: {
+            type: 'linear',
+
+            colorStops: [{
+              offset: 0,
+              color: '#A9F387' // 0% 处的颜色
+            }, {
+              offset: 1,
+              color: '#48D8BF' // 100% 处的颜色
+            }],
+            globalCoord: false // 缺省为 false
+          },
+          shadowColor: 'rgba(72,216,191, 0.3)',
+          shadowBlur: 10,
+          shadowOffsetY: 20
+        }
+      },
+      itemStyle: {
+        normal: {
+          color: '#a32323',
+          borderWidth: 10,
+          /*shadowColor: 'rgba(72,216,191, 0.3)',
+          shadowBlur: 100,*/
+          label : {show: true},
+          borderColor: '#A9F387'
+        }
+      },
+      smooth: false,
+      markLine: {
+        label: {
+          formatter: '{b}: {c}'
+        },
+        precision: 4,
+        lineStyle: {
+          width: 3,
+          color: 'red'
+        },
+        data: [{
+          name: '目标',
+          yAxis: '0.38'
+        }, {
+          type: 'average',
+          name: '平均'
+        }]
+      }
+    }]
+
+  }
+
+
+</script>
+
+
+<style lang="scss" scoped>
+  .dashboard-editor-container {
+    padding: 32px;
+    background-color: rgb(240, 242, 245);
+    position: relative;
+
+    .chart-wrapper {
+      background: #fff;
+      padding: 16px 16px 0;
+      margin-bottom: 32px;
+    }
+  }
+
+  @media (max-width:1024px) {
+    .chart-wrapper {
+      padding: 8px;
+    }
+  }
+</style>
+
diff --git a/ruoyi/src/main/java/com/ruoyi/db/mssql/DB_Ajax_DashBoard_48102.java b/ruoyi/src/main/java/com/ruoyi/db/mssql/DB_Ajax_DashBoard_48102.java
index 8c4c78a0e..6c1993668 100644
--- a/ruoyi/src/main/java/com/ruoyi/db/mssql/DB_Ajax_DashBoard_48102.java
+++ b/ruoyi/src/main/java/com/ruoyi/db/mssql/DB_Ajax_DashBoard_48102.java
@@ -142,6 +142,67 @@ public class DB_Ajax_DashBoard_48102 {
 
 
 
+	public static String SD_DoGetCurrent() {
+		StringBuilder jsonpath = new StringBuilder();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"\tChangeMould,\n" +
+					"\tV_SD_MouldingDisplayBoard.Id,\n" +
+					"\tV_SD_MouldingDisplayBoard.Line,\n" +
+					"\tV_SD_MouldingDisplayBoard.CustomerName,\n" +
+					"\tV_SD_MouldingDisplayBoard.NormalDensity,\n" +
+					"\tV_SD_MouldingDisplayBoard.Length,\n" +
+					"\tV_SD_MouldingDisplayBoard.NormalCapacity,\n" +
+					"\tV_SD_MouldingDisplayBoard.SoCode,\n" +
+					"\tV_SD_MouldingDisplayBoard.NormalWeight,\n" +
+					"\tV_SD_MouldingDisplayBoard.Quantity,\n" +
+					"\tV_SD_MouldingDisplayBoard.FactCapacity,\n" +
+					"\tV_SD_MouldingDisplayBoard.MouldingStyleCode,\n" +
+					"\tV_SD_MouldingDisplayBoard.CurrentFinishedQuantity\n" +
+					"\t\n" +
+					"\t,\n" +
+					"CASE\n" +
+					"\t\t\n" +
+					"\t\tWHEN ( CurrentYield IS NULL ) THEN\n" +
+					"\t\t0 ELSE CurrentYield \n" +
+					"\tEND AS CurrentYield,\n" +
+					"CASE\n" +
+					"\t\t\n" +
+					"\t\tWHEN ( CapacityStandardObtainedRate IS NULL ) THEN\n" +
+					"\t\t0 ELSE CapacityStandardObtainedRate \n" +
+					"\tEND AS CapacityStandardObtainedRate,\n" +
+					"\tV_SD_MouldingDisplayBoard.SectionalErea,\n" +
+					"\tV_SD_MouldingDisplayBoard.MouldYield,\n" +
+					"\tV_SD_MouldingDisplayBoard.FinishedQuantity,\n" +
+					"\tV_SD_MouldingDisplayBoard.TotalCapacity,\n" +
+					"\tV_SD_MouldingDisplayBoard.ChangeMouldTime,\n" +
+					"\tV_SD_MouldingDisplayBoard.OperatePersonCode,\n" +
+					"\tV_SD_MouldingDisplayBoard.OperatePersonName,\n" +
+					"\tV_SD_MouldingDisplayBoard.Speed,\n" +
+					"\tV_SD_MouldingDisplayBoard.CurrentFinishLength \n" +
+					"FROM\n" +
+					"\tV_SD_MouldingDisplayBoard \n" +
+					"ORDER BY\n" +
+					"\tCAST ( REPLACE( V_SD_MouldingDisplayBoard.Line, '#', '' ) AS INT ) FOR JSON PATH";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				jsonpath.append(rs.getString(1));
+
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return jsonpath.toString();
+	}
 
 	public static List<HashMap<String,String>> DoGetLastDay() {
 		List<HashMap<String,String>> hashMapList = new ArrayList<>();
diff --git a/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_8053_Test.java b/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_8053_Test.java
new file mode 100644
index 000000000..030ba96c9
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_8053_Test.java
@@ -0,0 +1,139 @@
+package com.ruoyi.db.sd_mssql;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class DB_8053_Test {
+
+	private static String IP = "192.168.80.53";
+	private static String DBName = "ERPDATA";
+	private static String USER = "sa";
+	private static String PWD = "#080507h";
+
+	/** 创建数据库对象 */
+	private static Connection getSQLConnection() {
+		Connection con = null;
+		try {
+			Class.forName("net.sourceforge.jtds.jdbc.Driver");
+			// 加上 useunicode=true;characterEncoding=UTF-8 防止中文乱码
+			con = DriverManager.getConnection(
+					"jdbc:jtds:sqlserver://" + IP + ":1433/" + DBName + ";useunicode=true;characterEncoding=UTF-8",
+					USER, PWD);
+		} catch (ClassNotFoundException | SQLException e) {
+			e.printStackTrace();
+			System.out.println("==连接数据库失败===");
+		}
+		// System.out.println("==连接数据库成功===");
+		return con;
+	}
+
+	public static void main(String[] args) {
+
+	}
+
+
+
+	public static List<HashMap<String,String>> DoGetChangeMouldTimeList() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"\tLine,\n" +
+					"\tLEFT ( MouldingStyleCode, charindex( '-', MouldingStyleCode ) - 1 ) as Mould,MouldingStyleCode,\n" +
+					"\tStartTime,\n" +
+					"\tEndTime ,\n" +
+					"\tDATEDIFF( minute,starttime, endtime) as ChangeMouldTime\n" +
+					"FROM\n" +
+					"\t[dbo].[MouldingDisplayBoard] \n" +
+					"WHERE\n" +
+					"\tChangeMould =  1 and \tDATEDIFF( minute,starttime, endtime) > 20\n" +
+					"\torder by starttime desc \n";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("Line",rs.getString("Line"));
+				map.put("Mould",rs.getString("Mould"));
+				map.put("MouldingStyleCode",rs.getString("MouldingStyleCode"));
+				map.put("StartTime",rs.getString("StartTime"));
+				map.put("EndTime",rs.getString("EndTime"));
+				map.put("ChangeMouldTime",rs.getString("ChangeMouldTime"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+
+	public static List<HashMap<String,String>> DoGet_avg_changemouldtime_date_range(String fstarttime, String fendtime) {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT AVG\r\n" +
+					"	(\r\n" +
+					"	DATEDIFF( MINUTE, StartTime, EndTime )) AS avgchangemouldtime \r\n" +
+					"FROM\r\n" +
+					"	dbo.MouldingDisplayBoard \r\n" +
+					"WHERE\r\n" +
+					"\tChangeMould =  1 and \tDATEDIFF( minute,starttime, endtime) > 20\n" +
+					"	AND Deleted = 0 \r\n" +
+					"	AND StartTime > '" + fstarttime + "' \r\n" +
+					"	AND endtime < '" + fendtime + "'";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("avgchangemouldtime",rs.getString("avgchangemouldtime"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+
+	public static String JsonTest() {
+		StringBuilder jsonpath = new StringBuilder();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT * from [chen_12个月_A版本BOM销售额] FOR JSON PATH";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				jsonpath.append(rs.getString(1));
+
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return jsonpath.toString();
+	}
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_8053.java b/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_8053.java
new file mode 100644
index 000000000..9d01ceaa8
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_8053.java
@@ -0,0 +1,374 @@
+package com.ruoyi.db.sd_mssql;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class DB_Ajax_DashBoard_8053 {
+
+	private static String IP = "192.168.80.53";
+	private static String DBName = "ERPDATA";
+	private static String USER = "sa";
+	private static String PWD = "#080507h";
+
+	/** 创建数据库对象 */
+	private static Connection getSQLConnection() {
+		Connection con = null;
+		try {
+			Class.forName("net.sourceforge.jtds.jdbc.Driver");
+			// 加上 useunicode=true;characterEncoding=UTF-8 防止中文乱码
+			con = DriverManager.getConnection(
+					"jdbc:jtds:sqlserver://" + IP + ":1433/" + DBName + ";useunicode=true;characterEncoding=UTF-8",
+					USER, PWD);
+		} catch (ClassNotFoundException | SQLException e) {
+			e.printStackTrace();
+			System.out.println("==连接数据库失败===");
+		}
+		// System.out.println("==连接数据库成功===");
+		return con;
+	}
+
+	public static void main(String[] args) {
+
+	}
+
+
+
+	public static List<HashMap<String,String>> DoGetCurrentTimeGroup() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT * FROM [dbo].[V_chen_Dashboard_当前]  order by " +
+					"CAST (" +
+					"REPLACE( line, '#', '' ) AS INT)";
+
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+
+				HashMap<String,String> map = new HashMap<>();
+				map.put("line",rs.getString("line"));
+				map.put("Moulds",rs.getString("Moulds"));
+				map.put("Person",rs.getString("Person"));
+				map.put("NormalCapacity",rs.getString("NormalCapacity"));
+				map.put("currentspeed",rs.getString("currentspeed"));
+				map.put("FinishedQuantity",rs.getString("FinishedQuantity"));
+				map.put("GroupTime",rs.getString("GroupTime"));
+				map.put("GroupChangeMouldTime",rs.getString("GroupChangeMouldTime"));
+				map.put("CurrentYield",rs.getString("CurrentYield"));
+				map.put("CapacityStandardObtainedRate",rs.getString("CapacityStandardObtainedRate"));
+				map.put("AvgDensity",rs.getString("AvgDensity"));
+				map.put("MouldAndChangeMouldTime",rs.getString("MouldAndChangeMouldTime"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+	public static String DoGetCurrent() {
+		StringBuilder jsonpath = new StringBuilder();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"\t( SELECT MAX ( MouldingDisplayBoardOperation.OperateTime ) FROM MouldingDisplayBoardOperation WHERE MouldingDisplayBoardOperation.DisplayBoardId = V_MouldingDisplayBoard.Id ) AS LastUpdateDate,\n" +
+					"ChangeMould,\n" +
+					"\tdbo.V_MouldingDisplayBoard.Id,\n" +
+					"\tdbo.V_MouldingDisplayBoard.Line,\n" +
+					"\tdbo.V_MouldingDisplayBoard.CustomerName,\n" +
+					"\tdbo.V_MouldingDisplayBoard.NormalDensity,\n" +
+					"\tdbo.V_MouldingDisplayBoard.Length,\n" +
+					"\tdbo.V_MouldingDisplayBoard.NormalCapacity,\n" +
+					"\tdbo.V_MouldingDisplayBoard.SoCode,\n" +
+					"\tdbo.V_MouldingDisplayBoard.NormalWeight,\n" +
+					"\tdbo.V_MouldingDisplayBoard.Quantity,\n" +
+					"\tdbo.V_MouldingDisplayBoard.FactCapacity,\n" +
+					"\tdbo.V_MouldingDisplayBoard.MouldingStyleCode,\n" +
+					"\tdbo.V_MouldingDisplayBoard.CurrentFinishedQuantity\n" +
+					"\t\n" +
+					"\t,\n" +
+					"CASE\n" +
+					"\t\t\n" +
+					"\t\tWHEN ( CurrentYield IS NULL ) THEN\n" +
+					"\t\t0 ELSE CurrentYield \n" +
+					"\tEND AS CurrentYield,\n" +
+					"CASE\n" +
+					"\t\t\n" +
+					"\t\tWHEN ( CapacityStandardObtainedRate IS NULL ) THEN\n" +
+					"\t\t0 ELSE CapacityStandardObtainedRate \n" +
+					"\tEND AS CapacityStandardObtainedRate,\n" +
+					"\tdbo.V_MouldingDisplayBoard.SectionalErea,\n" +
+					"\tdbo.V_MouldingDisplayBoard.MouldYield,\n" +
+					"\tdbo.V_MouldingDisplayBoard.FinishedQuantity,\n" +
+					"\tdbo.V_MouldingDisplayBoard.TotalCapacity,\n" +
+					"\tdbo.V_MouldingDisplayBoard.ChangeMouldTime,\n" +
+					"\tdbo.V_MouldingDisplayBoard.OperatePersonCode,\n" +
+					"\tdbo.V_MouldingDisplayBoard.OperatePersonName,\n" +
+					"\tdbo.V_MouldingDisplayBoard.Speed,\n" +
+					"\tdbo.V_MouldingDisplayBoard.CurrentFinishLength \n" +
+					"FROM\n" +
+					"\tdbo.V_MouldingDisplayBoard \n" +
+					"ORDER BY\n" +
+					"\tCAST (\n" +
+					"\tREPLACE( dbo.V_MouldingDisplayBoard.Line, '#', '' ) AS INT) FOR JSON PATH";
+			Statement stmt = conn.createStatement();//
+			System.out.println(sql);
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				jsonpath.append(rs.getString(1));
+
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return jsonpath.toString();
+	}
+
+
+
+
+	public static List<HashMap<String,String>> DoGetLastDay() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT * FROM V_chen_Dashboard_当天 ORDER BY " +
+					"CAST (" +
+					"REPLACE( line, '#', '' ) AS INT)";
+
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+
+
+
+				HashMap<String,String> map = new HashMap<>();
+				map.put("line",rs.getString("line"));
+				map.put("Moulds",rs.getString("Moulds"));
+				map.put("sumbox",rs.getString("sumbox"));
+				map.put("sum_box_meter",rs.getString("sum_box_meter"));
+				map.put("sum_device_meter",rs.getString("sum_device_meter"));
+				map.put("avg_density",rs.getString("avg_density"));
+				map.put("avg_currentcapacity",rs.getString("avg_currentcapacity"));
+				map.put("avg_normalcapacity",rs.getString("avg_normalcapacity"));
+				map.put("lastchangemouldtime",rs.getString("lastchangemouldtime"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+	public static List<HashMap<String,String>> DoGet30Day() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT * FROM V_chen_Dashboard_当月 ORDER BY "+
+					" CAST (" +
+					"REPLACE( line, '#', '' ) AS INT)";
+
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+
+
+
+				HashMap<String,String> map = new HashMap<>();
+				map.put("line",rs.getString("line"));
+				map.put("Moulds",rs.getString("Moulds"));
+				map.put("sumbox",rs.getString("sumbox"));
+				map.put("sum_box_meter",rs.getString("sum_box_meter"));
+				map.put("sum_device_meter",rs.getString("sum_device_meter"));
+				map.put("avg_density",rs.getString("avg_density"));
+				map.put("avg_currentcapacity",rs.getString("avg_currentcapacity"));
+				map.put("avg_normalcapacity",rs.getString("avg_normalcapacity"));
+				map.put("lastchangemouldtime",rs.getString("lastchangemouldtime"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+	public static List<HashMap<String,String>> DoGetDateRange(String fstarttime, String fendtime) {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "DECLARE @FStartTime DATETIME\r\n" +
+					"DECLARE @FEndTime DATETIME\r\n" +
+					"\r\n" +
+					"set  @FStartTime='" + fstarttime + "'\r\n" +
+					"set  @FEndTime='" + fendtime + "'\r\n" +
+					"\r\n" +
+					"\r\n" +
+					"\r\n" +
+					"\r\n" +
+					"SELECT\r\n" +
+					"	db1.line,\r\n" +
+					"	AVG ( avg_density ) AS avg_density,\r\n" +
+					"	SUM ( sumbox ) AS sumbox,\r\n" +
+					"	MAX ( db2.sum1 ) AS sum_box_meter,\r\n" +
+					"	MAX ( db2.sum0 ) AS sum_device_meter,\r\n" +
+					"	dbo.chen_cal_line_time_mould ( MIN ( db1.StartTime ), MAX ( db1.EndTime ), db1.Line ) AS Moulds,\r\n" +
+					"	SUM (	currentcap * ( boxmeter / db2.sum1 )) AS avg_currentcapacity,\r\n" +
+					"	SUM (	db1.NormalCapacity* ( boxmeter / db2.sum1 )) AS avg_normalcapacity,\r\n" +
+					"	SUM ( boxmeter / db2.sum1 ) AS 校验字段 ,\r\n" +
+					"	avg(db4.ChangeMouldTime) as lastchangemouldtime\r\n" +
+					"FROM \r\n" +
+					"	(SELECT\r\n" +
+					"	dbo.chen_cal_line_difftime( db3.StartTime, db3.EndTime, db3.line, db3.EndTime) as difftime,\r\n" +
+					"	db3.Quantity as Quantity,\r\n" +
+					"	db3.StartTime as StartTime,\r\n" +
+					"	db3.EndTime as EndTime,\r\n" +
+					"	db3.line as line,\r\n" +
+					"  db3.Length as Length ,\r\n" +
+					"	db3.NumberOfEveryKit as NumberOfEveryKit,\r\n" +
+					"	db3.MouldingStyleCode as MouldingStyleCode,\r\n" +
+					"	db3.SoCode as SoCode,\r\n" +
+					"	dbo.chen_cal_line_time_mould ( db3.StartTime, db3.EndTime, Line ) AS Moulds,\r\n" +
+					"	dbo.chen_cal_line_time_density ( db3.StartTime, db3.EndTime, Line ) AS avg_density,\r\n" +
+					"	\r\n" +
+					"	dbo.chen_cal_line_meter ( db3.StartTime, db3.EndTime, Line, @FEndTime ) / dbo.chen_cal_line_difftime( db3.StartTime, db3.EndTime, db3.line, db3.EndTime) * 60 * 60 * 12 AS currentcap,\r\n" +
+					"	NormalCapacity,\r\n" +
+					"	db3.sumbox AS sumbox,\r\n" +
+					"	dbo.chen_cal_line_meter ( db3.StartTime, db3.EndTime, Line, @FEndTime ) AS meter,\r\n" +
+					"	(db3.Length * db3.NumberOfEveryKit * db3.sumbox) AS boxmeter\r\n" +
+					"	\r\n" +
+					"FROM\r\n" +
+					"	(\r\n" +
+					"	SELECT\r\n" +
+					"		db2.id,\r\n" +
+					"		db2.line,\r\n" +
+					"		SUM ( db1.Quantity ) AS sumbox,\r\n" +
+					"		MIN ( db1.OperateTime ) AS minop,\r\n" +
+					"		MAX ( db1.OperateTime ) AS maxop,\r\n" +
+					"		MAX (db2.Quantity) as Quantity,		\r\n" +
+					"		MAX (db2.Length) as Length,\r\n" +
+					"		MAX (db2.NumberOfEveryKit) as NumberOfEveryKit,\r\n" +
+					"		MAX (db2.MouldingStyleCode) as MouldingStyleCode,\r\n" +
+					"		MAX (db2.SoCode) as SoCode,		MAX (db2.NormalCapacity) as NormalCapacity,\r\n" +
+					"	( CASE WHEN MIN ( db2.StartTime ) < @FStartTime THEN @FStartTime ELSE MIN ( db2.StartTime ) END ) AS StartTime,\r\n" +
+					"	( CASE WHEN MIN ( db2.EndTime ) IS  NULL THEN (dbo.chen_cal_line_op_lasttime(MIN ( db2.EndTime ),db2.line,@FEndTime)) ELSE ( CASE WHEN MIN ( db2.EndTime ) > @FEndTime THEN @FEndTime ELSE MIN ( db2.EndTime ) END ) END ) AS EndTime	FROM\r\n" +
+					"		[dbo].[MouldingDisplayBoardOperation] AS db1\r\n" +
+					"		INNER JOIN MouldingDisplayBoard AS db2 ON db2.id = db1.DisplayBoardId \r\n" +
+					"	WHERE\r\n" +
+					"		db1.OperateTime >= @FStartTime \r\n" +
+					"		AND db1.OperateTime <= @FEndTime \r\n" +
+					"	GROUP BY\r\n" +
+					"		db2.id,\r\n" +
+					"	db2.line \r\n" +
+					"	) AS db3) AS db1\r\n" +
+					"	INNER JOIN ( SELECT line, SUM ( meter ) AS sum0, SUM ( boxmeter ) AS sum1 FROM (SELECT\r\n" +
+					"	dbo.chen_cal_line_difftime( db3.StartTime, db3.EndTime, db3.line, db3.EndTime) as difftime,\r\n" +
+					"	db3.Quantity as Quantity,\r\n" +
+					"	db3.StartTime as StartTime,\r\n" +
+					"	db3.EndTime as EndTime,\r\n" +
+					"	db3.line as line,\r\n" +
+					"  db3.Length as Length ,\r\n" +
+					"	db3.NumberOfEveryKit as NumberOfEveryKit,\r\n" +
+					"	db3.MouldingStyleCode as MouldingStyleCode,\r\n" +
+					"	db3.SoCode as SoCode,\r\n" +
+					"	dbo.chen_cal_line_time_mould ( db3.StartTime, db3.EndTime, Line ) AS Moulds,\r\n" +
+					"	dbo.chen_cal_line_time_density ( db3.StartTime, db3.EndTime, Line ) AS avg_density,\r\n" +
+					"	\r\n" +
+					"	dbo.chen_cal_line_meter ( db3.StartTime, db3.EndTime, Line, @FEndTime ) / dbo.chen_cal_line_difftime( db3.StartTime, db3.EndTime, db3.line, db3.EndTime) * 60 * 60 * 12 AS currentcap,\r\n" +
+					"	NormalCapacity,\r\n" +
+					"	db3.sumbox AS sumbox,\r\n" +
+					"	dbo.chen_cal_line_meter ( db3.StartTime, db3.EndTime, Line, @FEndTime ) AS meter,\r\n" +
+					"	(db3.Length * db3.NumberOfEveryKit * db3.sumbox) AS boxmeter\r\n" +
+					"	\r\n" +
+					"FROM\r\n" +
+					"	(\r\n" +
+					"	SELECT\r\n" +
+					"		db2.id,\r\n" +
+					"		db2.line,\r\n" +
+					"		SUM ( db1.Quantity ) AS sumbox,\r\n" +
+					"		MIN ( db1.OperateTime ) AS minop,\r\n" +
+					"		MAX ( db1.OperateTime ) AS maxop,\r\n" +
+					"		MAX (db2.Quantity) as Quantity,		\r\n" +
+					"		MAX (db2.Length) as Length,\r\n" +
+					"		MAX (db2.NumberOfEveryKit) as NumberOfEveryKit,\r\n" +
+					"		MAX (db2.MouldingStyleCode) as MouldingStyleCode,\r\n" +
+					"		MAX (db2.SoCode) as SoCode,		MAX (db2.NormalCapacity) as NormalCapacity,\r\n" +
+					"	( CASE WHEN MIN ( db2.StartTime ) < @FStartTime THEN @FStartTime ELSE MIN ( db2.StartTime ) END ) AS StartTime,\r\n" +
+					"	( CASE WHEN MIN ( db2.EndTime ) IS  NULL THEN (dbo.chen_cal_line_op_lasttime(MIN ( db2.EndTime ),db2.line,@FEndTime)) ELSE ( CASE WHEN MIN ( db2.EndTime ) > @FEndTime THEN @FEndTime ELSE MIN ( db2.EndTime ) END ) END ) AS EndTime	FROM\r\n" +
+					"		[dbo].[MouldingDisplayBoardOperation] AS db1\r\n" +
+					"		INNER JOIN MouldingDisplayBoard AS db2 ON db2.id = db1.DisplayBoardId \r\n" +
+					"	WHERE\r\n" +
+					"		db1.OperateTime >= @FStartTime \r\n" +
+					"		AND db1.OperateTime <= @FEndTime \r\n" +
+					"	GROUP BY\r\n" +
+					"		db2.id,\r\n" +
+					"	db2.line \r\n" +
+					"	) AS db3) AS db3 GROUP BY line ) AS db2 ON db2.line = db1.line\r\n" +
+					"	LEFT JOIN (SELECT Line,id,DATEDIFF(MINUTE,StartTime,EndTime) as ChangeMouldTime FROM MouldingDisplayBoard WHERE id IN (SELECT MAX (id) AS id FROM MouldingDisplayBoard WHERE ChangeMould=1 GROUP BY Line)) as db4 on db4.line = db1.line\r\n" +
+					"\r\n" +
+					"GROUP BY" +
+					"	db1.line " +
+					"ORDER BY " +
+					"CAST (" +
+					" REPLACE( db1.line, '#', '' ) AS INT)";
+			Statement stmt = conn.createStatement();//
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+
+
+
+				HashMap<String,String> map = new HashMap<>();
+				map.put("line",rs.getString("line"));
+				map.put("Moulds",rs.getString("Moulds"));
+				map.put("sumbox",rs.getString("sumbox"));
+				map.put("sum_box_meter",rs.getString("sum_box_meter"));
+				map.put("sum_device_meter",rs.getString("sum_device_meter"));
+				map.put("avg_density",rs.getString("avg_density"));
+				map.put("avg_currentcapacity",rs.getString("avg_currentcapacity"));
+				map.put("avg_normalcapacity",rs.getString("avg_normalcapacity"));
+				map.put("lastchangemouldtime",rs.getString("lastchangemouldtime"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_ChangeMouldTime_8053.java b/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_ChangeMouldTime_8053.java
new file mode 100644
index 000000000..95bd764d6
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_ChangeMouldTime_8053.java
@@ -0,0 +1,201 @@
+package com.ruoyi.db.sd_mssql;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class DB_Ajax_DashBoard_ChangeMouldTime_8053 {
+
+	private static String IP = "192.168.80.53";
+	private static String DBName = "ERPDATA";
+	private static String USER = "sa";
+	private static String PWD = "#080507h";
+
+	/** 创建数据库对象 */
+	private static Connection getSQLConnection() {
+		Connection con = null;
+		try {
+			Class.forName("net.sourceforge.jtds.jdbc.Driver");
+			// 加上 useunicode=true;characterEncoding=UTF-8 防止中文乱码
+			con = DriverManager.getConnection(
+					"jdbc:jtds:sqlserver://" + IP + ":1433/" + DBName + ";useunicode=true;characterEncoding=UTF-8",
+					USER, PWD);
+		} catch (ClassNotFoundException | SQLException e) {
+			e.printStackTrace();
+			System.out.println("==连接数据库失败===");
+		}
+		// System.out.println("==连接数据库成功===");
+		return con;
+	}
+
+	public static void main(String[] args) {
+
+	}
+
+
+
+	public static List<HashMap<String,String>> DoGetChangeMouldTimeList() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"\tLine,\n" +
+					"\tLEFT ( MouldingStyleCode, charindex( '-', MouldingStyleCode ) - 1 ) as Mould,MouldingStyleCode,\n" +
+					"\tStartTime,\n" +
+					"\tEndTime ,\n" +
+					"\tDATEDIFF( minute,starttime, endtime) as ChangeMouldTime\n" +
+					"FROM\n" +
+					"\t[dbo].[MouldingDisplayBoard] \n" +
+					"WHERE\n" +
+					"\tChangeMould =  1 and \tDATEDIFF( minute,starttime, endtime) > 20\n" +
+					"\torder by starttime desc \n";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("Line",rs.getString("Line"));
+				map.put("Mould",rs.getString("Mould"));
+				map.put("MouldingStyleCode",rs.getString("MouldingStyleCode"));
+				map.put("StartTime",rs.getString("StartTime"));
+				map.put("EndTime",rs.getString("EndTime"));
+				map.put("ChangeMouldTime",rs.getString("ChangeMouldTime"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+	public static List<HashMap<String,String>> DoGetChangeMouldTimeListDateRange(String fstarttime, String fendtime) {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"\tLine,\n" +
+					"\tLEFT ( MouldingStyleCode, charindex( '-', MouldingStyleCode ) - 1 ) AS Mould,\n" +
+					"\tMouldingStyleCode,\n" +
+					"\tStartTime,\n" +
+					"\tEndTime,\n" +
+					"\tDATEDIFF( MINUTE, starttime, endtime ) AS ChangeMouldTime \n" +
+					"FROM\n" +
+					"\t[dbo].[MouldingDisplayBoard] \n" +
+					"WHERE\n" +
+					"\tChangeMould = 1 \n" +
+					"\tAND DATEDIFF( MINUTE, starttime, endtime ) > 20 \n" +
+					"\tAND endtime >= '"+fstarttime+"' \n" +
+					"\tAND endtime <= '"+fendtime+"' \n" +
+					"ORDER BY\n" +
+					"\tstarttime DESC";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("Line",rs.getString("Line"));
+				map.put("Mould",rs.getString("Mould"));
+				map.put("MouldingStyleCode",rs.getString("MouldingStyleCode"));
+				map.put("StartTime",rs.getString("StartTime"));
+				map.put("EndTime",rs.getString("EndTime"));
+				map.put("ChangeMouldTime",rs.getString("ChangeMouldTime"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+
+	public static List<HashMap<String,String>> DoGet_avg_changemouldtime_date_range(String fstarttime, String fendtime) {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT AVG\n" +
+					"\t(\n" +
+					"\tDATEDIFF( MINUTE, StartTime, EndTime )) AS avgchangemouldtime , count\n" +
+					"\t(\n" +
+					"\tDATEDIFF( MINUTE, StartTime, EndTime )) AS num \n" +
+					"FROM\n" +
+					"\tdbo.MouldingDisplayBoard \n" +
+					"WHERE\n" +
+					"\tChangeMould = 1 \n" +
+					"\tAND DATEDIFF( MINUTE, starttime, endtime ) > 20 \n" +
+					"\tAND Deleted = 0 " +
+					"	AND StartTime > '" + fstarttime + "' \r\n" +
+					"	AND endtime < '" + fendtime + "'";
+			Statement stmt = conn.createStatement();//
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("avgchangemouldtime",rs.getString("avgchangemouldtime"));
+				map.put("num",rs.getString("num"));
+
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+
+	public static List<HashMap<String,String>> DoGetGroupDensityListMap() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\r\n" +
+					"	line AS line,\r\n" +
+					"	AVG ( Density ) AS density \r\n" +
+					"FROM\r\n" +
+					"	[dbo].[MouldingRealTimeDensity] \r\n" +
+					"WHERE\r\n" +
+					"	CreatedOn > dbo.GetWorkShiftStartDate ( GETDATE( ) ) \r\n" +
+					"GROUP BY\r\n" +
+					"	line \r\n" +
+					"ORDER BY\r\n" +
+					"	convert(int,REPLACE( line, '#', '' ) )";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("density",rs.getString("density"));
+				map.put("time",rs.getString("line"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_Density_8053.java b/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_Density_8053.java
new file mode 100644
index 000000000..e40956755
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_Density_8053.java
@@ -0,0 +1,284 @@
+package com.ruoyi.db.sd_mssql;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class DB_Ajax_DashBoard_Density_8053 {
+
+	private static String IP = "192.168.80.53";
+	private static String DBName = "ERPDATA";
+	private static String USER = "sa";
+	private static String PWD = "#080507h";
+
+	/** 创建数据库对象 */
+	private static Connection getSQLConnection() {
+		Connection con = null;
+		try {
+			Class.forName("net.sourceforge.jtds.jdbc.Driver");
+			// 加上 useunicode=true;characterEncoding=UTF-8 防止中文乱码
+			con = DriverManager.getConnection(
+					"jdbc:jtds:sqlserver://" + IP + ":1433/" + DBName + ";useunicode=true;characterEncoding=UTF-8",
+					USER, PWD);
+		} catch (ClassNotFoundException | SQLException e) {
+			e.printStackTrace();
+			System.out.println("==连接数据库失败===");
+		}
+		// System.out.println("==连接数据库成功===");
+		return con;
+	}
+
+	public static void main(String[] args) {
+
+	}
+
+	public static List<String> DoGet72hdensity() {
+		List<String> list = new ArrayList<String>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\r\n" +
+					"	ProductDate+TIME as time,\r\n" +
+					"	AVG ( Density )  as density\r\n" +
+					"FROM\r\n" +
+					"	[dbo].[MouldingRealTimeDensity] \r\n" +
+					"WHERE\r\n" +
+					"	CreatedOn > GETDATE( ) - 3\r\n" +
+					"GROUP BY\r\n" +
+					"	ProductDate,\r\n" +
+					"TIME  ORDER BY MAX(CreatedOn)";
+			Statement stmt = conn.createStatement();//
+//			System.out.println(sql);
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				list.add("{time:\"" + rs.getString("time") + "\",density:\"" + rs.getString("density")
+						+ "\"}");
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return list;
+	}
+	public static List<String> DoGetgroupdensity() {
+		List<String> list = new ArrayList<String>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\r\n" +
+					"	line AS line,\r\n" +
+					"	AVG ( Density ) AS density \r\n" +
+					"FROM\r\n" +
+					"	[dbo].[MouldingRealTimeDensity] \r\n" +
+					"WHERE\r\n" +
+					"	CreatedOn > dbo.GetWorkShiftStartDate ( GETDATE( ) ) \r\n" +
+					"GROUP BY\r\n" +
+					"	line \r\n" +
+					"ORDER BY\r\n" +
+					"	convert(int,REPLACE( line, '#', '' ) )";
+			Statement stmt = conn.createStatement();//
+//			System.out.println(sql);
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				list.add("{line:\"" + rs.getString("line") + "\",density:\"" + rs.getString("density")
+						+ "\"}");
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return list;
+	}
+	public static List<String> DoGet30ddensity() {
+		List<String> list = new ArrayList<String>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\r\n" +
+					"	ProductDate as time,\r\n" +
+					"	AVG ( Density )  as density\r\n" +
+					"FROM\r\n" +
+					"	[dbo].[MouldingRealTimeDensity] \r\n" +
+					"WHERE\r\n" +
+					"	CreatedOn > GETDATE( ) - 30\r\n" +
+					"GROUP BY\r\n" +
+					"	ProductDate  ORDER BY MAX(CreatedOn)";
+			Statement stmt = conn.createStatement();//
+//			System.out.println(sql);
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				list.add("{time:\"" + rs.getString("time") + "\",density:\"" + rs.getString("density")
+						+ "\"}");
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return list;
+	}
+
+
+	public static List<HashMap<String,String>> DoGet30dDensityListMap() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\r\n" +
+					"	ProductDate as time,\r\n" +
+					"	AVG ( Density )  as density\r\n" +
+					"FROM\r\n" +
+					"	[dbo].[MouldingRealTimeDensity] \r\n" +
+					"WHERE\r\n" +
+					"	CreatedOn > GETDATE( ) - 30\r\n" +
+					"GROUP BY\r\n" +
+					"	ProductDate  ORDER BY MAX(CreatedOn)";
+			Statement stmt = conn.createStatement();//
+//			System.out.println(sql);
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("density",rs.getString("density"));
+				map.put("time",rs.getString("time"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+
+	public static List<HashMap<String,String>> DoGet72hDensityListMap() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\r\n" +
+					"	ProductDate+TIME as time,\r\n" +
+					"	AVG ( Density )  as density\r\n" +
+					"FROM\r\n" +
+					"	[dbo].[MouldingRealTimeDensity] \r\n" +
+					"WHERE\r\n" +
+					"	CreatedOn > GETDATE( ) - 3\r\n" +
+					"GROUP BY\r\n" +
+					"	ProductDate,\r\n" +
+					"TIME  ORDER BY MAX(CreatedOn)";
+			Statement stmt = conn.createStatement();//
+//			System.out.println(sql);
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("density",rs.getString("density"));
+				map.put("time",rs.getString("time"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+
+	public static List<HashMap<String,String>> DoGetGroupDensityListMap() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\r\n" +
+					"	line AS line,\r\n" +
+					"	AVG ( Density ) AS density \r\n" +
+					"FROM\r\n" +
+					"	[dbo].[MouldingRealTimeDensity] \r\n" +
+					"WHERE\r\n" +
+					"	CreatedOn > dbo.GetWorkShiftStartDate ( GETDATE( ) ) \r\n" +
+					"GROUP BY\r\n" +
+					"	line \r\n" +
+					"ORDER BY\r\n" +
+					"	convert(int,REPLACE( line, '#', '' ) )";
+			Statement stmt = conn.createStatement();//
+//			System.out.println(sql);
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("density",rs.getString("density"));
+				map.put("time",rs.getString("line"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+	public static List<HashMap<String,String>> getDensityDataRange(String fDateStart, String fDateEnd) {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"\tProductDate AS TIME,\n" +
+					"\tAVG ( Density ) AS density \n" +
+					"FROM\n" +
+					"\t[dbo].[MouldingRealTimeDensity] \n" +
+					"WHERE\n" +
+					"\tCreatedOn >= '"+fDateStart+"' and CreatedOn <= '"+fDateEnd+"'" +
+					"GROUP BY\n" +
+					"\tProductDate \n" +
+					"ORDER BY\n" +
+					"\tMAX ( CreatedOn );";
+			Statement stmt = conn.createStatement();//
+//			System.out.println(sql);
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("density",rs.getString("density"));
+				map.put("time",rs.getString("time"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_Technologist_8053.java b/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_Technologist_8053.java
new file mode 100644
index 000000000..df41982ac
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/db/sd_mssql/DB_Ajax_DashBoard_Technologist_8053.java
@@ -0,0 +1,556 @@
+package com.ruoyi.db.sd_mssql;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class DB_Ajax_DashBoard_Technologist_8053 {
+
+	private static String IP = "192.168.80.53";
+	private static String DBName = "ERPDATA";
+	private static String USER = "sa";
+	private static String PWD = "#080507h";
+
+	/** 创建数据库对象 */
+	private static Connection getSQLConnection() {
+		Connection con = null;
+		try {
+			Class.forName("net.sourceforge.jtds.jdbc.Driver");
+			// 加上 useunicode=true;characterEncoding=UTF-8 防止中文乱码
+			con = DriverManager.getConnection(
+					"jdbc:jtds:sqlserver://" + IP + ":1433/" + DBName + ";useunicode=true;characterEncoding=UTF-8",
+					USER, PWD);
+		} catch (ClassNotFoundException | SQLException e) {
+			e.printStackTrace();
+			System.out.println("==连接数据库失败===");
+		}
+		// System.out.println("==连接数据库成功===");
+		return con;
+	}
+
+	public static void main(String[] args) {
+
+	}
+
+
+
+	public static List<HashMap<String,String>> DoGetSampleConfirmation() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"\t内外销,\n" +
+					"\tSUM ( CASE WHEN 客户是否下单 = '是' THEN 1 ELSE 0 END ) AS 下单数,\n" +
+					"\tCOUNT (内外销) AS 打样数 \n" +
+					"FROM\n" +
+					"\t[dbo].[chen_打样分析汇总] \n" +
+					"GROUP BY\n" +
+					"\t内外销;";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("NWX",rs.getString("内外销"));
+				map.put("ConfirmationNum",rs.getString("下单数"));
+				map.put("SampleNum",rs.getString("打样数"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+	public static List<HashMap<String,String>> DoGetBestOEM() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT TOP\n" +
+					"\t20 MouldingStyleCode,\n" +
+					"\t[折算人民币价税合计] AS CNY \n" +
+					"FROM\n" +
+					"\t[chen_12个月_A版本BOM销售额] \n" +
+					"WHERE\n" +
+					"\ttagname = 'OEM' \n" +
+					"ORDER BY\n" +
+					"\t折算人民币价税合计 DESC";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("MouldingStyleCode",rs.getString("MouldingStyleCode"));
+				map.put("CNY",rs.getString("CNY"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+	public static List<HashMap<String,String>> DoGetBestODM() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT TOP\n" +
+					"\t20 MouldingStyleCode,\n" +
+					"\t[折算人民币价税合计] AS CNY \n" +
+					"FROM\n" +
+					"\t[chen_12个月_A版本BOM销售额] \n" +
+					"WHERE\n" +
+					"\ttagname = 'ODM' \n" +
+					"ORDER BY\n" +
+					"\t折算人民币价税合计 DESC";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("MouldingStyleCode",rs.getString("MouldingStyleCode"));
+				map.put("CNY",rs.getString("CNY"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+	/**
+	 * 已完成订单交期
+	 *	根据工艺员共计数量
+	 */
+	public static List<HashMap<String,String>> DoFinishedSampleAvgDay() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"\tTechnologist,\n" +
+					"\tCOUNT(id) as num,\n" +
+					"\tAVG (\n" +
+					"\tCAST ( [分解天数] AS FLOAT )) AS avg_f,\n" +
+					"\tAVG ( CAST ( [交期天数] AS FLOAT ) ) AS avg_j \n" +
+					"FROM\n" +
+					"\t[dbo].[chen_打样分析汇总] \n" +
+					"WHERE\n" +
+					"\tStatus = 3 \n" +
+					"GROUP BY\n" +
+					"\tTechnologist";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("Technologist",rs.getString("Technologist"));
+				map.put("avg_f",rs.getString("avg_f"));
+				map.put("num",rs.getString("num"));
+				map.put("avg_j",rs.getString("avg_j"));
+
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+	/**
+	 * 未完成打样交期
+	 *	根据工艺员共计数量
+	 */
+	public static List<HashMap<String,String>> DoUnFinishedSampleAvgDay() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"\tTechnologist,\n" +
+					"\tCOUNT ( id ) AS num,\n" +
+					"\tSUM ( CASE WHEN use_date >= 15 THEN 1 ELSE 0 END )  as day15num,\n" +
+					"\tAVG(use_date) as avg_use_date\n" +
+					"\tFROM\n" +
+					"\t\t( SELECT Technologist, id, DATEDIFF( DAY, [经理审核时间], GETDATE()) AS use_date FROM [dbo].[chen_打样分析汇总] WHERE ( Status = 2 OR Status = 1 ) AND [经理审核时间] IS NOT NULL ) AS db0 \n" +
+					"GROUP BY\n" +
+					"\tTechnologist";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("Technologist",rs.getString("Technologist"));
+				map.put("day15num",rs.getString("day15num"));
+				map.put("num",rs.getString("num"));
+				map.put("avg_use_date",rs.getString("avg_use_date"));
+
+
+
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+	/**
+	 * 新增订单
+	 *
+	 */
+	public static List<HashMap<String,String>> DayFinishedSampleOrder() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"dbo.[chen_打样分析汇总].Technologist,\n" +
+					"dbo.[chen_打样分析汇总].SalesMan,\n" +
+					"dbo.[chen_打样分析汇总].MouldingStyleCode,\n" +
+					"dbo.[chen_打样分析汇总].[折算人民币价税合计] as CNY\n" +
+					"\n" +
+					"FROM\n" +
+					"dbo.[chen_打样分析汇总]\n" +
+					"WHERE\n" +
+					"dbo.[chen_打样分析汇总].CreatedOn >= dbo.GetWorkShiftStartDate ( GETDATE( ) - 1 ) AND\n" +
+					"dbo.[chen_打样分析汇总].CreatedOn <= dbo.GetWorkShiftStartDate ( GETDATE( ) )\n";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("Technologist",rs.getString("Technologist"));
+				map.put("SalesMan",rs.getString("SalesMan"));
+				map.put("MouldingStyleCode",rs.getString("MouldingStyleCode"));
+				map.put("CNY",rs.getString("CNY"));
+
+
+
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+	/**
+	 * 新开模
+	 *
+	 */
+	public static List<HashMap<String,String>> DayNewMould() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"dbo.MouldManufacture.MouldCode,\n" +
+					"CASE dbo.MouldManufacture.ManufactureType\n" +
+					"\tWHEN 1 THEN N'新开模'\n" +
+					"\tELSE N'修模'\n" +
+					"END as new_or_fix\n" +
+					",\n" +
+					"BD_User.UserName\n" +
+					"FROM\n" +
+					"dbo.MouldManufacture\n" +
+					"INNER JOIN BD_User on dbo.MouldManufacture.CreatedBy = BD_User.UserId\n" +
+					"WHERE\n" +
+					"dbo.MouldManufacture.CreatedOn >= dbo.GetWorkShiftStartDate ( GETDATE( ) - 1 ) AND\n" +
+					"dbo.MouldManufacture.CreatedOn <= dbo.GetWorkShiftStartDate ( GETDATE( ) ) AND\n" +
+					"dbo.MouldManufacture.Status <> -1\n";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("UserName",rs.getString("UserName"));
+				map.put("new_or_fix",rs.getString("new_or_fix"));
+				map.put("MouldCode",rs.getString("MouldCode"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+	/**
+	 * 打样完成
+	 *
+	 */
+	public static List<HashMap<String,String>> DayFinishedSample() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"\tdbo.[chen_打样分析汇总].MouldingStyleCode,\n" +
+					"\tdbo.[chen_打样分析汇总].Technologist,\n" +
+					"\tdbo.[chen_打样分析汇总].FinishedDensity,\n" +
+					"\tdbo.[chen_打样分析汇总].FinishedSpeed,\n" +
+					"\tdbo.[chen_打样分析汇总].FinishedBy,\n" +
+					"\tdbo.[chen_打样分析汇总].[交期天数] as UseDay\n" +
+					"FROM\n" +
+					"\tdbo.[chen_打样分析汇总] \n" +
+					"WHERE\n" +
+					"\tdbo.[chen_打样分析汇总].FinishedOn >= dbo.GetWorkShiftStartDate ( GETDATE( ) - 1 ) \n" +
+					"\tAND dbo.[chen_打样分析汇总].FinishedOn <= dbo.GetWorkShiftStartDate ( GETDATE( ) )";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("MouldingStyleCode",rs.getString("MouldingStyleCode"));
+				map.put("Technologist",rs.getString("Technologist"));
+				map.put("FinishedDensity",rs.getString("FinishedDensity"));
+				map.put("FinishedSpeed",rs.getString("FinishedSpeed"));
+				map.put("FinishedBy",rs.getString("FinishedBy"));
+				map.put("UseDay",rs.getString("UseDay"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+	/**
+	 * BOM完成
+	 *
+	 */
+	public static List<HashMap<String,String>> DayFinishedBOM() {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT\n" +
+					"dbo.MouldingTechnicalForm.MouldingStyleCode,\n" +
+					"dbo.MouldingTechnicalForm.Maker\n" +
+					"\n" +
+					"FROM\n" +
+					"dbo.MouldingTechnicalForm\n" +
+					"WHERE\n" +
+					"dbo.MouldingTechnicalForm.ModifiedOn >= dbo.GetWorkShiftStartDate ( GETDATE( ) - 1 ) AND\n" +
+					"dbo.MouldingTechnicalForm.ModifiedOn <= dbo.GetWorkShiftStartDate ( GETDATE( ) )";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("MouldingStyleCode",rs.getString("MouldingStyleCode"));
+				map.put("Maker",rs.getString("Maker"));
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+	public static String All() {
+		StringBuilder jsonpath = new StringBuilder();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT * from [chen_打样分析汇总] order by CreatedOn desc FOR JSON PATH";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				jsonpath.append(rs.getString(1));
+
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return jsonpath.toString();
+	}
+
+
+	public static String AllDataDataRange(String fDateStart,String fDateEnd) {
+		StringBuilder jsonpath = new StringBuilder();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT * from [chen_打样分析汇总] where CreatedOn >= '"+fDateStart+"' and CreatedOn <= '"+fDateEnd+"' order by CreatedOn desc FOR JSON PATH";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				jsonpath.append(rs.getString(1));
+
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return jsonpath.toString();
+	}
+
+
+
+//除了 画框 婚纱框 相框 镜框
+
+	public static List<HashMap<String,String>> getBestByProductionLine(String ProductionLine) {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT DISTINCT TOP\n" +
+					"\t20 chen_12个月_A版本BOM销售额.MouldingStyleCode,\n" +
+					"\tchen_12个月_A版本BOM销售额.[折算人民币价税合计] AS CNY,\n" +
+					"\tchen_打样分析汇总.[客户数量] as CustomerNum,\n" +
+					"\tMouldingSampleMakingMasterSchedule.ProductionLine ,\n" +
+					"\t( SELECT TOP 1 SHCountry FROM MouldingDataStatistics WHERE MouldingCode = reverse( SUBSTRING ( reverse( chen_12个月_A版本BOM销售额.MouldingStyleCode ), charindex( '-', reverse( chen_12个月_A版本BOM销售额.MouldingStyleCode ) ) + 1, 500 ) )  and SHCountry is not null GROUP BY SHCountry ORDER BY SUM ( SHMouldingSaleLength ) DESC ) AS Area \n" +
+					"FROM\n" +
+					"\t[chen_12个月_A版本BOM销售额]\n" +
+					"\tLEFT JOIN MouldingSampleMakingMasterSchedule ON MouldingSampleMakingMasterSchedule.MouldingStyleCode = chen_12个月_A版本BOM销售额.MouldingStyleCode\n" +
+					"\tINNER JOIN [chen_打样分析汇总] ON chen_打样分析汇总.MouldingStyleCode = chen_12个月_A版本BOM销售额.MouldingStyleCode \n" +
+					"WHERE\n" +
+					"\tMouldingSampleMakingMasterSchedule.ProductionLine = '"+ProductionLine+"' \n" +
+					"ORDER BY\n" +
+					"\tchen_12个月_A版本BOM销售额.折算人民币价税合计 DESC";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("MouldingStyleCode",rs.getString("MouldingStyleCode"));
+				map.put("CNY",rs.getString("CNY"));
+				map.put("Area",rs.getString("Area"));
+				map.put("CustomerNum",rs.getString("CustomerNum"));
+
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+
+//除了 画框 婚纱框 相框 镜框
+
+	public static List<HashMap<String,String>> getBestByProductionLine_Jiancai( ) {
+		List<HashMap<String,String>> hashMapList = new ArrayList<>();
+		try {
+			Connection conn = getSQLConnection();
+			String sql = "SELECT DISTINCT TOP\n" +
+					"\t20 chen_12个月_A版本BOM销售额.MouldingStyleCode,\n" +
+					"\tchen_12个月_A版本BOM销售额.[折算人民币价税合计] AS CNY,\tchen_打样分析汇总.[客户数量]  as CustomerNum,\n" +
+					"\tMouldingSampleMakingMasterSchedule.ProductionLine ,\n" +
+					"\n" +
+					"\t(SELECT TOP\n" +
+					"\t1 SHCountry \n" +
+					"FROM\n" +
+					"\tMouldingDataStatistics \n" +
+					"WHERE MouldingCode = reverse(substring(reverse(chen_12个月_A版本BOM销售额.MouldingStyleCode),charindex('-',reverse(chen_12个月_A版本BOM销售额.MouldingStyleCode)) +1,500))  and SHCountry is not null\n" +
+					"GROUP BY SHCountry\n" +
+					"ORDER BY sum(SHMouldingSaleLength) desc ) as Area\n" +
+					"FROM\n" +
+					"\t[chen_12个月_A版本BOM销售额]\n" +
+					"\tLEFT JOIN MouldingSampleMakingMasterSchedule ON MouldingSampleMakingMasterSchedule.MouldingStyleCode = chen_12个月_A版本BOM销售额.MouldingStyleCode \n" +
+					"\tINNER JOIN [chen_打样分析汇总] on  chen_打样分析汇总.MouldingStyleCode = chen_12个月_A版本BOM销售额.MouldingStyleCode\n" +
+					"\n" +
+					"WHERE\n" +
+					"\tSUBSTRING(chen_12个月_A版本BOM销售额.MouldingStyleCode,1,1) = 'J'\n" +
+					"\n" +
+					"ORDER BY\n" +
+					"\tchen_12个月_A版本BOM销售额.折算人民币价税合计 DESC";
+			Statement stmt = conn.createStatement();//
+
+			ResultSet rs = stmt.executeQuery(sql);
+			while (rs.next()) {
+				// 截面积(mm2)
+				HashMap<String,String> map = new HashMap<>();
+				map.put("MouldingStyleCode",rs.getString("MouldingStyleCode"));
+				map.put("CNY",rs.getString("CNY"));
+				map.put("Area",rs.getString("Area"));
+				map.put("CustomerNum",rs.getString("CustomerNum"));
+
+				hashMapList.add(map);
+
+			}
+			rs.close();
+			stmt.close();
+			conn.close();
+		} catch (SQLException e) {
+			e.printStackTrace();
+
+		}
+		return hashMapList;
+	}
+
+
+
+
+
+}
+
diff --git a/ruoyi/src/main/java/com/ruoyi/project/sd_changemouldtime/banner.txt b/ruoyi/src/main/java/com/ruoyi/project/sd_changemouldtime/banner.txt
new file mode 100644
index 000000000..94662592f
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/sd_changemouldtime/banner.txt
@@ -0,0 +1,24 @@
+Application Version: ${ruoyi.version}
+Spring Boot Version: ${spring-boot.version}
+////////////////////////////////////////////////////////////////////
+//                          _ooOoo_                               //
+//                         o8888888o                              //
+//                         88" . "88                              //
+//                         (| ^_^ |)                              //
+//                         O\  =  /O                              //
+//                      ____/`---'\____                           //
+//                    .'  \\|     |//  `.                         //
+//                   /  \\|||  :  |||//  \                        //
+//                  /  _||||| -:- |||||-  \                       //
+//                  |   | \\\  -  /// |   |                       //
+//                  | \_|  ''\---/''  |   |                       //
+//                  \  .-\__  `-`  ___/-. /                       //
+//                ___`. .'  /--.--\  `. . ___                     //
+//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
+//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
+//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
+//      ========`-.____`-.___\_____/___.-`____.-'========         //
+//                           `=---='                              //
+//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
+//             佛祖保佑       永不宕机      永无BUG               //
+////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/ruoyi/src/main/java/com/ruoyi/project/sd_changemouldtime/controller/SDChangeMouldTimeController.java b/ruoyi/src/main/java/com/ruoyi/project/sd_changemouldtime/controller/SDChangeMouldTimeController.java
new file mode 100644
index 000000000..ee19734b7
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/sd_changemouldtime/controller/SDChangeMouldTimeController.java
@@ -0,0 +1,43 @@
+package com.ruoyi.project.sd_changemouldtime.controller;
+
+import com.ruoyi.db.sd_mssql.DB_Ajax_DashBoard_ChangeMouldTime_8053;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 服务器监控
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/sd_changemouldtime")
+public class SDChangeMouldTimeController extends BaseController
+{
+//    @PreAuthorize("@ss.hasPermi('monitor:server:list')")
+    @GetMapping("/list")
+    public AjaxResult DoGetChangeMouldTimeList() throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_ChangeMouldTime_8053.DoGetChangeMouldTimeList());
+    }
+
+
+    @GetMapping("/DoGetChangeMouldTimeListDateRange/{fDateStart}/{fDateEnd}")
+    public AjaxResult DoGetChangeMouldTimeListDateRange(@PathVariable String fDateStart, @PathVariable String fDateEnd) throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_ChangeMouldTime_8053.DoGetChangeMouldTimeListDateRange(fDateStart,fDateEnd));
+    }
+
+
+    @GetMapping("/rangetimeavg/{fDateStart}/{fDateEnd}")
+    public AjaxResult getRangeTimeAvg(@PathVariable String fDateStart, @PathVariable String fDateEnd) throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_ChangeMouldTime_8053.DoGet_avg_changemouldtime_date_range(fDateStart,fDateEnd));
+    }
+
+
+
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/sd_dashboard/banner.txt b/ruoyi/src/main/java/com/ruoyi/project/sd_dashboard/banner.txt
new file mode 100644
index 000000000..94662592f
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/sd_dashboard/banner.txt
@@ -0,0 +1,24 @@
+Application Version: ${ruoyi.version}
+Spring Boot Version: ${spring-boot.version}
+////////////////////////////////////////////////////////////////////
+//                          _ooOoo_                               //
+//                         o8888888o                              //
+//                         88" . "88                              //
+//                         (| ^_^ |)                              //
+//                         O\  =  /O                              //
+//                      ____/`---'\____                           //
+//                    .'  \\|     |//  `.                         //
+//                   /  \\|||  :  |||//  \                        //
+//                  /  _||||| -:- |||||-  \                       //
+//                  |   | \\\  -  /// |   |                       //
+//                  | \_|  ''\---/''  |   |                       //
+//                  \  .-\__  `-`  ___/-. /                       //
+//                ___`. .'  /--.--\  `. . ___                     //
+//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
+//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
+//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
+//      ========`-.____`-.___\_____/___.-`____.-'========         //
+//                           `=---='                              //
+//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
+//             佛祖保佑       永不宕机      永无BUG               //
+////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/ruoyi/src/main/java/com/ruoyi/project/sd_dashboard/controller/SDDashBoardController.java b/ruoyi/src/main/java/com/ruoyi/project/sd_dashboard/controller/SDDashBoardController.java
new file mode 100644
index 000000000..9502e3bed
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/sd_dashboard/controller/SDDashBoardController.java
@@ -0,0 +1,54 @@
+package com.ruoyi.project.sd_dashboard.controller;
+
+import com.ruoyi.db.mssql.DB_Ajax_DashBoard_48102;
+import com.ruoyi.db.sd_mssql.DB_Ajax_DashBoard_8053;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 服务器监控
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/sd_dashboard")
+public class SDDashBoardController extends BaseController
+{
+//    @PreAuthorize("@ss.hasPermi('monitor:server:list')")
+    @GetMapping("/30day")
+    public AjaxResult get30Day() throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_8053.DoGet30Day());
+    }
+
+
+    @GetMapping("/lastday")
+    public AjaxResult getLastDay() throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_8053.DoGetLastDay());
+    }
+
+
+    @GetMapping("/group")
+    public AjaxResult getGroup() throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_8053.DoGetCurrentTimeGroup());
+    }
+
+    @GetMapping("/current")
+    public AjaxResult DoGetCurrent() throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_48102.SD_DoGetCurrent());
+    }
+
+
+    @GetMapping("/daterange/{fDateStart}/{fDateEnd}")
+    public AjaxResult getDateRange(@PathVariable String fDateStart, @PathVariable String fDateEnd) throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_8053.DoGetDateRange(fDateStart,fDateEnd));
+    }
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/sd_density/SDDensityController.java b/ruoyi/src/main/java/com/ruoyi/project/sd_density/SDDensityController.java
new file mode 100644
index 000000000..e6d6e6a91
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/sd_density/SDDensityController.java
@@ -0,0 +1,49 @@
+package com.ruoyi.project.sd_density;
+
+import com.ruoyi.db.mssql.DB_Ajax_DashBoard_Density_48102;
+import com.ruoyi.db.sd_mssql.DB_Ajax_DashBoard_Density_8053;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 服务器监控
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/sd_density")
+public class SDDensityController extends BaseController
+{
+//    @PreAuthorize("@ss.hasPermi('monitor:server:list')")
+    @GetMapping("/30day")
+    public AjaxResult get30Day() throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_Density_8053.DoGet30dDensityListMap());
+    }
+
+
+    @GetMapping("/72h")
+    public AjaxResult get72h() throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_Density_8053.DoGet72hDensityListMap());
+    }
+
+
+    @GetMapping("/group")
+    public AjaxResult getGroup() throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_Density_8053.DoGetGroupDensityListMap());
+    }
+
+
+    @GetMapping("/getDensityDataRange/{fDateStart}/{fDateEnd}")
+    public AjaxResult getDateRange(@PathVariable String fDateStart, @PathVariable String fDateEnd) throws Exception
+    {
+        return AjaxResult.success(DB_Ajax_DashBoard_Density_8053.getDensityDataRange(fDateStart,fDateEnd));
+    }
+
+}
diff --git a/ruoyi/src/main/resources/application.yml b/ruoyi/src/main/resources/application.yml
index c9df3ccaa..07f51498d 100644
--- a/ruoyi/src/main/resources/application.yml
+++ b/ruoyi/src/main/resources/application.yml
@@ -82,7 +82,7 @@ token:
     # 令牌密钥
     secret: abcdefghijklmnopqrstuvwxyz
     # 令牌有效期(默认30分钟)
-    expireTime: 30
+    expireTime: 99999
 
 # MyBatis配置
 mybatis: