ZengTao
2024-09-12 e0043788e0fdbc7292a532e7eb7d2b33a9fa2d7e
删除扫码枪多余代码,大理片添加指定工程
17个文件已修改
2个文件已删除
2098 ■■■■ 已修改文件
UI-Project/package-lock.json 1533 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/AsyncTaskExecutorConfig.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/UnLoadGlassApplication.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/BarcodeReadThread.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package-lock.json
@@ -15,6 +15,7 @@
        "echarts": "^5.5.1",
        "element-plus": "^2.4.0",
        "moment": "^2.30.1",
        "northglass-mes": "file:",
        "pinia": "^2.1.6",
        "pinia-plugin-persistedstate": "^3.2.0",
        "qrcode": "^1.5.4",
@@ -1311,6 +1312,10 @@
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
      "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
    },
    "node_modules/northglass-mes": {
      "resolved": "",
      "link": true
    },
    "node_modules/p-limit": {
      "version": "2.3.0",
@@ -3123,6 +3128,1534 @@
      "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
      "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
    },
    "northglass-mes": {
      "version": "file:",
      "requires": {
        "@element-plus/icons-vue": "^2.3.1",
        "@types/sortablejs": "^1.15.7",
        "@vitejs/plugin-vue": "^4.6.2",
        "@vue-macros/reactivity-transform": "^0.3.23",
        "axios": "^1.6.8",
        "chart.js": "^4.4.3",
        "echarts": "^5.5.1",
        "element-plus": "^2.4.0",
        "http-proxy-middleware": "^3.0.0",
        "moment": "^2.30.1",
        "northglass-mes": "file:",
        "pinia": "^2.1.6",
        "pinia-plugin-persistedstate": "^3.2.0",
        "qrcode": "^1.5.4",
        "sortablejs": "^1.15.1",
        "sweetalert2": "^11.10.7",
        "unplugin-auto-import": "^0.17.6",
        "vite": "^4.4.9",
        "vue": "^3.3.4",
        "vue-draggable-plus": "^0.5.0",
        "vue-echarts": "^6.7.3",
        "vue-i18n": "^9.10.1",
        "vue-print-nb": "^1.7.5",
        "vue-router": "^4.2.4",
        "vue3-print-nb": "^0.1.4",
        "vxe-table": "^4.5.15",
        "xe-utils": "^3.5.14",
        "xlsx": "^0.18.5"
      },
      "dependencies": {
        "@antfu/utils": {
          "version": "0.7.8",
          "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.8.tgz",
          "integrity": "sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==",
          "dev": true
        },
        "@babel/helper-string-parser": {
          "version": "7.24.8",
          "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
          "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ=="
        },
        "@babel/helper-validator-identifier": {
          "version": "7.24.7",
          "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
          "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w=="
        },
        "@babel/parser": {
          "version": "7.25.3",
          "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.25.3.tgz",
          "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
          "requires": {
            "@babel/types": "^7.25.2"
          }
        },
        "@babel/types": {
          "version": "7.25.2",
          "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.25.2.tgz",
          "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
          "requires": {
            "@babel/helper-string-parser": "^7.24.8",
            "@babel/helper-validator-identifier": "^7.24.7",
            "to-fast-properties": "^2.0.0"
          }
        },
        "@ctrl/tinycolor": {
          "version": "3.6.1",
          "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
          "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA=="
        },
        "@element-plus/icons-vue": {
          "version": "2.3.1",
          "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
          "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
          "requires": {}
        },
        "@esbuild/win32-ia32": {
          "version": "0.18.20",
          "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
          "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
          "dev": true,
          "optional": true
        },
        "@floating-ui/core": {
          "version": "1.5.0",
          "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz",
          "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==",
          "requires": {
            "@floating-ui/utils": "^0.1.3"
          }
        },
        "@floating-ui/dom": {
          "version": "1.5.3",
          "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz",
          "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==",
          "requires": {
            "@floating-ui/core": "^1.4.2",
            "@floating-ui/utils": "^0.1.3"
          }
        },
        "@floating-ui/utils": {
          "version": "0.1.6",
          "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz",
          "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
        },
        "@intlify/core-base": {
          "version": "9.13.1",
          "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.13.1.tgz",
          "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
          "requires": {
            "@intlify/message-compiler": "9.13.1",
            "@intlify/shared": "9.13.1"
          }
        },
        "@intlify/message-compiler": {
          "version": "9.13.1",
          "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
          "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
          "requires": {
            "@intlify/shared": "9.13.1",
            "source-map-js": "^1.0.2"
          }
        },
        "@intlify/shared": {
          "version": "9.13.1",
          "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.13.1.tgz",
          "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ=="
        },
        "@jridgewell/sourcemap-codec": {
          "version": "1.4.15",
          "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
          "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
        },
        "@kurkle/color": {
          "version": "0.3.2",
          "resolved": "https://registry.npmmirror.com/@kurkle/color/-/color-0.3.2.tgz",
          "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw=="
        },
        "@nodelib/fs.scandir": {
          "version": "2.1.5",
          "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
          "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
          "dev": true,
          "requires": {
            "@nodelib/fs.stat": "2.0.5",
            "run-parallel": "^1.1.9"
          }
        },
        "@nodelib/fs.stat": {
          "version": "2.0.5",
          "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
          "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
          "dev": true
        },
        "@nodelib/fs.walk": {
          "version": "1.2.8",
          "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
          "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
          "dev": true,
          "requires": {
            "@nodelib/fs.scandir": "2.1.5",
            "fastq": "^1.6.0"
          }
        },
        "@popperjs/core": {
          "version": "npm:@sxzz/popperjs-es@2.11.7",
          "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
          "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
        },
        "@rollup/pluginutils": {
          "version": "5.1.0",
          "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
          "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
          "requires": {
            "@types/estree": "^1.0.0",
            "estree-walker": "^2.0.2",
            "picomatch": "^2.3.1"
          }
        },
        "@types/estree": {
          "version": "1.0.2",
          "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz",
          "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA=="
        },
        "@types/http-proxy": {
          "version": "1.17.14",
          "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.14.tgz",
          "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==",
          "dev": true,
          "requires": {
            "@types/node": "*"
          }
        },
        "@types/lodash": {
          "version": "4.14.199",
          "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz",
          "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg=="
        },
        "@types/lodash-es": {
          "version": "4.17.9",
          "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.9.tgz",
          "integrity": "sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==",
          "requires": {
            "@types/lodash": "*"
          }
        },
        "@types/node": {
          "version": "20.12.5",
          "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.12.5.tgz",
          "integrity": "sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==",
          "dev": true,
          "requires": {
            "undici-types": "~5.26.4"
          }
        },
        "@types/sortablejs": {
          "version": "1.15.8",
          "resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.8.tgz",
          "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg=="
        },
        "@types/web-bluetooth": {
          "version": "0.0.16",
          "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
          "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
        },
        "@vitejs/plugin-vue": {
          "version": "4.6.2",
          "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz",
          "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==",
          "dev": true,
          "requires": {}
        },
        "@vue-macros/common": {
          "version": "1.8.0",
          "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.8.0.tgz",
          "integrity": "sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA==",
          "requires": {
            "@babel/types": "^7.22.17",
            "@rollup/pluginutils": "^5.0.4",
            "@vue/compiler-sfc": "^3.3.4",
            "ast-kit": "^0.11.2",
            "local-pkg": "^0.4.3",
            "magic-string-ast": "^0.3.0"
          }
        },
        "@vue-macros/reactivity-transform": {
          "version": "0.3.23",
          "resolved": "https://registry.npmjs.org/@vue-macros/reactivity-transform/-/reactivity-transform-0.3.23.tgz",
          "integrity": "sha512-SubIg1GsNpQdIDJusrcA2FWBgwSY+4jmL0j6SJ6PU85r3rlS+uDhn6AUkqxeZRAdmJnrbGHXDyWUdygOZmWrSg==",
          "requires": {
            "@babel/parser": "^7.22.16",
            "@vue-macros/common": "1.8.0",
            "@vue/compiler-core": "^3.3.4",
            "@vue/shared": "^3.3.4",
            "magic-string": "^0.30.3",
            "unplugin": "^1.4.0"
          }
        },
        "@vue/compiler-core": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
          "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
          "requires": {
            "@babel/parser": "^7.21.3",
            "@vue/shared": "3.3.4",
            "estree-walker": "^2.0.2",
            "source-map-js": "^1.0.2"
          }
        },
        "@vue/compiler-dom": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
          "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
          "requires": {
            "@vue/compiler-core": "3.3.4",
            "@vue/shared": "3.3.4"
          }
        },
        "@vue/compiler-sfc": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
          "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
          "requires": {
            "@babel/parser": "^7.20.15",
            "@vue/compiler-core": "3.3.4",
            "@vue/compiler-dom": "3.3.4",
            "@vue/compiler-ssr": "3.3.4",
            "@vue/reactivity-transform": "3.3.4",
            "@vue/shared": "3.3.4",
            "estree-walker": "^2.0.2",
            "magic-string": "^0.30.0",
            "postcss": "^8.1.10",
            "source-map-js": "^1.0.2"
          }
        },
        "@vue/compiler-ssr": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
          "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
          "requires": {
            "@vue/compiler-dom": "3.3.4",
            "@vue/shared": "3.3.4"
          }
        },
        "@vue/devtools-api": {
          "version": "6.5.1",
          "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz",
          "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA=="
        },
        "@vue/reactivity": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
          "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
          "requires": {
            "@vue/shared": "3.3.4"
          }
        },
        "@vue/reactivity-transform": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
          "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
          "requires": {
            "@babel/parser": "^7.20.15",
            "@vue/compiler-core": "3.3.4",
            "@vue/shared": "3.3.4",
            "estree-walker": "^2.0.2",
            "magic-string": "^0.30.0"
          }
        },
        "@vue/runtime-core": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
          "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
          "requires": {
            "@vue/reactivity": "3.3.4",
            "@vue/shared": "3.3.4"
          }
        },
        "@vue/runtime-dom": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
          "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
          "requires": {
            "@vue/runtime-core": "3.3.4",
            "@vue/shared": "3.3.4",
            "csstype": "^3.1.1"
          }
        },
        "@vue/server-renderer": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
          "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
          "requires": {
            "@vue/compiler-ssr": "3.3.4",
            "@vue/shared": "3.3.4"
          }
        },
        "@vue/shared": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
          "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
        },
        "@vueuse/core": {
          "version": "9.13.0",
          "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz",
          "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
          "requires": {
            "@types/web-bluetooth": "^0.0.16",
            "@vueuse/metadata": "9.13.0",
            "@vueuse/shared": "9.13.0",
            "vue-demi": "*"
          },
          "dependencies": {
            "vue-demi": {
              "version": "0.14.6",
              "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
              "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
              "requires": {}
            }
          }
        },
        "@vueuse/metadata": {
          "version": "9.13.0",
          "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz",
          "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
        },
        "@vueuse/shared": {
          "version": "9.13.0",
          "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
          "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
          "requires": {
            "vue-demi": "*"
          },
          "dependencies": {
            "vue-demi": {
              "version": "0.14.6",
              "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
              "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
              "requires": {}
            }
          }
        },
        "acorn": {
          "version": "8.12.0",
          "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.12.0.tgz",
          "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw=="
        },
        "adler-32": {
          "version": "1.3.1",
          "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
          "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A=="
        },
        "ansi-regex": {
          "version": "5.0.1",
          "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
        },
        "ansi-styles": {
          "version": "4.3.0",
          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
          "requires": {
            "color-convert": "^2.0.1"
          }
        },
        "anymatch": {
          "version": "3.1.3",
          "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
          "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
          "requires": {
            "normalize-path": "^3.0.0",
            "picomatch": "^2.0.4"
          }
        },
        "ast-kit": {
          "version": "0.11.2",
          "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-0.11.2.tgz",
          "integrity": "sha512-Q0DjXK4ApbVoIf9GLyCo252tUH44iTnD/hiJ2TQaJeydYWSpKk0sI34+WMel8S9Wt5pbLgG02oJ+gkgX5DV3sQ==",
          "requires": {
            "@babel/parser": "^7.22.14",
            "@rollup/pluginutils": "^5.0.4",
            "pathe": "^1.1.1"
          }
        },
        "async-validator": {
          "version": "4.2.5",
          "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
          "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
        },
        "asynckit": {
          "version": "0.4.0",
          "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
          "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
        },
        "axios": {
          "version": "1.6.8",
          "resolved": "https://registry.npmmirror.com/axios/-/axios-1.6.8.tgz",
          "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
          "requires": {
            "follow-redirects": "^1.15.6",
            "form-data": "^4.0.0",
            "proxy-from-env": "^1.1.0"
          }
        },
        "balanced-match": {
          "version": "1.0.2",
          "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
          "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
          "dev": true
        },
        "binary-extensions": {
          "version": "2.3.0",
          "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
          "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="
        },
        "brace-expansion": {
          "version": "2.0.1",
          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
          "dev": true,
          "requires": {
            "balanced-match": "^1.0.0"
          }
        },
        "braces": {
          "version": "3.0.2",
          "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
          "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
          "requires": {
            "fill-range": "^7.0.1"
          }
        },
        "camelcase": {
          "version": "5.3.1",
          "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
        },
        "cfb": {
          "version": "1.2.2",
          "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
          "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
          "requires": {
            "adler-32": "~1.3.0",
            "crc-32": "~1.2.0"
          }
        },
        "chart.js": {
          "version": "4.4.3",
          "resolved": "https://registry.npmmirror.com/chart.js/-/chart.js-4.4.3.tgz",
          "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==",
          "requires": {
            "@kurkle/color": "^0.3.0"
          }
        },
        "chokidar": {
          "version": "3.6.0",
          "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
          "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
          "requires": {
            "anymatch": "~3.1.2",
            "braces": "~3.0.2",
            "fsevents": "~2.3.2",
            "glob-parent": "~5.1.2",
            "is-binary-path": "~2.1.0",
            "is-glob": "~4.0.1",
            "normalize-path": "~3.0.0",
            "readdirp": "~3.6.0"
          }
        },
        "cliui": {
          "version": "6.0.0",
          "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz",
          "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
          "requires": {
            "string-width": "^4.2.0",
            "strip-ansi": "^6.0.0",
            "wrap-ansi": "^6.2.0"
          }
        },
        "codepage": {
          "version": "1.15.0",
          "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz",
          "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
        },
        "color-convert": {
          "version": "2.0.1",
          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
          "requires": {
            "color-name": "~1.1.4"
          }
        },
        "color-name": {
          "version": "1.1.4",
          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
        },
        "combined-stream": {
          "version": "1.0.8",
          "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
          "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
          "requires": {
            "delayed-stream": "~1.0.0"
          }
        },
        "confbox": {
          "version": "0.1.7",
          "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.7.tgz",
          "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==",
          "dev": true
        },
        "crc-32": {
          "version": "1.2.2",
          "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
          "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
        },
        "csstype": {
          "version": "3.1.2",
          "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
          "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
        },
        "dayjs": {
          "version": "1.11.10",
          "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
          "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
        },
        "debug": {
          "version": "4.3.4",
          "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
          "dev": true,
          "requires": {
            "ms": "2.1.2"
          }
        },
        "decamelize": {
          "version": "1.2.0",
          "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz",
          "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="
        },
        "delayed-stream": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
          "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
        },
        "dijkstrajs": {
          "version": "1.0.3",
          "resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
          "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="
        },
        "dom-zindex": {
          "version": "1.0.1",
          "resolved": "https://registry.npmjs.org/dom-zindex/-/dom-zindex-1.0.1.tgz",
          "integrity": "sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg=="
        },
        "echarts": {
          "version": "5.5.1",
          "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
          "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
          "requires": {
            "tslib": "2.3.0",
            "zrender": "5.6.0"
          }
        },
        "element-plus": {
          "version": "2.4.0",
          "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.4.0.tgz",
          "integrity": "sha512-yJEa8LXkGOOgkfkeqMMEdeX/Dc8EH9qPcRuX91dlhSXxgCKKbp9tH3QFTOG99ibZsrN/Em62nh7ddvbc7I1frw==",
          "requires": {
            "@ctrl/tinycolor": "^3.4.1",
            "@element-plus/icons-vue": "^2.0.6",
            "@floating-ui/dom": "^1.0.1",
            "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
            "@types/lodash": "^4.14.182",
            "@types/lodash-es": "^4.17.6",
            "@vueuse/core": "^9.1.0",
            "async-validator": "^4.2.5",
            "dayjs": "^1.11.3",
            "escape-html": "^1.0.3",
            "lodash": "^4.17.21",
            "lodash-es": "^4.17.21",
            "lodash-unified": "^1.0.2",
            "memoize-one": "^6.0.0",
            "normalize-wheel-es": "^1.2.0"
          }
        },
        "emoji-regex": {
          "version": "8.0.0",
          "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
        },
        "esbuild": {
          "version": "0.18.20",
          "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
          "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
          "dev": true,
          "requires": {
            "@esbuild/android-arm": "0.18.20",
            "@esbuild/android-arm64": "0.18.20",
            "@esbuild/android-x64": "0.18.20",
            "@esbuild/darwin-arm64": "0.18.20",
            "@esbuild/darwin-x64": "0.18.20",
            "@esbuild/freebsd-arm64": "0.18.20",
            "@esbuild/freebsd-x64": "0.18.20",
            "@esbuild/linux-arm": "0.18.20",
            "@esbuild/linux-arm64": "0.18.20",
            "@esbuild/linux-ia32": "0.18.20",
            "@esbuild/linux-loong64": "0.18.20",
            "@esbuild/linux-mips64el": "0.18.20",
            "@esbuild/linux-ppc64": "0.18.20",
            "@esbuild/linux-riscv64": "0.18.20",
            "@esbuild/linux-s390x": "0.18.20",
            "@esbuild/linux-x64": "0.18.20",
            "@esbuild/netbsd-x64": "0.18.20",
            "@esbuild/openbsd-x64": "0.18.20",
            "@esbuild/sunos-x64": "0.18.20",
            "@esbuild/win32-arm64": "0.18.20",
            "@esbuild/win32-ia32": "0.18.20",
            "@esbuild/win32-x64": "0.18.20"
          }
        },
        "escape-html": {
          "version": "1.0.3",
          "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
          "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
        },
        "escape-string-regexp": {
          "version": "5.0.0",
          "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
          "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
          "dev": true
        },
        "estree-walker": {
          "version": "2.0.2",
          "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
          "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
        },
        "eventemitter3": {
          "version": "4.0.7",
          "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz",
          "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
          "dev": true
        },
        "fast-glob": {
          "version": "3.3.2",
          "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
          "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
          "dev": true,
          "requires": {
            "@nodelib/fs.stat": "^2.0.2",
            "@nodelib/fs.walk": "^1.2.3",
            "glob-parent": "^5.1.2",
            "merge2": "^1.3.0",
            "micromatch": "^4.0.4"
          }
        },
        "fastq": {
          "version": "1.17.1",
          "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz",
          "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
          "dev": true,
          "requires": {
            "reusify": "^1.0.4"
          }
        },
        "fill-range": {
          "version": "7.0.1",
          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
          "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
          "requires": {
            "to-regex-range": "^5.0.1"
          }
        },
        "find-up": {
          "version": "4.1.0",
          "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
          "requires": {
            "locate-path": "^5.0.0",
            "path-exists": "^4.0.0"
          }
        },
        "follow-redirects": {
          "version": "1.15.6",
          "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz",
          "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
        },
        "form-data": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
          "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
          "requires": {
            "asynckit": "^0.4.0",
            "combined-stream": "^1.0.8",
            "mime-types": "^2.1.12"
          }
        },
        "frac": {
          "version": "1.1.2",
          "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
          "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
        },
        "get-caller-file": {
          "version": "2.0.5",
          "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
          "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
        },
        "glob-parent": {
          "version": "5.1.2",
          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
          "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
          "requires": {
            "is-glob": "^4.0.1"
          }
        },
        "http-proxy": {
          "version": "1.18.1",
          "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz",
          "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
          "dev": true,
          "requires": {
            "eventemitter3": "^4.0.0",
            "follow-redirects": "^1.0.0",
            "requires-port": "^1.0.0"
          }
        },
        "http-proxy-middleware": {
          "version": "3.0.0",
          "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz",
          "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==",
          "dev": true,
          "requires": {
            "@types/http-proxy": "^1.17.10",
            "debug": "^4.3.4",
            "http-proxy": "^1.18.1",
            "is-glob": "^4.0.1",
            "is-plain-obj": "^3.0.0",
            "micromatch": "^4.0.5"
          }
        },
        "is-binary-path": {
          "version": "2.1.0",
          "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
          "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
          "requires": {
            "binary-extensions": "^2.0.0"
          }
        },
        "is-extglob": {
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
          "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
        },
        "is-fullwidth-code-point": {
          "version": "3.0.0",
          "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
        },
        "is-glob": {
          "version": "4.0.3",
          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
          "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
          "requires": {
            "is-extglob": "^2.1.1"
          }
        },
        "is-number": {
          "version": "7.0.0",
          "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
        },
        "is-plain-obj": {
          "version": "3.0.0",
          "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
          "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
          "dev": true
        },
        "js-tokens": {
          "version": "9.0.0",
          "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.0.tgz",
          "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==",
          "dev": true
        },
        "local-pkg": {
          "version": "0.4.3",
          "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz",
          "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g=="
        },
        "locate-path": {
          "version": "5.0.0",
          "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
          "requires": {
            "p-locate": "^4.1.0"
          }
        },
        "lodash": {
          "version": "4.17.21",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
          "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
        },
        "lodash-es": {
          "version": "4.17.21",
          "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
          "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
        },
        "lodash-unified": {
          "version": "1.0.3",
          "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz",
          "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
          "requires": {}
        },
        "magic-string": {
          "version": "0.30.10",
          "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.10.tgz",
          "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
          "requires": {
            "@jridgewell/sourcemap-codec": "^1.4.15"
          }
        },
        "magic-string-ast": {
          "version": "0.3.0",
          "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.3.0.tgz",
          "integrity": "sha512-0shqecEPgdFpnI3AP90epXyxZy9g6CRZ+SZ7BcqFwYmtFEnZ1jpevcV5HoyVnlDS9gCnc1UIg3Rsvp3Ci7r8OA==",
          "requires": {
            "magic-string": "^0.30.2"
          }
        },
        "memoize-one": {
          "version": "6.0.0",
          "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
          "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
        },
        "merge2": {
          "version": "1.4.1",
          "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
          "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
          "dev": true
        },
        "micromatch": {
          "version": "4.0.5",
          "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz",
          "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
          "dev": true,
          "requires": {
            "braces": "^3.0.2",
            "picomatch": "^2.3.1"
          }
        },
        "mime-db": {
          "version": "1.52.0",
          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
          "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
        },
        "mime-types": {
          "version": "2.1.35",
          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
          "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
          "requires": {
            "mime-db": "1.52.0"
          }
        },
        "minimatch": {
          "version": "9.0.4",
          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.4.tgz",
          "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
          "dev": true,
          "requires": {
            "brace-expansion": "^2.0.1"
          }
        },
        "mlly": {
          "version": "1.7.1",
          "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.1.tgz",
          "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==",
          "dev": true,
          "requires": {
            "acorn": "^8.11.3",
            "pathe": "^1.1.2",
            "pkg-types": "^1.1.1",
            "ufo": "^1.5.3"
          }
        },
        "moment": {
          "version": "2.30.1",
          "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
          "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
        },
        "ms": {
          "version": "2.1.2",
          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
          "dev": true
        },
        "nanoid": {
          "version": "3.3.6",
          "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
          "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
        },
        "normalize-path": {
          "version": "3.0.0",
          "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
        },
        "normalize-wheel-es": {
          "version": "1.2.0",
          "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
          "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
        },
        "p-limit": {
          "version": "2.3.0",
          "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
          "requires": {
            "p-try": "^2.0.0"
          }
        },
        "p-locate": {
          "version": "4.1.0",
          "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
          "requires": {
            "p-limit": "^2.2.0"
          }
        },
        "p-try": {
          "version": "2.2.0",
          "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz",
          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
        },
        "path-exists": {
          "version": "4.0.0",
          "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
        },
        "pathe": {
          "version": "1.1.2",
          "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
          "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
        },
        "picocolors": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
          "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
        },
        "picomatch": {
          "version": "2.3.1",
          "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
          "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
        },
        "pinia": {
          "version": "2.1.7",
          "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz",
          "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==",
          "requires": {
            "@vue/devtools-api": "^6.5.0",
            "vue-demi": ">=0.14.5"
          },
          "dependencies": {
            "vue-demi": {
              "version": "0.14.6",
              "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
              "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
              "requires": {}
            }
          }
        },
        "pinia-plugin-persistedstate": {
          "version": "3.2.0",
          "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.0.tgz",
          "integrity": "sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==",
          "requires": {}
        },
        "pkg-types": {
          "version": "1.1.1",
          "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.1.1.tgz",
          "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==",
          "dev": true,
          "requires": {
            "confbox": "^0.1.7",
            "mlly": "^1.7.0",
            "pathe": "^1.1.2"
          }
        },
        "pngjs": {
          "version": "5.0.0",
          "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz",
          "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="
        },
        "postcss": {
          "version": "8.4.31",
          "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
          "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
          "requires": {
            "nanoid": "^3.3.6",
            "picocolors": "^1.0.0",
            "source-map-js": "^1.0.2"
          }
        },
        "prettier": {
          "version": "2.8.8",
          "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz",
          "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
          "optional": true
        },
        "proxy-from-env": {
          "version": "1.1.0",
          "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
          "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
        },
        "qrcode": {
          "version": "1.5.4",
          "resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.4.tgz",
          "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==",
          "requires": {
            "dijkstrajs": "^1.0.1",
            "pngjs": "^5.0.0",
            "yargs": "^15.3.1"
          }
        },
        "queue-microtask": {
          "version": "1.2.3",
          "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
          "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
          "dev": true
        },
        "readdirp": {
          "version": "3.6.0",
          "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
          "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
          "requires": {
            "picomatch": "^2.2.1"
          }
        },
        "require-directory": {
          "version": "2.1.1",
          "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
          "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
        },
        "require-main-filename": {
          "version": "2.0.0",
          "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz",
          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
        },
        "requires-port": {
          "version": "1.0.0",
          "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz",
          "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
          "dev": true
        },
        "resize-detector": {
          "version": "0.3.0",
          "resolved": "https://registry.npmmirror.com/resize-detector/-/resize-detector-0.3.0.tgz",
          "integrity": "sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ=="
        },
        "reusify": {
          "version": "1.0.4",
          "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
          "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
          "dev": true
        },
        "rollup": {
          "version": "3.29.4",
          "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
          "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
          "devOptional": true,
          "requires": {
            "fsevents": "~2.3.2"
          }
        },
        "run-parallel": {
          "version": "1.2.0",
          "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
          "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
          "dev": true,
          "requires": {
            "queue-microtask": "^1.2.2"
          }
        },
        "scule": {
          "version": "1.3.0",
          "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz",
          "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
          "dev": true
        },
        "set-blocking": {
          "version": "2.0.0",
          "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
          "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
        },
        "sortablejs": {
          "version": "1.15.1",
          "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.1.tgz",
          "integrity": "sha512-P5Cjvb0UG1ZVNiDPj/n4V+DinttXG6K8n7vM/HQf0C25K3YKQTQY6fsr/sEGsJGpQ9exmPxluHxKBc0mLKU1lQ=="
        },
        "source-map": {
          "version": "0.6.1",
          "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
        },
        "source-map-js": {
          "version": "1.0.2",
          "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
          "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
        },
        "ssf": {
          "version": "0.11.2",
          "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz",
          "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
          "requires": {
            "frac": "~1.1.2"
          }
        },
        "string-width": {
          "version": "4.2.3",
          "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
          "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
          "requires": {
            "emoji-regex": "^8.0.0",
            "is-fullwidth-code-point": "^3.0.0",
            "strip-ansi": "^6.0.1"
          }
        },
        "strip-ansi": {
          "version": "6.0.1",
          "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
          "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
          "requires": {
            "ansi-regex": "^5.0.1"
          }
        },
        "strip-literal": {
          "version": "2.1.0",
          "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.0.tgz",
          "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==",
          "dev": true,
          "requires": {
            "js-tokens": "^9.0.0"
          }
        },
        "sweetalert2": {
          "version": "11.10.7",
          "resolved": "https://registry.npmmirror.com/sweetalert2/-/sweetalert2-11.10.7.tgz",
          "integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg=="
        },
        "to-fast-properties": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
          "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
        },
        "to-regex-range": {
          "version": "5.0.1",
          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
          "requires": {
            "is-number": "^7.0.0"
          }
        },
        "tslib": {
          "version": "2.3.0",
          "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
          "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
        },
        "ufo": {
          "version": "1.5.3",
          "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.3.tgz",
          "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==",
          "dev": true
        },
        "undici-types": {
          "version": "5.26.5",
          "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
          "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
          "dev": true
        },
        "unimport": {
          "version": "3.7.2",
          "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.7.2.tgz",
          "integrity": "sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==",
          "dev": true,
          "requires": {
            "@rollup/pluginutils": "^5.1.0",
            "acorn": "^8.11.3",
            "escape-string-regexp": "^5.0.0",
            "estree-walker": "^3.0.3",
            "fast-glob": "^3.3.2",
            "local-pkg": "^0.5.0",
            "magic-string": "^0.30.10",
            "mlly": "^1.7.0",
            "pathe": "^1.1.2",
            "pkg-types": "^1.1.1",
            "scule": "^1.3.0",
            "strip-literal": "^2.1.0",
            "unplugin": "^1.10.1"
          },
          "dependencies": {
            "estree-walker": {
              "version": "3.0.3",
              "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
              "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
              "dev": true,
              "requires": {
                "@types/estree": "^1.0.0"
              }
            },
            "local-pkg": {
              "version": "0.5.0",
              "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz",
              "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
              "dev": true,
              "requires": {
                "mlly": "^1.4.2",
                "pkg-types": "^1.0.3"
              }
            }
          }
        },
        "unplugin": {
          "version": "1.10.1",
          "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.10.1.tgz",
          "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==",
          "requires": {
            "acorn": "^8.11.3",
            "chokidar": "^3.6.0",
            "webpack-sources": "^3.2.3",
            "webpack-virtual-modules": "^0.6.1"
          }
        },
        "unplugin-auto-import": {
          "version": "0.17.6",
          "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.17.6.tgz",
          "integrity": "sha512-dmX0Pex5DzMzVuALkexboOZvh51fL/BD6aoPO7qHoTYGlQp0GRKsREv2KMF1lzYI9SXKQiRxAjwzbQnrFFNydQ==",
          "dev": true,
          "requires": {
            "@antfu/utils": "^0.7.8",
            "@rollup/pluginutils": "^5.1.0",
            "fast-glob": "^3.3.2",
            "local-pkg": "^0.5.0",
            "magic-string": "^0.30.10",
            "minimatch": "^9.0.4",
            "unimport": "^3.7.1",
            "unplugin": "^1.10.1"
          },
          "dependencies": {
            "local-pkg": {
              "version": "0.5.0",
              "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz",
              "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
              "dev": true,
              "requires": {
                "mlly": "^1.4.2",
                "pkg-types": "^1.0.3"
              }
            }
          }
        },
        "vite": {
          "version": "4.4.11",
          "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz",
          "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==",
          "dev": true,
          "requires": {
            "esbuild": "^0.18.10",
            "fsevents": "~2.3.2",
            "postcss": "^8.4.27",
            "rollup": "^3.27.1"
          }
        },
        "vue": {
          "version": "3.3.4",
          "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",
          "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
          "requires": {
            "@vue/compiler-dom": "3.3.4",
            "@vue/compiler-sfc": "3.3.4",
            "@vue/runtime-dom": "3.3.4",
            "@vue/server-renderer": "3.3.4",
            "@vue/shared": "3.3.4"
          }
        },
        "vue-draggable-plus": {
          "version": "0.5.0",
          "resolved": "https://registry.npmmirror.com/vue-draggable-plus/-/vue-draggable-plus-0.5.0.tgz",
          "integrity": "sha512-A5TT5+M5JceROSjPO9aDZTsrSN1TetEs419czPlboomarSiGIBIxTp2WD7XH53EHMrbO7Qo+leRiHWV/rMlyjA==",
          "requires": {
            "@types/sortablejs": "^1.15.8"
          }
        },
        "vue-echarts": {
          "version": "6.7.3",
          "resolved": "https://registry.npmmirror.com/vue-echarts/-/vue-echarts-6.7.3.tgz",
          "integrity": "sha512-vXLKpALFjbPphW9IfQPOVfb1KjGZ/f8qa/FZHi9lZIWzAnQC1DgnmEK3pJgEkyo6EP7UnX6Bv/V3Ke7p+qCNXA==",
          "requires": {
            "resize-detector": "^0.3.0",
            "vue-demi": "^0.13.11"
          },
          "dependencies": {
            "vue-demi": {
              "version": "0.13.11",
              "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz",
              "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
              "requires": {}
            }
          }
        },
        "vue-i18n": {
          "version": "9.13.1",
          "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.13.1.tgz",
          "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
          "requires": {
            "@intlify/core-base": "9.13.1",
            "@intlify/shared": "9.13.1",
            "@vue/devtools-api": "^6.5.0"
          }
        },
        "vue-print-nb": {
          "version": "1.7.5",
          "resolved": "https://registry.npmmirror.com/vue-print-nb/-/vue-print-nb-1.7.5.tgz",
          "integrity": "sha512-iNbNyUVRWz0Ha1UTiCKxMPtHLUDGgNI8e8xmD3xqm9RlXIUeX9bT7DgNAfY8vPzqyFRHqGjxLI1rycKH366ziQ==",
          "requires": {
            "vue": "^2.6.11"
          },
          "dependencies": {
            "@vue/compiler-sfc": {
              "version": "2.7.16",
              "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
              "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
              "requires": {
                "@babel/parser": "^7.23.5",
                "postcss": "^8.4.14",
                "prettier": "^1.18.2 || ^2.0.0",
                "source-map": "^0.6.1"
              }
            },
            "vue": {
              "version": "2.7.16",
              "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz",
              "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
              "requires": {
                "@vue/compiler-sfc": "2.7.16",
                "csstype": "^3.1.0"
              }
            }
          }
        },
        "vue-router": {
          "version": "4.2.5",
          "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz",
          "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==",
          "requires": {
            "@vue/devtools-api": "^6.5.0"
          }
        },
        "vue3-print-nb": {
          "version": "0.1.4",
          "resolved": "https://registry.npmmirror.com/vue3-print-nb/-/vue3-print-nb-0.1.4.tgz",
          "integrity": "sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==",
          "requires": {
            "vue": "^3.0.5"
          }
        },
        "vxe-table": {
          "version": "4.5.15",
          "resolved": "https://registry.npmjs.org/vxe-table/-/vxe-table-4.5.15.tgz",
          "integrity": "sha512-1QuM27wjTZConQX55u2YbyIA69u9/ny83x1cqyrmkoK622GKrY324wuOO/nsjfnbxXV5C+IDzL/MfdrvKQbznQ==",
          "requires": {
            "dom-zindex": "^1.0.1",
            "xe-utils": "^3.5.14"
          }
        },
        "webpack-sources": {
          "version": "3.2.3",
          "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
          "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="
        },
        "webpack-virtual-modules": {
          "version": "0.6.2",
          "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
          "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="
        },
        "which-module": {
          "version": "2.0.1",
          "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz",
          "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="
        },
        "wmf": {
          "version": "1.0.2",
          "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
          "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
        },
        "word": {
          "version": "0.3.0",
          "resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz",
          "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
        },
        "wrap-ansi": {
          "version": "6.2.0",
          "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
          "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
          "requires": {
            "ansi-styles": "^4.0.0",
            "string-width": "^4.1.0",
            "strip-ansi": "^6.0.0"
          }
        },
        "xe-utils": {
          "version": "3.5.14",
          "resolved": "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.14.tgz",
          "integrity": "sha512-Xq6mS8dWwHBQsQUEBXcZYSaBV0KnNLoVWd0vRRDI3nKpbNxfs/LSCK0W21g1edLFnXYfKqg7hh5dakr3RtYY0A=="
        },
        "xlsx": {
          "version": "0.18.5",
          "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz",
          "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
          "requires": {
            "adler-32": "~1.3.0",
            "cfb": "~1.2.1",
            "codepage": "~1.15.0",
            "crc-32": "~1.2.1",
            "ssf": "~0.11.2",
            "wmf": "~1.0.1",
            "word": "~0.3.0"
          }
        },
        "y18n": {
          "version": "4.0.3",
          "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz",
          "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
        },
        "yargs": {
          "version": "15.4.1",
          "resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz",
          "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
          "requires": {
            "cliui": "^6.0.0",
            "decamelize": "^1.2.0",
            "find-up": "^4.1.0",
            "get-caller-file": "^2.0.1",
            "require-directory": "^2.1.1",
            "require-main-filename": "^2.0.0",
            "set-blocking": "^2.0.0",
            "string-width": "^4.2.0",
            "which-module": "^2.0.0",
            "y18n": "^4.0.0",
            "yargs-parser": "^18.1.2"
          }
        },
        "yargs-parser": {
          "version": "18.1.3",
          "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz",
          "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
          "requires": {
            "camelcase": "^5.0.0",
            "decamelize": "^1.2.0"
          }
        },
        "zrender": {
          "version": "5.6.0",
          "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
          "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
          "requires": {
            "tslib": "2.3.0"
          }
        }
      }
    },
    "p-limit": {
      "version": "2.3.0",
      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
UI-Project/package.json
@@ -15,6 +15,7 @@
    "echarts": "^5.5.1",
    "element-plus": "^2.4.0",
    "moment": "^2.30.1",
    "northglass-mes": "file:",
    "pinia": "^2.1.6",
    "pinia-plugin-persistedstate": "^3.2.0",
    "qrcode": "^1.5.4",
UI-Project/src/views/Slicecage/slicecage.vue
@@ -79,6 +79,7 @@
const selectedRow = ref(null); // 存储选中的行数据  
const temperingtotal = ref(0);
const glasstotal = ref(0);
const temperingengineerId=ref('');
    // 当前页码和每页显示的条数
    const currentPage = ref(1);
    const itemsPerPage = computed(() => {
@@ -386,6 +387,58 @@
    console.error('发生错误:', error);  
  }  
}; 
 // 指定工程
 const brokek = async(row) => {
  try {
    const confirmResult = await ElMessageBox.confirm(
      t('searchOrder.specifytemperinga'),
      t('searchOrder.prompt'),
      {
        confirmButtonText: t('searchOrder.yes'),
        cancelButtonText: t('searchOrder.cancel'),
        type: 'warning',
      }
    );
    if (confirmResult === 'confirm') {
      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/appointEngineerId",{
        engineerId: row.engineer_id
    });
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {
      ElMessage.error(response.message);
      }
    }
  } catch (error) {
    console.error('发生错误:', error);
  }
};
// 指定工程
const broked = async() => {
  try {
    const confirmResult = await ElMessageBox.confirm(
      t('searchOrder.specifytemperinga'),
      t('searchOrder.prompt'),
      {
        confirmButtonText: t('searchOrder.yes'),
        cancelButtonText: t('searchOrder.cancel'),
        type: 'warning',
      }
    );
    if (confirmResult === 'confirm') {
      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/appointEngineerId",{
        engineerId: ""
    });
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {
      ElMessage.error(response.message);
      }
    }
  } catch (error) {
    console.error('发生错误:', error);
  }
};
 // 指定流程卡
 const brokes = async(row) => {  
  try {
@@ -573,7 +626,7 @@
      temperingtotal.value = response.data.length
      let totalCount = 0;  
      response.data.forEach(item => { 
        totalCount += item.count || 0;
        totalCount += item.count2 || 0;
      });
      glasstotal.value = totalCount;
    } else {
@@ -642,6 +695,10 @@
const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  //当前指定工程
  if(data.bigStorageCageDetailsOutTask!=null){
    temperingengineerId.value=data.temperingengineerId[0];
  }
  // 更新 tableData 的数据
  if(data.bigStorageCageDetailsOutTask!=null){
    tableDatac.value = data.bigStorageCageDetailsOutTask[0]
@@ -1465,6 +1522,18 @@
              </el-form-item>
              </div>
          </el-col>
          <el-col :span="4">
              <div id="dt" style="font-size: 15px;">
              <el-form-item :label="$t('当前指定工程')"  style="width: 14vw">
                {{ temperingengineerId }}
              </el-form-item>
              </div>
          </el-col>
          <el-col :span="4">
              <div id="dt" style="font-size: 15px;">
                <el-button size="mini" type="text" plain @click="broked()">{{ $t('取消指定') }}</el-button>
              </div>
          </el-col>
        </el-row>
      </el-form>
    </div>
@@ -1478,7 +1547,7 @@
          <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="250">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="brokee(scope.row)">{{ $t('searchOrder.specifytempering') }}</el-button>
              <el-button size="mini" type="text" plain @click="brokee(scope.row)">{{ $t('searchOrder.specifyengineerid') }}</el-button>
              <el-button size="mini" type="text" plain @click="brokek(scope.row)">{{ $t('searchOrder.specifyengineerid') }}</el-button>
            </template>
            
        </el-table-column>
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -512,25 +512,34 @@
        </el-dialog>
        <el-dialog v-model="dialogFormVisibleaDownGlasss" top="2vh" width="97%" :title="$t('人工下片信息')">
          <div style="display:flex;justify-content: space-around;">
            <el-card style="display: flex; justify-content: center; align-items: center; width:800px; height: 800px;">
            <el-card style="display: flex; justify-content: center; align-items: center; width:800px; height: 800px;position: relative;">
              <div
                :style="{ width: takeGlass.width + 'px', height: takeGlass.height + 'px', backgroundColor: '#e1f3d8', transform: 'scale(' + 800 / (takeGlass.width > takeGlass.height ? takeGlass.width : takeGlass.height) + ')' }">
                <div style="font-size: 50px; text-align: center;">
                :style="{  width: takeGlass.width + 'px', height: takeGlass.height + 'px', backgroundColor: '#e1f3d8', transform: 'scale(' + 800 / (takeGlass.width > takeGlass.height ? takeGlass.width : takeGlass.height) + ')' }">
              </div>
              <div style="font-size: 50px; text-align: center;position: absolute;top:0px;left:200px;">
                  <div>人工下片当前玻璃信息</div>
                  <div>{{ takeGlass.flowCardId }}</div>
                  <div>{{ takeGlass.layer }}</div>
                  <div>{{ takeGlass.glassId }}</div>
                  <div>{{ takeGlass.width }}</div>
                  <div>{{ takeGlass.height }}</div>
                </div>
              </div>
            </el-card>
            <el-card style="display: flex; justify-content: center; align-items: center; width: 800px; height: 800px;">
            <el-card style="display: flex; justify-content: center; align-items: center; width: 800px; height: 800px;position: relative;">
              <div
                :style="{ width: scanGlass.width + 'px', height: scanGlass.height + 'px', backgroundColor: '#e1f3d8', transform: 'scale(' + 800 / (scanGlass.width > scanGlass.height ? scanGlass.width : scanGlass.height) + ')' }">
                <div style="font-size: 50px; text-align: center;">
              </div>
              <div style="font-size: 50px; text-align: center;position: absolute;top:0px;left:200px;">
                  <div>扫码枪当前玻璃信息</div>
                  <div>{{ scanGlass.flowCardId }}</div>
                  <div>{{ scanGlass.layer }}</div>
                  <div>{{ scanGlass.glassId }}</div>
                  <div>{{ scanGlass.width }}</div>
                  <div>{{ scanGlass.height }}</div>
                </div>
              </div>
            </el-card>
          </div>
        </el-dialog>
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/AsyncTaskExecutorConfig.java
File was deleted
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java
@@ -106,7 +106,7 @@
    /**
     * 是否合并
     */
    private Integer merge;
    private Integer combine;
    /**
     * 旋转角度
     */
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -40,7 +40,7 @@
        List<OptimizeGlassinfo> optimizeGlassinfos = null;
        if (engineeringId != null) {
            optimizeGlassinfos = optimizeProjectMapper.selectJoinList(OptimizeGlassinfo.class, new MPJQueryWrapper<OptimizeProject>()
                    .select("b.process_id,t.glass_type,b.o_width,b.o_height,t.glass_thickness,b.order_sort,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,c.x_axis,c.y_axis,b.project_no,b.glass_id,c.rotate_angle,d.merge")
                    .select("b.process_id,t.glass_type,b.o_width,b.o_height,t.glass_thickness,b.order_sort,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,c.x_axis,c.y_axis,b.project_no,b.glass_id,c.rotate_angle,d.merge as combine")
                    .leftJoin("optimize_detail b on t.project_no=b.project_no")
                    .leftJoin("optimize_heat_detail c on c.project_no=t.project_no and b.heat_layout_id=c.layout_id and b.heat_layout_sort=c.sort")
                    .leftJoin("flow_card d on d.process_id=b.process_id and d.technology_number=b.layer and  d.order_number=b.order_sort ")
@@ -73,7 +73,7 @@
                glassInfo.setYCoordinate(map.getYAxis());
                glassInfo.setAngle(map.getRotateAngle());
                glassInfo.setGlassId(map.getGlassId());
                glassInfo.setCombine(map.getMerge());
                glassInfo.setCombine(map.getCombine());
                // 将映射后的对象添加到结果列表中
                resultList.add(glassInfo);
            }
@@ -91,9 +91,14 @@
    @Override
    public int getGlassInfoCountByFlowCardId(String flowCardId, int layer) {
        return baseMapper.selectCount(new QueryWrapper<GlassInfo>().lambda()
                .eq(GlassInfo::getFlowCardId, flowCardId)
                .eq(GlassInfo::getLayer, layer));
        if (layer == 0) {
            return baseMapper.selectCount(new QueryWrapper<GlassInfo>().lambda()
                    .eq(GlassInfo::getFlowCardId, flowCardId));
        } else {
            return baseMapper.selectCount(new QueryWrapper<GlassInfo>().lambda()
                    .eq(GlassInfo::getFlowCardId, flowCardId)
                    .eq(GlassInfo::getLayer, layer));
        }
    }
@@ -130,9 +135,6 @@
        log.info("result666: {}", result);
        return result;
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
@@ -145,7 +145,14 @@
        }else{
            return Result.build(200, "指定流程卡成功", 1);
        }
    }
    @ApiOperation("指定工程")
    @PostMapping("/appointEngineerId")
    public Result appointEngineerId(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
        bigStorageCageDetailsService.appointEngineerId(bigStorageCageDetails.getEngineerId());
        return Result.build(200, "修改成功", 1);
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -76,4 +76,6 @@
    void updateBySlot(List<UpdateBigStorageCageDTO> glassList, int state);
    String temperingSwitch(Boolean flag);
    void appointEngineerId(String engineerId);
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -404,4 +404,9 @@
        redisUtil.setCacheObject("temperingSwitch", flag);
        return "success";
    }
    @Override
    public void appointEngineerId(String engineerId){
        redisUtil.setCacheObject("temperingengineerId", engineerId);
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
@@ -39,50 +39,61 @@
    private RedisUtil redisUtil;
    private JSONObject jsonObject = new JSONObject();
    public void queryDataSource1() throws InterruptedException {
        List<Double> carPostion=new ArrayList<>();
        List<Double> carPostion = new ArrayList<>();
        carPostion.add(0.25);
        carPostion.add(0.5);
        jsonObject.append("carPostion",carPostion);
        jsonObject.append("carPostion", carPostion);
        //界面展示笼子信息
        jsonObject.append("bigStorageCageInfos", bigStorageCageService.querybigStorageCageDetail());
        //进片任务数据
        List<BigStorageCageDetails> bigStorageCageDetailsFeedTask=bigStorageCageDetailsService.selectFeedTask();
        List<BigStorageCageDetails> bigStorageCageDetailsFeedTask = bigStorageCageDetailsService.selectFeedTask();
        jsonObject.append("bigStorageCageDetailsFeedTask", bigStorageCageDetailsFeedTask);
        //出片任务数据
        List<BigStorageCageDetails> bigStorageCageDetailsOutTask=bigStorageCageDetailsService.selectOutTask();
        List<BigStorageCageDetails> bigStorageCageDetailsOutTask = bigStorageCageDetailsService.selectOutTask();
        jsonObject.append("bigStorageCageDetailsOutTask", bigStorageCageDetailsOutTask);
        //理片笼使用情况
        List<Map<String, Object>> bigStorageCageUsage=bigStorageCageService.selectBigStorageCageUsage();
        List<Map<String, Object>> bigStorageCageUsage = bigStorageCageService.selectBigStorageCageUsage();
        jsonObject.append("bigStorageCageUsage", bigStorageCageUsage);
        //理片笼表格信息
        jsonObject.append("bigStorageCageInfo", bigStorageCageService.querybigStorageCageDetailAll());
        //钢化开关
        boolean temperingSwitch=false;
        if(redisUtil.getCacheObject("temperingSwitch")==null){
        boolean temperingSwitch = false;
        if (redisUtil.getCacheObject("temperingSwitch") == null) {
            redisUtil.setCacheObject("temperingSwitch", false);
        }else{
            temperingSwitch=redisUtil.getCacheObject("temperingSwitch");
        } else {
            temperingSwitch = redisUtil.getCacheObject("temperingSwitch");
        }
        jsonObject.append("temperingSwitch", temperingSwitch);
        //当前指定工程
        String temperingengineerId = "";
        if (redisUtil.getCacheObject("temperingengineerId") == null) {
            redisUtil.setCacheObject("temperingengineerId", temperingengineerId);
        } else {
            temperingengineerId = redisUtil.getCacheObject("temperingengineerId");
        }
        jsonObject.append("temperingengineerId", temperingengineerId);
    }
    public void queryDataSource2() throws InterruptedException {
        //出片队列
        List<TemperingGlassInfo> temperingGlassInfoList= temperingGlassInfoService.list(
        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(
                new LambdaQueryWrapper<TemperingGlassInfo>()
                .inSql(TemperingGlassInfo::getEngineerId,"select distinct engineer_id from tempering_glass_info where state<4")
                        .inSql(TemperingGlassInfo::getEngineerId, "select distinct engineer_id from tempering_glass_info where state<4")
        );
        jsonObject.append("temperingGlassInfoList", temperingGlassInfoList);
    }
    /**
     * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成)
     * fixedDelay : 上一个调用结束后再次调用的延时
@@ -117,13 +128,13 @@
    }
    @Scheduled(fixedDelay = 1000)
    public void temperingIsRun(){
    public void temperingIsRun() {
        JSONObject jsonObject = new JSONObject();
        //进片任务数据
        List<BigStorageCageDetails> bigStorageCageDetailsFeedTask=bigStorageCageDetailsService.selectFeedTask();
        List<BigStorageCageDetails> bigStorageCageDetailsFeedTask = bigStorageCageDetailsService.selectFeedTask();
        jsonObject.append("bigStorageCageDetailsFeedTask", bigStorageCageDetailsFeedTask);
        //出片任务数据
        List<BigStorageCageDetails> bigStorageCageDetailsOutTask=bigStorageCageDetailsService.selectOutTask();
        List<BigStorageCageDetails> bigStorageCageDetailsOutTask = bigStorageCageDetailsService.selectOutTask();
        jsonObject.append("bigStorageCageDetailsOutTask", bigStorageCageDetailsOutTask);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("isRun");
        if (sendwServer != null) {
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -317,21 +317,23 @@
                //玻璃到齐包括已出片的
                //到齐,将玻璃小片数据存入钢化小片表,逻辑生成出片任务  结束
                for (TemperingLayoutDTO item : temperingLayoutDTOList) {
                    List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
                            .selectAll(GlassInfo.class)
                            .select("-1 as state")
                            .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
                            .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
                            .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
                            .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId())
                            .eq(GlassInfo::getEngineerId, item.getEngineerId())
                            .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
                    if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
                        temperingGlassInfoService.saveBatch(temperingGlassInfos);
                        computeOutMoreGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
                        Date endDate = new Date();
                        log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime());
                        return;
                    if(redisUtil.getCacheObject("temperingengineerId").equals(item.getEngineerId())){
                        List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
                                .selectAll(GlassInfo.class)
                                .select("-1 as state")
                                .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
                                .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
                                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
                                .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId())
                                .eq(GlassInfo::getEngineerId, item.getEngineerId())
                                .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
                        if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
                            temperingGlassInfoService.saveBatch(temperingGlassInfos);
                            computeOutMoreGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
                            Date endDate = new Date();
                            log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime());
                            return;
                        }
                    }
                }
            }
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
@@ -12,6 +12,8 @@
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
import com.mes.job.PlcStorageCageTask;
import com.mes.pp.entity.ReportingWork;
import com.mes.pp.entity.ReportingWorkDetail;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
@@ -20,6 +22,12 @@
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -183,4 +191,62 @@
        log.info("在尺寸表中获取玻璃信息{}", edgGlassTaskInfoList);
    }
    @Test
    public void ca(){
        try {
            // 目标系统的API URL
            String url = "http://192.168.3.119:8086/reportingWork/mesSave";
            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            // 设置请求方法和请求头
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "application/json; utf-8");
            con.setRequestProperty("Accept", "application/json");
            con.setDoOutput(true);
            // 创建消息体
            String jsonInputString = "小廖";
            ReportingWork reportingWork=new ReportingWork();
            reportingWork.setOrderId("NG24042301");
            reportingWork.setProductionId("NG24042301A");
            reportingWork.setProcessId("NG24042301A001");
            reportingWork.setDeviceName("磨边机");
            reportingWork.setThisProcess("切割");
            reportingWork.setNextProcess("磨边");
            reportingWork.setThisCompletedQuantity(1);
            reportingWork.setThisWornQuantity(0);
            reportingWork.setClasses("早班");
            reportingWork.setReportingWorkTime(LocalDateTime.now());
            reportingWork.setTeamsGroupsName("小廖一号");
            reportingWork.setCreator("小廖");
            ReportingWorkDetail reportingWorkDetail=new ReportingWorkDetail();
            reportingWorkDetail.setTechnologyNumber(1);
            reportingWorkDetail.setOrderNumber(1);
            reportingWorkDetail.setCompletedQuantity(1);
            reportingWorkDetail.setBreakageQuantity(0);
            // 发送请求
            try (OutputStream os = con.getOutputStream()) {
                byte[] input = jsonInputString.getBytes("utf-8");
                os.write(input, 0, input.length);
            }
            // 获取响应码
            int responseCode = con.getResponseCode();
            System.out.println("Response Code : " + responseCode);
            // 获取响应内容
            try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                System.out.println("Response Body: " + response.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/UnLoadGlassApplication.java
@@ -5,6 +5,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
@@ -19,6 +20,7 @@
@EnableDiscoveryClient
@MapperScan(basePackages = "com.mes.*.mapper")
@EnableScheduling
@EnableAsync
public class UnLoadGlassApplication {
    public static void main(String[] args) {
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
@@ -151,7 +151,6 @@
        QueryWrapper<Damage> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("process_id", flowCardId);
        queryWrapper.eq("technology_number", layer);
        int otherNumber = damageservice.count(queryWrapper);
        UpdateWrapper<DownWorkstation> updateWrapper = new UpdateWrapper<>();
        updateWrapper.set("total_quantity", glassInfoCount)
@@ -160,7 +159,6 @@
                .set("other_number", otherNumber)
                .eq("workstation_id", workstationId);
//        .eq("id", workstationId);
        this.update(updateWrapper);
    }
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/BarcodeReadThread.java
File was deleted
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -81,7 +81,6 @@
    @Scheduled(fixedDelay = 300)
    @Async
    public void plcHomeEdgTask() {
        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
        String requestWord = plcParameterObject.getPlcParameter("requestWord").getValue();
@@ -98,7 +97,6 @@
        log.info("1、获取到的请求字为:{},获取到的扫描ID为:{},获取到的确认字为:{},获取到的出片状态分别为:g06:{}、g08:{}、g11:{}、g13:{},当前格子号为:{}",
                requestWord, glassIdeValue, confirmationWrodValue, out06Glassstate, out08Glassstate, out11Glassstate, out13Glassstate, currentSlot);
        if ("0".equals(requestWord)) {
            if ("0".equals(confirmationWrodValue)) {
                log.info("2、获取到的请求字为0,且确认字为0,不执行任务");
@@ -131,7 +129,6 @@
    }
    @Scheduled(fixedDelay = 300)
    @Async
    public void plcShelfFull() {
        List<DownWorkstation> list = downGlassInfoService.queryWorkStationIsFull();
        if (CollectionUtils.isNotEmpty(list)) {
@@ -142,7 +139,6 @@
    }
    @Scheduled(fixedDelay = 1000)
    @Async
    public void dealDamageTask() {
        Date startDate = new Date();
        log.info("下片破损玻璃清除任务开始执行时间:{}", startDate);
@@ -187,7 +183,6 @@
     * 更新已绑定工位流程卡的破损/拿走的数量信息
     */
    @Scheduled(fixedDelay = 1000)
    @Async
    public void updateWorkStationOtherCount() {
        Date startDate = new Date();
        log.info("下片破更新损玻璃数量任务开始执行时间:{}", startDate);
@@ -230,9 +225,16 @@
        } else {
            log.info("该玻璃尺寸非人工下片");
            //获取该玻璃的流程卡是否已绑定架子
            DownWorkstation one = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
                    .eq(DownWorkstation::getLayer, glassInfo.getLayer())
                    .eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId()));
            DownWorkstation one;
            if (glassInfo.getCombine() != 0) {
                one = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
                        .eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId()));
            } else {
                one = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
                        .eq(DownWorkstation::getLayer, glassInfo.getLayer())
                        .eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId()));
            }
            //是否已经绑定   true:已绑定    false:未绑定
            Boolean isBind = Boolean.FALSE;
            if (null != one) {
@@ -247,8 +249,12 @@
                if (CollectionUtils.isNotEmpty(list)) {
                    log.info("有空架子,将流程卡与架子好绑定,执行进片任务 结束");
                    //绑定流程卡
                    downWorkstationService.updateFlowCardIdAndCount(glassInfo.getFlowCardId(), list.get(0).getWorkstationId(), glassInfo.getLayer());
//                    downWorkstationService.updateFlowCardIdAndCount(glassInfo.getFlowCardId(), list.get(0).getId(), glassInfo.getLayer());
                    if (glassInfo.getCombine() == 0) {
                        downWorkstationService.updateFlowCardIdAndCount(glassInfo.getFlowCardId(), list.get(0).getWorkstationId(), glassInfo.getLayer());
                    } else {
                        downWorkstationService.updateFlowCardIdAndCount(glassInfo.getFlowCardId(), list.get(0).getWorkstationId(), 0);
                    }
//                      downWorkstationService.updateFlowCardIdAndCount(glassInfo.getFlowCardId(), list.get(0).getId(), glassInfo.getLayer());
                    checkFlag = Boolean.TRUE;
                }
            }
@@ -298,8 +304,8 @@
        DownStorageCageDetails downStorageCageDetails = new DownStorageCageDetails();
        BeanUtils.copyProperties(glassInfo, downStorageCageDetails);
        //当需要合并落架时不绑定层号
        if(glassInfo.getCombine()==0){
            downStorageCageDetails.setLayer(null);
        if (glassInfo.getCombine() != 0) {
            downStorageCageDetails.setLayer(0);
        }
        downStorageCageDetails.setState(Const.GLASS_STATE_IN);
        downStorageCageDetails.setSlot(nearestEmpty.getSlot());
@@ -326,8 +332,8 @@
            GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
            BeanUtils.copyProperties(glassInfo, cageDetails);
            //当需要合并落架时不绑定层号
            if(glassInfo.getCombine()==0){
                cageDetails.setLayer(null);
            if (glassInfo.getCombine() != 0) {
                cageDetails.setLayer(0);
            }
            //获取当前笼子空格信息
            DownStorageCage empty = downStorageCageService.selectCacheEmpty(Integer.parseInt(currentSlot), Boolean.TRUE);
@@ -345,6 +351,7 @@
        //2、08台空闲,先走扔工下片或2号机械臂,无玻璃出片 在走1号机械臂
        //机械臂被禁用的情况下不能继续向禁用的机械臂放玻璃
        Boolean flag08 = "1".equals(out08Glassstate) ? Boolean.TRUE : Boolean.FALSE;
        flag08 = true;
        if (!flag08) {
            generateTaskByShelf(glassStatus06, glassStatus11, flag08, glassStatus13, tempList, cageDetails, glassId);
        } else {
@@ -445,6 +452,7 @@
                    Map<String, List<DownWorkstation>> listMap = downWorkstationList.stream()
                            .filter(item -> StringUtils.isNotBlank(item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
                    //过滤筛选获取架子上对应流程卡+层数的笼子内的玻璃信息
                    list = tempList.stream().filter(item -> listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
                    if (CollectionUtils.isEmpty(list) && flag08 && !"2".equals(glassStatus13)) {
                        list = tempList.stream().filter(item -> {
@@ -634,7 +642,8 @@
            if (downStorageCageDetails.getWidth() > maxWidth || downStorageCageDetails.getHeight() > maxHeight) {
                endCell = Const.G13_WORK_STATION;
            } else {
                DownWorkstation workstation = downWorkstationService.getOne(new LambdaUpdateWrapper<DownWorkstation>()
                DownWorkstation workstation;
                workstation = downWorkstationService.getOne(new LambdaUpdateWrapper<DownWorkstation>()
                        .eq(DownWorkstation::getFlowCardId, downStorageCageDetails.getFlowCardId()).eq(DownWorkstation::getLayer, downStorageCageDetails.getLayer()));
                endCell = workstation.getWorkstationId();
            }
@@ -652,12 +661,28 @@
        DownGlassInfo downGlassInfo = new DownGlassInfo();
        BeanUtils.copyProperties(downStorageCageDetails, downGlassInfo);
        //落架片序
        downGlassInfo.setSequence(downGlassInfoService.queryMaxSequence(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer()));
        LambdaQueryWrapper<DownGlassInfo> wrapper = new LambdaQueryWrapper<DownGlassInfo>();
        wrapper.eq(DownGlassInfo::getFlowCardId, downGlassInfo.getFlowCardId())
                .orderByDesc(DownGlassInfo::getSequence)
                .last("limit 1");
        if (downStorageCageDetails.getLayer() != 0) {
            wrapper.eq(DownGlassInfo::getLayer, downGlassInfo.getLayer());
        }
//        downGlassInfo.setSequence(downGlassInfoService.queryMaxSequence(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer()));
        int k = 0;
        DownGlassInfo downGlassInfo1 = downGlassInfoService.getOne(wrapper);
        if (downGlassInfo1 != null) {
            k = 1;
        } else {
            k = 1;
        }
        downGlassInfo.setSequence(k);
        downGlassInfo.setWorkStationId(endCell);
        downGlassInfo.setGmtCreate(new Date());
        downGlassInfoService.save(downGlassInfo);
        //生成任务信息
        GlassInfo glassInfo = new GlassInfo();
        downStorageCageDetails.setLayer(0);
        BeanUtils.copyProperties(downStorageCageDetails, glassInfo);
        //删除理片笼表拿走/破损数据数据
        damageService.deleteByGlassId(glassInfo.getGlassId());
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
@@ -51,13 +51,6 @@
    private DownGlassTaskService downGlassTaskService;
    @Autowired
    private GlassInfoService glassInfoService;
    private final ExecutorService scanCodeThreadPool = new ThreadPoolExecutor(
            10, // core pool size
            20, // maximum pool size
            60L, TimeUnit.SECONDS,
            new LinkedBlockingQueue<>()
    );
    private final ExecutorService isRunThreadPool = Executors.newFixedThreadPool(5);
    @Value("${mes.scan.ip}")
    private String scanIp;
@@ -183,7 +176,6 @@
        );
        jsonObject4.append("takeGlass", takeGlass);
        ArrayList<WebSocketServer> sendwServer4 = WebSocketServer.sessionMap.get("unloadglass");
        if (sendwServer4 != null) {
            for (WebSocketServer webserver : sendwServer4) {
@@ -196,28 +188,24 @@
    @Scheduled(fixedDelay = 1000)
    public void isRun() {
        isRunThreadPool.execute(() -> {
            JSONObject jsonObject = new JSONObject();
            //正在进行的任务
            List<DownWorkstation> downWorkstation = downWorkstationService.getoneDownWorkstations(1, 6);
            jsonObject.append("downWorkstation", downWorkstation);
            List<DownGlassTask> downGlassTask = downGlassTaskService.selectOutTaskCache();
            jsonObject.append("downGlassTask", downGlassTask);
            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unLoadGlassIsRun");
            if (sendwServer != null) {
                for (WebSocketServer webserver : sendwServer) {
                    if (webserver != null) {
                        webserver.sendMessage(jsonObject.toString());
                    } else {
                        log.info("unLoadGlassIsRun is closed");
                    }
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        List<DownWorkstation> downWorkstation = downWorkstationService.getoneDownWorkstations(1, 6);
        jsonObject.append("downWorkstation", downWorkstation);
        List<DownGlassTask> downGlassTask = downGlassTaskService.selectOutTaskCache();
        jsonObject.append("downGlassTask", downGlassTask);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unLoadGlassIsRun");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
                    webserver.sendMessage(jsonObject.toString());
                } else {
                    log.info("unLoadGlassIsRun is closed");
                }
            }
        });
        }
    }
    @Async
    @Scheduled(fixedDelay = Long.MAX_VALUE)
    public void scanCodeTask() {
        JSONObject jsonObject = new JSONObject();
@@ -226,54 +214,25 @@
            try (Socket socket = new Socket(scanIp, scanPort);
                 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
                // 接收服务器响应
//                socket.setSoTimeout(1000);
                log.info("等待扫码中......");
                    String glassId = in.readLine();
                    log.info("扫描到的玻璃id:{}", glassId);
                    List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unloadglass");
                    if (CollectionUtils.isNotEmpty(sendwServer)) {
                        //按照玻璃id获取玻璃信息返回给前端界面,具体需要哪些数据待确认
                        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                                .eq(GlassInfo::getGlassId, glassId).last("limit 1"));
                        if (null == glassInfo) {
                            log.info("按照玻璃id:{},无法找到玻璃信息", glassId);
                        } else {
                            jsonObject.append("scanGlass",glassInfo);
                            sendwServer.get(0).sendMessage(jsonObject.toString());
                String glassId = in.readLine();
                log.info("扫描到的玻璃id:{}", glassId);
                List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unloadglass");
                if (CollectionUtils.isNotEmpty(sendwServer)) {
                    //按照玻璃id获取玻璃信息返回给前端界面,具体需要哪些数据待确认
                    GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                            .eq(GlassInfo::getGlassId, glassId).last("limit 1"));
                    if (null == glassInfo) {
                        log.info("按照玻璃id:{},无法找到玻璃信息", glassId);
                    } else {
                        for (WebSocketServer webserver : sendwServer) {
                                jsonObject.append("scanGlass", glassInfo);
                                webserver.sendMessage(jsonObject.toString());
                        }
                    }
                }
            } catch (Exception exception) {
                log.info("读取异常,原因为{}", exception.getMessage());
            }
        }
    }
    @Scheduled(fixedDelay = Long.MAX_VALUE)
    public void scanCodeTaskCopy()
    {
        log.info("扫描任务已启动");
        try {
            BarcodeReadThread brt=new BarcodeReadThread(scanIp,scanPort,this);
            brt.start();
        }catch (Exception exception) {
            log.info("扫描任务启动异常,原因为{}", exception.getMessage());
        }
    }
    //socket读取到消息后会调用这个函数
    public void barcodeCheckin(String response)
    {
        log.info("扫描到的玻璃id:{}", response);
        List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("scanCode");
        if (CollectionUtils.isNotEmpty(sendwServer)) {
            //按照玻璃id获取玻璃信息返回给前端界面,具体需要哪些数据待确认
            GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                    .eq(GlassInfo::getGlassId, response).last("limit 1"));
            if (null == glassInfo) {
                log.info("按照玻璃id:{},无法找到玻璃信息", response);
            } else {
                sendwServer.get(0).sendMessage(glassInfo.toString());
            }
        }
    }
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
spring:
  profiles:
    active: dev
    active: cz
  application:
    name: unLoadGlass
  liquibase:
@@ -29,5 +29,5 @@
  throughHeight: 2500
  threshold: 5      #下片的最大阈值
  scan:
    ip: 169.254.171.199
    ip: 192.168.30.199
    port: 5000