From 4f113d1862ee978e7d0756f31af79ad73b1dc6d7 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 12 九月 2024 16:33:39 +0800
Subject: [PATCH] #

---
 zy-asrs-admin/package.json                                                       |    1 
 zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/DateUtils.java      |   20 +++
 zy-asrs-admin/package-lock.json                                                  |   45 +++++++
 zy-asrs-admin/src/views/HomeView.vue                                             |  142 +++++++++++++++++++++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/EChartController.java  |  114 +++++++++++++++++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/echart/EChartLineBean.java |   14 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/echart/EChartPieBean.java  |   12 ++
 7 files changed, 346 insertions(+), 2 deletions(-)

diff --git a/zy-asrs-admin/package-lock.json b/zy-asrs-admin/package-lock.json
index a3d8b08..08aaa64 100644
--- a/zy-asrs-admin/package-lock.json
+++ b/zy-asrs-admin/package-lock.json
@@ -12,6 +12,7 @@
         "@vitejs/plugin-vue-jsx": "^4.0.0",
         "ant-design-vue": "^4.2.3",
         "axios": "^1.7.2",
+        "echarts": "^5.5.1",
         "pinia": "^2.1.7",
         "pixi.js": "^5.3.12",
         "vue": "^3.4.29",
@@ -1910,6 +1911,15 @@
       "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
       "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
     },
+    "node_modules/echarts": {
+      "version": "5.5.1",
+      "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.1.tgz",
+      "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
+      "dependencies": {
+        "tslib": "2.3.0",
+        "zrender": "5.6.0"
+      }
+    },
     "node_modules/electron-to-chromium": {
       "version": "1.4.812",
       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz",
@@ -2637,6 +2647,11 @@
         "node": ">=4"
       }
     },
+    "node_modules/tslib": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+    },
     "node_modules/update-browserslist-db": {
       "version": "1.0.16",
       "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
@@ -2800,6 +2815,14 @@
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
       "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+    },
+    "node_modules/zrender": {
+      "version": "5.6.0",
+      "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.0.tgz",
+      "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
+      "dependencies": {
+        "tslib": "2.3.0"
+      }
     }
   },
   "dependencies": {
@@ -4127,6 +4150,15 @@
       "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
       "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
     },
+    "echarts": {
+      "version": "5.5.1",
+      "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.1.tgz",
+      "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
+      "requires": {
+        "tslib": "2.3.0",
+        "zrender": "5.6.0"
+      }
+    },
     "electron-to-chromium": {
       "version": "1.4.812",
       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz",
@@ -4619,6 +4651,11 @@
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
       "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
     },
+    "tslib": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+    },
     "update-browserslist-db": {
       "version": "1.0.16",
       "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
@@ -4696,6 +4733,14 @@
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
       "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+    },
+    "zrender": {
+      "version": "5.6.0",
+      "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.0.tgz",
+      "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
+      "requires": {
+        "tslib": "2.3.0"
+      }
     }
   }
 }
diff --git a/zy-asrs-admin/package.json b/zy-asrs-admin/package.json
index ec9100c..6a4b1d6 100644
--- a/zy-asrs-admin/package.json
+++ b/zy-asrs-admin/package.json
@@ -13,6 +13,7 @@
     "@vitejs/plugin-vue-jsx": "^4.0.0",
     "ant-design-vue": "^4.2.3",
     "axios": "^1.7.2",
+    "echarts": "^5.5.1",
     "pinia": "^2.1.7",
     "pixi.js": "^5.3.12",
     "vue": "^3.4.29",
diff --git a/zy-asrs-admin/src/views/HomeView.vue b/zy-asrs-admin/src/views/HomeView.vue
index 6ece80c..42278e5 100644
--- a/zy-asrs-admin/src/views/HomeView.vue
+++ b/zy-asrs-admin/src/views/HomeView.vue
@@ -1,6 +1,140 @@
 <script setup>
-import { getCurrentInstance, ref } from 'vue';
+import { getCurrentInstance, ref, onMounted } from 'vue';
+import { get, post } from '@/utils/request.js'
+import * as echarts from "echarts";
 const context = getCurrentInstance()?.appContext.config.globalProperties;
+
+let chartPie = null;
+const chartPieContainer = ref(null);
+let chartLine = null;
+const chartLineContainer = ref(null);
+
+function getPieOptions() {
+  post('/api/charts/loc/use', {}).then(resp => {
+    let result = resp.data;
+    if (result.code == 200) {
+      let data = result.data;
+
+      let pieOptions = {
+        title: {
+          text: '搴撲綅浣跨敤姣斾緥',
+          left: 'center',
+          top: '0%'
+        },
+        tooltip: {
+          trigger: 'item',
+          top: '0%'
+        },
+        grid: {
+          top: '0%',
+          left: '3%',
+          right: '4%',
+          bottom: '3%',
+          containLabel: true
+        },
+        // legend: {
+        //   orient: 'vertical',
+        //   left: 'left'
+        // },
+        series: [
+          {
+            type: 'pie',
+            radius: '70%',
+            data: data,
+            emphasis: {
+              itemStyle: {
+                shadowBlur: 10,
+                shadowOffsetX: 0,
+                shadowColor: 'rgba(0, 0, 0, 0.5)'
+              }
+            }
+          }
+        ]
+      }
+
+      chartPie.setOption(pieOptions);
+
+    }
+  })
+}
+
+function getLineOptions() {
+  post('/api/charts/loc/line', {}).then(resp => {
+    let result = resp.data;
+    if (result.code == 200) {
+      let data = result.data;
+
+      let lineOptions = {
+        title: {
+          text: '鏃ュ嚭鍏ュ簱鏁伴噺',
+          left: 'center',
+        },
+        tooltip: {
+          trigger: 'axis'
+        },
+        legend: {
+          data: ['鍏ュ簱鏁伴噺', '鍑哄簱鏁伴噺'],
+          top: '10%'
+        },
+        grid: {
+          top: '20%',
+          left: '3%',
+          right: '4%',
+          bottom: '3%',
+          containLabel: true
+        },
+        xAxis: {
+          type: 'category',
+          boundaryGap: false,
+          data: data.days
+        },
+        yAxis: {
+          type: 'value'
+        },
+        series: [
+          {
+            name: '鍏ュ簱鏁伴噺',
+            type: 'line',
+            data: data.in.value,
+            smooth: true
+          },
+          {
+            name: '鍑哄簱鏁伴噺',
+            type: 'line',
+            data: data.out.value,
+            smooth: true
+          }
+        ]
+      }
+
+      console.log(lineOptions);
+      
+      chartLine.setOption(lineOptions);
+
+    }
+  })
+}
+
+function initChart() {
+  chartPie = echarts.init(chartPieContainer.value);
+  chartPie.setOption({
+    type: Object,
+    required: true
+  })
+
+  chartLine = echarts.init(chartLineContainer.value);
+  chartLine.setOption({
+    type: Object,
+    required: true
+  })
+}
+
+onMounted(() => {
+  initChart()
+  getPieOptions()
+  getLineOptions()
+})
+
 </script>
 
 <script>
@@ -10,5 +144,9 @@
 </script>
 
 <template>
-  Hello World
+  <div style="display: flex;">
+    <div ref="chartPieContainer" style="width: 49%;height: 400px;"></div>
+    <div ref="chartLineContainer" style="width: 49%;height: 400px;"></div>
+    <!-- <EChartView ref="chartChild2" /> -->
+  </div>
 </template>
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/DateUtils.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/DateUtils.java
index 3145824..471ac2c 100644
--- a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/DateUtils.java
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/DateUtils.java
@@ -120,6 +120,26 @@
         return calculate(date, val, timeUnit, false);
     }
 
+    public static Date getStartOfDay(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        return calendar.getTime();
+    }
+
+    public static Date getEndOfDay(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        calendar.set(Calendar.MILLISECOND, 999);
+        return calendar.getTime();
+    }
+
     /**
      * 鏃堕棿瀵硅薄DateEntity
      */
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/EChartController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/EChartController.java
new file mode 100644
index 0000000..9e1a1dd
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/EChartController.java
@@ -0,0 +1,114 @@
+package com.zy.asrs.wms.asrs.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.framework.common.DateUtils;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wms.asrs.entity.Loc;
+import com.zy.asrs.wms.asrs.entity.TaskLog;
+import com.zy.asrs.wms.asrs.entity.echart.EChartLineBean;
+import com.zy.asrs.wms.asrs.entity.echart.EChartPieBean;
+import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
+import com.zy.asrs.wms.asrs.service.LocService;
+import com.zy.asrs.wms.asrs.service.TaskLogService;
+import com.zy.asrs.wms.system.controller.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@RestController
+@RequestMapping("/api")
+public class EChartController extends BaseController {
+
+    @Autowired
+    private LocService locService;
+    @Autowired
+    private TaskLogService taskLogService;
+
+    @PostMapping("/charts/loc/use")
+    public R locUse(){
+        List<EChartPieBean> list = new ArrayList<>();
+
+        long fqty = locService.count(new LambdaQueryWrapper<Loc>().in(Loc::getLocStsId, LocStsType.F.val(), LocStsType.D.val()));
+        long oqty = locService.count(new LambdaQueryWrapper<Loc>().in(Loc::getLocStsId, LocStsType.O.val()));
+        long uqty = locService.count(new LambdaQueryWrapper<Loc>().in(Loc::getLocStsId, LocStsType.S.val(), LocStsType.R.val()));
+        long xqty = locService.count(new LambdaQueryWrapper<Loc>().in(Loc::getLocStsId, LocStsType.X.val()));
+
+        EChartPieBean fbean = new EChartPieBean();
+        fbean.setName("鍦ㄥ簱搴撲綅");
+        fbean.setValue(fqty);
+        list.add(fbean);
+
+        EChartPieBean obean = new EChartPieBean();
+        obean.setName("绌哄簱浣�");
+        obean.setValue(oqty);
+        list.add(obean);
+
+        EChartPieBean ubean = new EChartPieBean();
+        ubean.setName("浣跨敤搴撲綅");
+        ubean.setValue(uqty);
+        list.add(ubean);
+
+        EChartPieBean xbean = new EChartPieBean();
+        xbean.setName("绂佺敤搴撲綅");
+        xbean.setValue(xqty);
+        list.add(xbean);
+        return R.ok(list);
+    }
+
+    @PostMapping("/charts/loc/line")
+    public R locIoLineCharts(){
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.DATE, -12);
+
+        ArrayList<String> days = new ArrayList<>();
+        ArrayList<Long> inData = new ArrayList<>();
+        ArrayList<Long> outData = new ArrayList<>();
+        for (int i = 0; i < 12; i++) {
+            calendar.add(Calendar.DATE, 1);
+            Date time = calendar.getTime();
+            days.add(sf.format(time));
+
+            Date startOfDay = DateUtils.getStartOfDay(time);
+            Date endOfDay = DateUtils.getEndOfDay(time);
+
+            LambdaQueryWrapper<TaskLog> inWrapper = new LambdaQueryWrapper<TaskLog>()
+                    .ge(TaskLog::getCreateTime, startOfDay)
+                    .le(TaskLog::getCreateTime, endOfDay)
+                    .eq(TaskLog::getTaskSts, 100)
+                    .in(TaskLog::getTaskType, 1, 53, 57);
+
+            LambdaQueryWrapper<TaskLog> outWrapper = new LambdaQueryWrapper<TaskLog>()
+                    .ge(TaskLog::getCreateTime, startOfDay)
+                    .le(TaskLog::getCreateTime, endOfDay)
+                    .eq(TaskLog::getTaskSts, 200)
+                    .in(TaskLog::getTaskType, 101, 103, 107);
+
+            long inCount = taskLogService.count(inWrapper);
+            long outCount = taskLogService.count(outWrapper);
+
+            inData.add(inCount);
+            outData.add(outCount);
+        }
+
+        EChartLineBean inBean = new EChartLineBean();
+        inBean.setName("鍏ュ簱鏁伴噺");
+        inBean.setValue(inData);
+
+        EChartLineBean outBean = new EChartLineBean();
+        outBean.setName("鍑哄簱鏁伴噺");
+        outBean.setValue(outData);
+
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("in", inBean);
+        map.put("out", outBean);
+        map.put("days", days);
+
+        return R.ok().add(map);
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/echart/EChartLineBean.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/echart/EChartLineBean.java
new file mode 100644
index 0000000..272f3a1
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/echart/EChartLineBean.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.wms.asrs.entity.echart;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EChartLineBean {
+
+    private String name;
+
+    private List<Long> value;
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/echart/EChartPieBean.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/echart/EChartPieBean.java
new file mode 100644
index 0000000..e17fbe4
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/echart/EChartPieBean.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.entity.echart;
+
+import lombok.Data;
+
+@Data
+public class EChartPieBean {
+
+    private String name;
+
+    private Long value;
+
+}

--
Gitblit v1.9.1