wu
2024-04-23 0c1eda923c60852f9652f1b9444230c256dad178
Merge branch 'master' of http://10.153.19.25:10101/r/CanadaMes

# Conflicts:
# springboot-vue3/src/main/java/com/example/springboot/component/ModuleA.java
# springboot-vue3/src/main/java/com/example/springboot/component/ModuleB.java
# springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
11个文件已修改
3个文件已添加
4个文件已删除
7671 ■■■■■ 已修改文件
.vscode/launch.json 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/home/index.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/.idea/dbnavigator.xml 413 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/effective-pom.xml 6191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/AuthorityApplication.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/common/MessageReceiver.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/common/MessageSender.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/common/RabbitConfig.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/MessageQueueReader.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 306 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/RabbitMQUtils.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/S7controlalbia.java 456 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/MessageController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/OutSliceServive.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/resources/application.properties 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vscode/launch.json
@@ -6,6 +6,20 @@
    "configurations": [
      {
        "type": "java",
        "name": "ModuleA",
        "request": "launch",
        "mainClass": "com.example.springboot.component.ModuleA",
        "projectName": "springboot-vue3"
      },
      {
        "type": "java",
        "name": "ModuleB",
        "request": "launch",
        "mainClass": "com.example.springboot.component.ModuleB",
        "projectName": "springboot-vue3"
      },
      {
        "type": "java",
        "name": "MyGenerator",
        "request": "launch",
        "mainClass": "MyGenerator",
CanadaMes-ui/src/lang/locales/en-US.json
@@ -1,6 +1,6 @@
{
  "Clear":"Clear",
  "ip":"192.168.10.21",
  "ip":"localhost",
  "systemTitle": "Login System",
  "usernamePlaceholder": "Please enter username",
  "passwordPlaceholder": "Please enter password",
@@ -293,7 +293,7 @@
  "Space (Pieces)":"Space (Pieces)",
  "This glass is already in the cage":"This glass is already in the cage",
  "Enter the Order No":"Enter the Order No",
  "OrderInfo":"OrderInfo",
  "Order Info":"Order Info",
  "Query":"Query",
  "permission update":"permission update",
  "query was successful":"query was successful",
@@ -361,6 +361,7 @@
  "Please enter the correct glassID":"Please enter the correct glassID",
  "Switch":"Switch",
  "This frame has glass that is currently outing":"This frame has glass that is currently outing",
  "The slot is disabled":"The slot is disabled",
    "ServoManualone": {
      "A01 所在格子": "A01 Current Grid",
      "数量": "Quantity",
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -1,6 +1,6 @@
{
  "Clear":"清除",
  "ip":"192.168.10.21",
  "ip":"localhost",
  "systemTitle": "登录系统",
  "usernamePlaceholder": "请输入用户名",
  "passwordPlaceholder": "请输入密码",
@@ -284,7 +284,7 @@
  "Space (Pieces)": "空间(片数)",
  "This glass is already in the cage": "笼子里已有此玻璃",
  "Enter the Order No": "请输入订单id",
  "OrderInfo": "订单信息",
  "Order Info": "订单信息",
  "Query": "查询",
  "permission update": "权限编辑",
  "query was successful": "查询成功",
@@ -354,6 +354,7 @@
  "Please enter the correct glassID":"请输入正确的玻璃ID",
  "Switch":"切换",
  "This frame has glass that is currently outing":"此铝框有正在出片的玻璃",
  "The slot is disabled":"格子被禁用",
  "langparameter": {
    "conveyor Velocity(Auto FAST)": "D01-D06 皮带输送自动快速",
    "conveyor Velocity(Auto SLOW)": "D01-D06 皮带输送自动慢速",
CanadaMes-ui/src/views/home/index.vue
@@ -256,7 +256,7 @@
                    :class="ManuallyInfeedGlass == true ? 'hide' : ''">
                    {{ $t('Manually Infeed Glass') }}</el-button>
                <el-button type="primary" @click="showform2()" :disabled="OrderInfo"
                    :class="OrderInfo == true ? 'hide' : ''">{{ $t('OrderInfo')
                    :class="OrderInfo == true ? 'hide' : ''">{{ $t('Order Info')
                    }}</el-button>
                <el-button type="primary" @click="showform6()" :disabled="OutingQueue"
                    :class="OutingQueue == true ? 'hide' : ''">
@@ -588,7 +588,7 @@
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible4" :title="$t('OrderInfo')" top="5vh">
        <el-dialog :visible.sync="dialogFormVisible4" :title="$t('Order Info')" top="5vh">
            <el-input style="width:15%;" :placeholder="$t('Enter the Order No')" v-model="orderid"></el-input>
            <el-button type="primary" @click="selectglassinfo()">{{ $t('Query') }}</el-button>
            <el-table :data="GlassInfo.slice((currentPage - 1) * pagesize, currentPage * pagesize)
@@ -743,17 +743,9 @@
            <el-button type="primary" @click="isAllowQueueState()" :disabled="!this.isAllowReordering">{{ this.isAllowQueue
                == true ? $t('Stop') : $t('Start')
            }}</el-button>
            <!-- {{  $t('Sorting State') }}:
            {{
                this.isAllowReordering == true ? $t('Not Allow') : $t('Allow')
            }}
            <el-button type="primary" @click="isAllowReorderings()" :disabled="this.isAllowQueue">{{
                this.isAllowReordering == true ? $t('Allow') : $t('Not Allow')
            }}</el-button> -->
            <!-- <el-input style="width:15%;" :placeholder="$t('Enter the Frame No')" v-model="framebarcode"></el-input> -->
            <el-button type="primary" @click="showform7()">{{ $t('Add') }}</el-button>
            <label style="background-color:yellow;font-size: 23px;" for="">
                {{ isQueueWarning == true ? $t('The cage is disabled') : "" }}
                {{ isQueueWarning == true ? $t('The slot is disabled') : "" }}
            </label>
            <div style="display:flex;">
                <div style="width:70%;">
@@ -1025,7 +1017,7 @@
                        const specialChars = /[^\w\s]/g;
                        this.CurrrentGlassId = obj.CurrrentGlassId[0].replace(specialChars, "");
                    }
                    //查询当前铝框信息
                    this.CurrentFrame = obj.CurrentFrame;
@@ -1051,7 +1043,6 @@
                            this.InsertQueueGlass(1);
                        }
                    }
                    // if (obj.alarmmg[0].length > 0) {
@@ -1124,8 +1115,9 @@
                    if (obj.form3 != null && obj.form3 != "" && obj.state[0] == 0) {
                        this.loadglassheight1 = 70;
                        if (this.form5.glassId != obj.form3[0].glassId) {
                        if (this.form5.glassId != obj.form3[0].glassId&&this.ManuallyInfeedGlass==false) {
                            this.showform3();
                        }
                        this.form5 = obj.form3[0];
                        this.glassid1 = "";
@@ -1516,6 +1508,7 @@
                    if (res.data.message == 200) {
                        this.$message.success(this.$t('Operation successful'));
                        this.dialogFormVisible = false;
                        this.glassid="";
                    }
                    else if (res.data.message == 400) {
                        this.$message.error(this.$t('The glass size is not within the range'));
springboot-vue3/.idea/dbnavigator.xml
New file
@@ -0,0 +1,413 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="DBNavigator.Project.DDLFileAttachmentManager">
    <mappings />
    <preferences />
  </component>
  <component name="DBNavigator.Project.DatabaseFileManager">
    <open-files />
  </component>
  <component name="DBNavigator.Project.Settings">
    <connections />
    <browser-settings>
      <general>
        <display-mode value="TABBED" />
        <navigation-history-size value="100" />
        <show-object-details value="false" />
      </general>
      <filters>
        <object-type-filter>
          <object-type name="SCHEMA" enabled="true" />
          <object-type name="USER" enabled="true" />
          <object-type name="ROLE" enabled="true" />
          <object-type name="PRIVILEGE" enabled="true" />
          <object-type name="CHARSET" enabled="true" />
          <object-type name="TABLE" enabled="true" />
          <object-type name="VIEW" enabled="true" />
          <object-type name="MATERIALIZED_VIEW" enabled="true" />
          <object-type name="NESTED_TABLE" enabled="true" />
          <object-type name="COLUMN" enabled="true" />
          <object-type name="INDEX" enabled="true" />
          <object-type name="CONSTRAINT" enabled="true" />
          <object-type name="DATASET_TRIGGER" enabled="true" />
          <object-type name="DATABASE_TRIGGER" enabled="true" />
          <object-type name="SYNONYM" enabled="true" />
          <object-type name="SEQUENCE" enabled="true" />
          <object-type name="PROCEDURE" enabled="true" />
          <object-type name="FUNCTION" enabled="true" />
          <object-type name="PACKAGE" enabled="true" />
          <object-type name="TYPE" enabled="true" />
          <object-type name="TYPE_ATTRIBUTE" enabled="true" />
          <object-type name="ARGUMENT" enabled="true" />
          <object-type name="DIMENSION" enabled="true" />
          <object-type name="CLUSTER" enabled="true" />
          <object-type name="DBLINK" enabled="true" />
        </object-type-filter>
      </filters>
      <sorting>
        <object-type name="COLUMN" sorting-type="NAME" />
        <object-type name="FUNCTION" sorting-type="NAME" />
        <object-type name="PROCEDURE" sorting-type="NAME" />
        <object-type name="ARGUMENT" sorting-type="POSITION" />
        <object-type name="TYPE ATTRIBUTE" sorting-type="POSITION" />
      </sorting>
      <default-editors>
        <object-type name="VIEW" editor-type="SELECTION" />
        <object-type name="PACKAGE" editor-type="SELECTION" />
        <object-type name="TYPE" editor-type="SELECTION" />
      </default-editors>
    </browser-settings>
    <navigation-settings>
      <lookup-filters>
        <lookup-objects>
          <object-type name="SCHEMA" enabled="true" />
          <object-type name="USER" enabled="false" />
          <object-type name="ROLE" enabled="false" />
          <object-type name="PRIVILEGE" enabled="false" />
          <object-type name="CHARSET" enabled="false" />
          <object-type name="TABLE" enabled="true" />
          <object-type name="VIEW" enabled="true" />
          <object-type name="MATERIALIZED VIEW" enabled="true" />
          <object-type name="INDEX" enabled="true" />
          <object-type name="CONSTRAINT" enabled="true" />
          <object-type name="DATASET TRIGGER" enabled="true" />
          <object-type name="DATABASE TRIGGER" enabled="true" />
          <object-type name="SYNONYM" enabled="false" />
          <object-type name="SEQUENCE" enabled="true" />
          <object-type name="PROCEDURE" enabled="true" />
          <object-type name="FUNCTION" enabled="true" />
          <object-type name="PACKAGE" enabled="true" />
          <object-type name="TYPE" enabled="true" />
          <object-type name="DIMENSION" enabled="false" />
          <object-type name="CLUSTER" enabled="false" />
          <object-type name="DBLINK" enabled="true" />
        </lookup-objects>
        <force-database-load value="false" />
        <prompt-connection-selection value="true" />
        <prompt-schema-selection value="true" />
      </lookup-filters>
    </navigation-settings>
    <dataset-grid-settings>
      <general>
        <enable-zooming value="true" />
        <enable-column-tooltip value="true" />
      </general>
      <sorting>
        <nulls-first value="true" />
        <max-sorting-columns value="4" />
      </sorting>
      <audit-columns>
        <column-names value="" />
        <visible value="true" />
        <editable value="false" />
      </audit-columns>
    </dataset-grid-settings>
    <dataset-editor-settings>
      <text-editor-popup>
        <active value="false" />
        <active-if-empty value="false" />
        <data-length-threshold value="100" />
        <popup-delay value="1000" />
      </text-editor-popup>
      <values-actions-popup>
        <show-popup-button value="true" />
        <element-count-threshold value="1000" />
        <data-length-threshold value="250" />
      </values-actions-popup>
      <general>
        <fetch-block-size value="100" />
        <fetch-timeout value="30" />
        <trim-whitespaces value="true" />
        <convert-empty-strings-to-null value="true" />
        <select-content-on-cell-edit value="true" />
        <large-value-preview-active value="true" />
      </general>
      <filters>
        <prompt-filter-dialog value="true" />
        <default-filter-type value="BASIC" />
      </filters>
      <qualified-text-editor text-length-threshold="300">
        <content-types>
          <content-type name="Text" enabled="true" />
          <content-type name="Properties" enabled="true" />
          <content-type name="XML" enabled="true" />
          <content-type name="DTD" enabled="true" />
          <content-type name="HTML" enabled="true" />
          <content-type name="XHTML" enabled="true" />
          <content-type name="CSS" enabled="true" />
          <content-type name="Java" enabled="true" />
          <content-type name="SQL" enabled="true" />
          <content-type name="PL/SQL" enabled="true" />
          <content-type name="JavaScript" enabled="true" />
          <content-type name="JSON" enabled="true" />
          <content-type name="JSON5" enabled="true" />
          <content-type name="JSP" enabled="true" />
          <content-type name="JSPx" enabled="true" />
          <content-type name="Groovy" enabled="true" />
          <content-type name="FTL" enabled="true" />
          <content-type name="GSP" enabled="true" />
          <content-type name="VTL" enabled="true" />
          <content-type name="YAML" enabled="true" />
          <content-type name="Manifest" enabled="true" />
        </content-types>
      </qualified-text-editor>
      <record-navigation>
        <navigation-target value="VIEWER" />
      </record-navigation>
    </dataset-editor-settings>
    <code-editor-settings>
      <general>
        <show-object-navigation-gutter value="false" />
        <show-spec-declaration-navigation-gutter value="true" />
        <enable-spellchecking value="true" />
        <enable-reference-spellchecking value="false" />
      </general>
      <confirmations>
        <save-changes value="false" />
        <revert-changes value="true" />
        <exit-on-changes value="ASK" />
      </confirmations>
    </code-editor-settings>
    <code-completion-settings>
      <filters>
        <basic-filter>
          <filter-element type="RESERVED_WORD" id="keyword" selected="true" />
          <filter-element type="RESERVED_WORD" id="function" selected="true" />
          <filter-element type="RESERVED_WORD" id="parameter" selected="true" />
          <filter-element type="RESERVED_WORD" id="datatype" selected="true" />
          <filter-element type="RESERVED_WORD" id="exception" selected="true" />
          <filter-element type="OBJECT" id="schema" selected="true" />
          <filter-element type="OBJECT" id="role" selected="true" />
          <filter-element type="OBJECT" id="user" selected="true" />
          <filter-element type="OBJECT" id="privilege" selected="true" />
          <user-schema>
            <filter-element type="OBJECT" id="table" selected="true" />
            <filter-element type="OBJECT" id="view" selected="true" />
            <filter-element type="OBJECT" id="materialized view" selected="true" />
            <filter-element type="OBJECT" id="index" selected="true" />
            <filter-element type="OBJECT" id="constraint" selected="true" />
            <filter-element type="OBJECT" id="trigger" selected="true" />
            <filter-element type="OBJECT" id="synonym" selected="false" />
            <filter-element type="OBJECT" id="sequence" selected="true" />
            <filter-element type="OBJECT" id="procedure" selected="true" />
            <filter-element type="OBJECT" id="function" selected="true" />
            <filter-element type="OBJECT" id="package" selected="true" />
            <filter-element type="OBJECT" id="type" selected="true" />
            <filter-element type="OBJECT" id="dimension" selected="true" />
            <filter-element type="OBJECT" id="cluster" selected="true" />
            <filter-element type="OBJECT" id="dblink" selected="true" />
          </user-schema>
          <public-schema>
            <filter-element type="OBJECT" id="table" selected="false" />
            <filter-element type="OBJECT" id="view" selected="false" />
            <filter-element type="OBJECT" id="materialized view" selected="false" />
            <filter-element type="OBJECT" id="index" selected="false" />
            <filter-element type="OBJECT" id="constraint" selected="false" />
            <filter-element type="OBJECT" id="trigger" selected="false" />
            <filter-element type="OBJECT" id="synonym" selected="false" />
            <filter-element type="OBJECT" id="sequence" selected="false" />
            <filter-element type="OBJECT" id="procedure" selected="false" />
            <filter-element type="OBJECT" id="function" selected="false" />
            <filter-element type="OBJECT" id="package" selected="false" />
            <filter-element type="OBJECT" id="type" selected="false" />
            <filter-element type="OBJECT" id="dimension" selected="false" />
            <filter-element type="OBJECT" id="cluster" selected="false" />
            <filter-element type="OBJECT" id="dblink" selected="false" />
          </public-schema>
          <any-schema>
            <filter-element type="OBJECT" id="table" selected="true" />
            <filter-element type="OBJECT" id="view" selected="true" />
            <filter-element type="OBJECT" id="materialized view" selected="true" />
            <filter-element type="OBJECT" id="index" selected="true" />
            <filter-element type="OBJECT" id="constraint" selected="true" />
            <filter-element type="OBJECT" id="trigger" selected="true" />
            <filter-element type="OBJECT" id="synonym" selected="true" />
            <filter-element type="OBJECT" id="sequence" selected="true" />
            <filter-element type="OBJECT" id="procedure" selected="true" />
            <filter-element type="OBJECT" id="function" selected="true" />
            <filter-element type="OBJECT" id="package" selected="true" />
            <filter-element type="OBJECT" id="type" selected="true" />
            <filter-element type="OBJECT" id="dimension" selected="true" />
            <filter-element type="OBJECT" id="cluster" selected="true" />
            <filter-element type="OBJECT" id="dblink" selected="true" />
          </any-schema>
        </basic-filter>
        <extended-filter>
          <filter-element type="RESERVED_WORD" id="keyword" selected="true" />
          <filter-element type="RESERVED_WORD" id="function" selected="true" />
          <filter-element type="RESERVED_WORD" id="parameter" selected="true" />
          <filter-element type="RESERVED_WORD" id="datatype" selected="true" />
          <filter-element type="RESERVED_WORD" id="exception" selected="true" />
          <filter-element type="OBJECT" id="schema" selected="true" />
          <filter-element type="OBJECT" id="user" selected="true" />
          <filter-element type="OBJECT" id="role" selected="true" />
          <filter-element type="OBJECT" id="privilege" selected="true" />
          <user-schema>
            <filter-element type="OBJECT" id="table" selected="true" />
            <filter-element type="OBJECT" id="view" selected="true" />
            <filter-element type="OBJECT" id="materialized view" selected="true" />
            <filter-element type="OBJECT" id="index" selected="true" />
            <filter-element type="OBJECT" id="constraint" selected="true" />
            <filter-element type="OBJECT" id="trigger" selected="true" />
            <filter-element type="OBJECT" id="synonym" selected="true" />
            <filter-element type="OBJECT" id="sequence" selected="true" />
            <filter-element type="OBJECT" id="procedure" selected="true" />
            <filter-element type="OBJECT" id="function" selected="true" />
            <filter-element type="OBJECT" id="package" selected="true" />
            <filter-element type="OBJECT" id="type" selected="true" />
            <filter-element type="OBJECT" id="dimension" selected="true" />
            <filter-element type="OBJECT" id="cluster" selected="true" />
            <filter-element type="OBJECT" id="dblink" selected="true" />
          </user-schema>
          <public-schema>
            <filter-element type="OBJECT" id="table" selected="true" />
            <filter-element type="OBJECT" id="view" selected="true" />
            <filter-element type="OBJECT" id="materialized view" selected="true" />
            <filter-element type="OBJECT" id="index" selected="true" />
            <filter-element type="OBJECT" id="constraint" selected="true" />
            <filter-element type="OBJECT" id="trigger" selected="true" />
            <filter-element type="OBJECT" id="synonym" selected="true" />
            <filter-element type="OBJECT" id="sequence" selected="true" />
            <filter-element type="OBJECT" id="procedure" selected="true" />
            <filter-element type="OBJECT" id="function" selected="true" />
            <filter-element type="OBJECT" id="package" selected="true" />
            <filter-element type="OBJECT" id="type" selected="true" />
            <filter-element type="OBJECT" id="dimension" selected="true" />
            <filter-element type="OBJECT" id="cluster" selected="true" />
            <filter-element type="OBJECT" id="dblink" selected="true" />
          </public-schema>
          <any-schema>
            <filter-element type="OBJECT" id="table" selected="true" />
            <filter-element type="OBJECT" id="view" selected="true" />
            <filter-element type="OBJECT" id="materialized view" selected="true" />
            <filter-element type="OBJECT" id="index" selected="true" />
            <filter-element type="OBJECT" id="constraint" selected="true" />
            <filter-element type="OBJECT" id="trigger" selected="true" />
            <filter-element type="OBJECT" id="synonym" selected="true" />
            <filter-element type="OBJECT" id="sequence" selected="true" />
            <filter-element type="OBJECT" id="procedure" selected="true" />
            <filter-element type="OBJECT" id="function" selected="true" />
            <filter-element type="OBJECT" id="package" selected="true" />
            <filter-element type="OBJECT" id="type" selected="true" />
            <filter-element type="OBJECT" id="dimension" selected="true" />
            <filter-element type="OBJECT" id="cluster" selected="true" />
            <filter-element type="OBJECT" id="dblink" selected="true" />
          </any-schema>
        </extended-filter>
      </filters>
      <sorting enabled="true">
        <sorting-element type="RESERVED_WORD" id="keyword" />
        <sorting-element type="RESERVED_WORD" id="datatype" />
        <sorting-element type="OBJECT" id="column" />
        <sorting-element type="OBJECT" id="table" />
        <sorting-element type="OBJECT" id="view" />
        <sorting-element type="OBJECT" id="materialized view" />
        <sorting-element type="OBJECT" id="index" />
        <sorting-element type="OBJECT" id="constraint" />
        <sorting-element type="OBJECT" id="trigger" />
        <sorting-element type="OBJECT" id="synonym" />
        <sorting-element type="OBJECT" id="sequence" />
        <sorting-element type="OBJECT" id="procedure" />
        <sorting-element type="OBJECT" id="function" />
        <sorting-element type="OBJECT" id="package" />
        <sorting-element type="OBJECT" id="type" />
        <sorting-element type="OBJECT" id="dimension" />
        <sorting-element type="OBJECT" id="cluster" />
        <sorting-element type="OBJECT" id="dblink" />
        <sorting-element type="OBJECT" id="schema" />
        <sorting-element type="OBJECT" id="role" />
        <sorting-element type="OBJECT" id="user" />
        <sorting-element type="RESERVED_WORD" id="function" />
        <sorting-element type="RESERVED_WORD" id="parameter" />
      </sorting>
      <format>
        <enforce-code-style-case value="true" />
      </format>
    </code-completion-settings>
    <execution-engine-settings>
      <statement-execution>
        <fetch-block-size value="100" />
        <execution-timeout value="20" />
        <debug-execution-timeout value="600" />
        <focus-result value="false" />
        <prompt-execution value="false" />
      </statement-execution>
      <script-execution>
        <command-line-interfaces />
        <execution-timeout value="300" />
      </script-execution>
      <method-execution>
        <execution-timeout value="30" />
        <debug-execution-timeout value="600" />
        <parameter-history-size value="10" />
      </method-execution>
    </execution-engine-settings>
    <operation-settings>
      <transactions>
        <uncommitted-changes>
          <on-project-close value="ASK" />
          <on-disconnect value="ASK" />
          <on-autocommit-toggle value="ASK" />
        </uncommitted-changes>
        <multiple-uncommitted-changes>
          <on-commit value="ASK" />
          <on-rollback value="ASK" />
        </multiple-uncommitted-changes>
      </transactions>
      <session-browser>
        <disconnect-session value="ASK" />
        <kill-session value="ASK" />
        <reload-on-filter-change value="false" />
      </session-browser>
      <compiler>
        <compile-type value="KEEP" />
        <compile-dependencies value="ASK" />
        <always-show-controls value="false" />
      </compiler>
    </operation-settings>
    <ddl-file-settings>
      <extensions>
        <mapping file-type-id="VIEW" extensions="vw" />
        <mapping file-type-id="TRIGGER" extensions="trg" />
        <mapping file-type-id="PROCEDURE" extensions="prc" />
        <mapping file-type-id="FUNCTION" extensions="fnc" />
        <mapping file-type-id="PACKAGE" extensions="pkg" />
        <mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
        <mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
        <mapping file-type-id="TYPE" extensions="tpe" />
        <mapping file-type-id="TYPE_SPEC" extensions="tps" />
        <mapping file-type-id="TYPE_BODY" extensions="tpb" />
      </extensions>
      <general>
        <lookup-ddl-files value="true" />
        <create-ddl-files value="false" />
        <synchronize-ddl-files value="true" />
        <use-qualified-names value="false" />
        <make-scripts-rerunnable value="true" />
      </general>
    </ddl-file-settings>
    <general-settings>
      <regional-settings>
        <date-format value="MEDIUM" />
        <number-format value="UNGROUPED" />
        <locale value="SYSTEM_DEFAULT" />
        <use-custom-formats value="false" />
      </regional-settings>
      <environment>
        <environment-types>
          <environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
          <environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
          <environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
          <environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
        </environment-types>
        <visibility-settings>
          <connection-tabs value="true" />
          <dialog-headers value="true" />
          <object-editor-tabs value="true" />
          <script-editor-tabs value="false" />
          <execution-result-tabs value="true" />
        </visibility-settings>
      </environment>
    </general-settings>
  </component>
</project>
springboot-vue3/effective-pom.xml
New file
Diff too large
springboot-vue3/src/main/java/com/example/springboot/AuthorityApplication.java
@@ -1,7 +1,6 @@
package com.example.springboot;
import com.example.springboot.common.MessageSender;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
springboot-vue3/src/main/java/com/example/springboot/common/MessageReceiver.java
File was deleted
springboot-vue3/src/main/java/com/example/springboot/common/MessageSender.java
File was deleted
springboot-vue3/src/main/java/com/example/springboot/common/RabbitConfig.java
File was deleted
springboot-vue3/src/main/java/com/example/springboot/component/MessageQueueReader.java
@@ -13,28 +13,19 @@
    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        List<String> messages = new ArrayList<>();
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            boolean autoAck = false;
           // autoAck 参数设置为 false,然后手动确认消息处理完成
            // 循环获取队列中的所有消息
//            while (true) {
                GetResponse response = channel.basicGet(QUEUE_NAME, autoAck);
                GetResponse response = channel.basicGet(QUEUE_NAME, autoAck);
                if (response != null) {
                    String message = new String(response.getBody(), "UTF-8");
                    messages.add(message);
                    // 手动确认消息处理完成
                    long deliveryTag = response.getEnvelope().getDeliveryTag();
                    channel.basicAck(deliveryTag, false);
//                } else {
//                    // 如果队列为空,则退出循环
//                    break;
//                }
            }
        }
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter.java
@@ -14,7 +14,7 @@
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import com.example.springboot.common.MessageSender;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
@@ -62,8 +62,7 @@
      jsonObject.put("key3", jsonArray);
      try {
        // 将 JSON 对象转换为字符串并发送到队列
        RabbitMQUtils.sendJsonMessage(jsonObject, "json_queue");
        // 将 JSON 对象转换为字符串并发送到队列//RabbitMQUtils.sendJsonMessage(jsonObject, "json_queue");
      } catch (Exception e) {
        e.printStackTrace();
      }
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -37,7 +37,7 @@
    public static Boolean isAllowQueue = true;
    public static Boolean isAllowReordering = true;
    // 出片队列警告
    public static Boolean isQueueWarning = false;
    public static Boolean isQueueWarning = true;
    // 铝框id
    public static String FrameNo = "";
    // 是否需要手动确认玻璃
@@ -63,7 +63,10 @@
            JSONObject jsonObject = new JSONObject();
            try {
                Thread.sleep(1000);
                // 注入mapper
                String s1=S7controlalbia.getinstance().readStrings("DB14.38");
                String s2=S7controlalbia.getinstance().readStrings("DB14.40");
                // 注入mapper
                homeMapper = WebSocketServer.applicationContext.getBean(HomeMapper.class);
                spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
                spianService = WebSocketServer.applicationContext.getBean(SpianService.class);
@@ -126,170 +129,169 @@
                // String E01id = new String( S7controlLK.getinstance().ReadByte("DB17.0",16));
                // String J01id = new String( S7controlLK.getinstance().ReadByte("DB17.22",14));
                // if (S7control.getinstance().CheckConnected() == true) {
                if (S7control.getinstance().CheckConnected() == true) {
                    // 铝框线交互
                    if (S7controlLK.getinstance().CheckConnected() == true) {
                        if (CurrentFrame != null) {
                            S7controlLK.getinstance().writeStrings(CurrentFrame.getBarCode(), "DB17.0");
                        }
                        String E01id = S7controlLK.getinstance().readStrings("DB17.0");
                        String J01id = S7controlLK.getinstance().readStrings("DB17.22");
                // 铝框线交互
                if (S7controlLK.getinstance().CheckConnected() == true) {
                    if (CurrentFrame != null) {
                        S7controlLK.getinstance().writeStrings(CurrentFrame.getBarCode(), "DB17.0");
                        List<Short> liststates = S7controlLK.getinstance().ReadWord("DB17.38", 1);
                        List<Short> liststate = S7controlLK.getinstance().ReadWord("DB17.20", 1);
                        Short framerequest = liststate.get(0);
                        if (framerequest == 1) {
                            // 铝框id
                            String position;
                            try {
                                position = dbserve.SelectPositionByFrameBarcode(J01id);
                            } catch (SQLException e) {
                                // TODO Auto-generated catch block
                                position = "0";
                                e.printStackTrace();
                            }
                            Short send;
                            if (position.equals("0")) {
                                send = 0;
                            } else {
                                send = 1;
                            }
                            S7controlLK.getinstance().WriteWord("DB17.38", (short) send);
                        }
                    }
                    String E01id = S7controlLK.getinstance().readStrings("DB17.0");
                    String J01id = S7controlLK.getinstance().readStrings("DB17.22");
                    List<Short> liststates = S7controlLK.getinstance().ReadWord("DB17.38", 1);
                    List<Short> liststate = S7controlLK.getinstance().ReadWord("DB17.20", 1);
                    Short framerequest = liststate.get(0);
                    if (framerequest == 1) {
                        // 铝框id
                        String position;
                    // 获取当前扫码方式
                    List<Boolean> Scanningmethods = S7control.getinstance().ReadBits("DB101.11.4", 1);
                    if (Scanningmethods != null) {
                        for (Boolean Scanningmethod : Scanningmethods) {
                            jsonObject.append("Scanningmethod", Scanningmethod);
                        }
                    }
                    // 获取当前扫码枪玻璃id
                    String CurrrentGlassId = spianService.queGlassid("DB103.256", 14).toString();
                    jsonObject.append("CurrrentGlassId", CurrrentGlassId);
                    // 获取D01-D06,A01,A02,B01,B02状态
                    List<Short> DeviceList = S7control.getinstance().ReadWord("DB103.0", 10);
                    jsonObject.append("DeviceList", DeviceList);
                    // 获取D01-D06,A01,A02,B01,B02玻璃id
                    List<String> GlassIdList = new ArrayList<String>();
                    GlassIdList.add(spianService.queGlassid("DB103.44", 14).toString());
                    GlassIdList.add(spianService.queGlassid("DB103.58", 14).toString());
                    GlassIdList.add(spianService.queGlassid("DB103.184", 14).toString());
                    GlassIdList.add(spianService.queGlassid("DB103.212", 14).toString());
                    GlassIdList.add(spianService.queGlassid("DB103.128", 14).toString());
                    GlassIdList.add(spianService.queGlassid("DB103.142", 14).toString());
                    GlassIdList.add(spianService.queGlassid("DB103.156", 14).toString());
                    GlassIdList.add(spianService.queGlassid("DB103.72", 14).toString());
                    GlassIdList.add(spianService.queGlassid("DB103.86", 14).toString());
                    GlassIdList.add(spianService.queGlassid("DB103.100", 14).toString());
                    GlassIdList.add(spianService.queGlassid("DB103.114", 14).toString());
                    jsonObject.append("GlassIdList", GlassIdList);
                    // 获取Plc进片车与出片车位置
                    List<String> addressList = new ArrayList<String>();
                    addressList.add("DB106.12");
                    addressList.add("DB106.0");
                    List<Short> paramlist = S7control.getinstance().ReadWord(addressList);
                    if (paramlist != null) {
                        jsonObject.append("params", paramlist);
                    }
                    // // 获取进片车状态
                    // List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8",
                    // 1);// 获取进片车状态
                    // if (datas1ListState != null) {
                    // boolean exist1 = datas1ListState.contains((short) 0);
                    // jsonObject.append("zhuangtai", exist1);
                    // }
                    // // 获取进片玻璃信息
                    // List<Short> inglassInfo = S7control.getinstance().ReadWord("DB106.24", 1);
                    // if (inglassInfo != null) {
                    // if (inglassInfo.size() > 0) {
                    // jsonObject.append("loadglassheight", inglassInfo.get(0) * 70);
                    // }
                    // }
                    // // 获取铝框idDB106.DBW64,添加到出片队列
                    // String frameno="X21763329601FB";
                    String frameno = spianService.queGlassid("DB103.270", 14).toString();
                    if (!frameno.equals(Plchome.FrameNo)) {
                        Plchome.FrameNo = frameno;
                        try {
                            position = dbserve.SelectPositionByFrameBarcode(J01id);
                            Short num = 0;
                            List<north_glass_buffer1> north_glass_buffer1s = north_Glass_Buffer1Service
                                    .SelectAluminumFrameInfoById(Plchome.FrameNo);
                            for (north_glass_buffer1 north_glass_buffer1 : north_glass_buffer1s) {
                                if (north_glass_buffer1.getstorageCage() == null) {
                                    break;
                                }
                                num++;
                            }
                            if (num == north_glass_buffer1s.size()) {
                                north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
                            } else {
                                Plchome.AluminumFrame = north_glass_buffer1s;
                            }
                        } catch (SQLException e) {
                            // TODO Auto-generated catch block
                            position = "0";
                            e.printStackTrace();
                        }
                        Short send;
                        if (position.equals("0")) {
                            send = 0;
                    }
                    if (AluminumFrame != null) {
                        jsonObject.append("AluminumFrame", AluminumFrame);
                    }
                    // 复位倒计时
                    // 地址104.9.6
                    List<Boolean> countdown = S7control.getinstance().ReadBits("DB104.9.6", 1);
                    for (Boolean countdowns : countdown) {
                        jsonObject.append("countdown", countdowns);
                    }
                    // jsonObject.append("countdown", true);
                    // 复位完成信号
                    List<Boolean> resetss = S7control.getinstance().ReadBits("DB103.284", 1);
                    for (Boolean reset : resetss) {
                        jsonObject.append("reset", reset);
                    }
                    // 是否急停
                    List<Boolean> emergencystops = S7control.getinstance().ReadBits("DB104.5.1", 1);
                    for (Boolean emergencystop : emergencystops) {
                        jsonObject.append("emergencystop", emergencystop);
                    }
                    // 获取进片请求状态
                    List<Short> D01Request = S7control.getinstance().ReadWord("DB106.24", 1);
                    boolean D01RequestState = D01Request.contains((short) 1);
                    jsonObject.append("D01RequestState", D01RequestState);
                    // 获取进片发送状态
                    List<Short> D01respnse = S7control.getinstance().ReadWord("DB106.16", 1);
                    boolean D01ResponseState = D01respnse.contains((short) 1);
                    // jsonObject.append("D01RequestState", D01RequestState);
                    // 自动进片
                    isConfirm = true;
                    if (isConfirm == true && form3.getglassId() != null && form3.getglassId() != "") {
                        if ((form3.getglassheight() < 380 || form3.getglasswidth() < 390
                                || form3.getglassheight() > 1810
                                || form3.getglasswidth() > 2760)
                                || (form3.getglassheight() < 390 || form3.getglasswidth() < 380
                                        || form3.getglassheight() > 2760 || form3.getglasswidth() > 1810)) {
                            FeedState = true;
                            jsonObject.append("FeedState", FeedState);
                            FeedState = false;
                        } else {
                            send = 1;
                        }
                        S7controlLK.getinstance().WriteWord("DB17.38", (short) send);
                    }
                }
                // 获取当前扫码方式
                List<Boolean> Scanningmethods = S7control.getinstance().ReadBits("DB101.11.4", 1);
                if (Scanningmethods != null) {
                    for (Boolean Scanningmethod : Scanningmethods) {
                        jsonObject.append("Scanningmethod", Scanningmethod);
                    }
                }
                // 获取当前扫码枪玻璃id
                String CurrrentGlassId = spianService.queGlassid("DB103.256", 14).toString();
                jsonObject.append("CurrrentGlassId", CurrrentGlassId);
                // 获取D01-D06,A01,A02,B01,B02状态
                List<Short> DeviceList = S7control.getinstance().ReadWord("DB103.0", 10);
                jsonObject.append("DeviceList", DeviceList);
                // 获取D01-D06,A01,A02,B01,B02玻璃id
                List<String> GlassIdList = new ArrayList<String>();
                GlassIdList.add(spianService.queGlassid("DB103.44", 14).toString());
                GlassIdList.add(spianService.queGlassid("DB103.58", 14).toString());
                GlassIdList.add(spianService.queGlassid("DB103.184", 14).toString());
                GlassIdList.add(spianService.queGlassid("DB103.212", 14).toString());
                GlassIdList.add(spianService.queGlassid("DB103.128", 14).toString());
                GlassIdList.add(spianService.queGlassid("DB103.142", 14).toString());
                GlassIdList.add(spianService.queGlassid("DB103.156", 14).toString());
                GlassIdList.add(spianService.queGlassid("DB103.72", 14).toString());
                GlassIdList.add(spianService.queGlassid("DB103.86", 14).toString());
                GlassIdList.add(spianService.queGlassid("DB103.100", 14).toString());
                GlassIdList.add(spianService.queGlassid("DB103.114", 14).toString());
                jsonObject.append("GlassIdList", GlassIdList);
                // 获取Plc进片车与出片车位置
                List<String> addressList = new ArrayList<String>();
                addressList.add("DB106.12");
                addressList.add("DB106.0");
                List<Short> paramlist = S7control.getinstance().ReadWord(addressList);
                if (paramlist != null) {
                    jsonObject.append("params", paramlist);
                }
                // // 获取进片车状态
                // List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8",
                //         1);// 获取进片车状态
                // if (datas1ListState != null) {
                //     boolean exist1 = datas1ListState.contains((short) 0);
                //     jsonObject.append("zhuangtai", exist1);
                // }
                // // 获取进片玻璃信息
                // List<Short> inglassInfo = S7control.getinstance().ReadWord("DB106.24", 1);
                // if (inglassInfo != null) {
                //     if (inglassInfo.size() > 0) {
                //         jsonObject.append("loadglassheight", inglassInfo.get(0) * 70);
                //     }
                // }
                // // 获取铝框idDB106.DBW64,添加到出片队列
                // String frameno="X21763329601FB";
                String frameno = spianService.queGlassid("DB103.270", 14).toString();
                if (!frameno.equals(Plchome.FrameNo)) {
                    Plchome.FrameNo = frameno;
                    try {
                        Short num = 0;
                        List<north_glass_buffer1> north_glass_buffer1s = north_Glass_Buffer1Service
                                .SelectAluminumFrameInfoById(Plchome.FrameNo);
                        for (north_glass_buffer1 north_glass_buffer1 : north_glass_buffer1s) {
                            if (north_glass_buffer1.getstorageCage() == null) {
                                break;
                            if (D01RequestState == true && D01ResponseState != true) {
                                storageCageService.InsertQueueGlassId((short) 1, form3);
                            }
                            num++;
                        }
                        if (num == north_glass_buffer1s.size()) {
                            north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
                        } else {
                            Plchome.AluminumFrame = north_glass_buffer1s;
                        }
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if (AluminumFrame != null) {
                    jsonObject.append("AluminumFrame", AluminumFrame);
                }
                // 复位倒计时
                // 地址104.9.6
                List<Boolean> countdown = S7control.getinstance().ReadBits("DB104.9.6", 1);
                for (Boolean countdowns : countdown) {
                    jsonObject.append("countdown", countdowns);
                }
                // jsonObject.append("countdown", true);
                // 复位完成信号
                List<Boolean> resetss = S7control.getinstance().ReadBits("DB103.284", 1);
                for (Boolean reset : resetss) {
                    jsonObject.append("reset", reset);
                }
                // 是否急停
                List<Boolean> emergencystops = S7control.getinstance().ReadBits("DB104.5.1", 1);
                for (Boolean emergencystop : emergencystops) {
                    jsonObject.append("emergencystop", emergencystop);
                }
                // 获取进片请求状态
                List<Short> D01Request = S7control.getinstance().ReadWord("DB106.24", 1);
                boolean D01RequestState = D01Request.contains((short) 1);
                jsonObject.append("D01RequestState", D01RequestState);
                // 获取进片发送状态
                List<Short> D01respnse = S7control.getinstance().ReadWord("DB106.16", 1);
                boolean D01ResponseState = D01respnse.contains((short) 1);
                // jsonObject.append("D01RequestState", D01RequestState);
                // 自动进片
                isConfirm=true;
                if (isConfirm == true && form3.getglassId() != null && form3.getglassId() != "") {
                    if ((form3.getglassheight() < 380 || form3.getglasswidth() < 390 || form3.getglassheight() > 1810
                            || form3.getglasswidth() > 2760)
                            || (form3.getglassheight() < 390 || form3.getglasswidth() < 380
                                    || form3.getglassheight() > 2760 || form3.getglasswidth() > 1810)) {
                        FeedState = true;
                        jsonObject.append("FeedState", FeedState);
                        FeedState = false;
                    } else {
                        if (D01RequestState == true && D01ResponseState != true) {
                            storageCageService.InsertQueueGlassId((short) 1, form3);
                        }
                    }
                }
                // }
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
springboot-vue3/src/main/java/com/example/springboot/component/RabbitMQUtils.java
@@ -3,6 +3,9 @@
import com.rabbitmq.client.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
public class RabbitMQUtils {
    // ObjectMapper对象,用于序列化和反序列化JSON
    private static ObjectMapper objectMapper = new ObjectMapper();
@@ -25,6 +28,28 @@
        }
    }
    public List<String> readMessages(String queueName) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        List<String> messages = new ArrayList<>();
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            boolean autoAck = false;
            GetResponse response = channel.basicGet(queueName, autoAck);
            if (response != null) {
                String message = new String(response.getBody(), "UTF-8");
                messages.add(message);
                // 手动确认消息处理完成
                long deliveryTag = response.getEnvelope().getDeliveryTag();
                channel.basicAck(deliveryTag, false);
            }
        }
        return messages;
    }
    // 从 RabbitMQ 队列中接收消息
    public static void receiveMessage(String queueName) throws Exception {
        // 创建连接工厂并设置主机名
springboot-vue3/src/main/java/com/example/springboot/component/S7controlalbia.java
New file
@@ -0,0 +1,456 @@
package com.example.springboot.component;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;
import java.sql.Time;
import java.util.ArrayList;
import java.util.List;
import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
import com.github.xingshuangs.iot.protocol.s7.service.MultiAddressWrite;
import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
import com.google.common.primitives.Bytes;
import org.apache.ibatis.jdbc.Null;
public class S7controlalbia {
    S7PLC s7PLC; // PLC通讯类实例
    private EPlcType plcType = EPlcType.S1500; // 西门子PLC类型
    private String ip = "192.168.10.1"; // plc ip地址
    private int port = 65; // plc 端口号
    private static volatile S7controlalbia instance = null;
    private S7controlalbia() {
        if (s7PLC == null)
            s7PLC = new S7PLC(plcType, ip, port, 0, 0);
    }
    // 单例模式 获取类的唯一实例
    public static S7controlalbia getinstance() {
        if (instance == null) {
            synchronized (S7controlalbia.class) {
                if (instance == null)
                    instance = new S7controlalbia();
            }
        }
        return instance;
    }
    /**
     * 关闭西门子s7通讯连接
     */
    public void CloseS7client() {
        if (s7PLC == null)
            s7PLC.close();
        s7PLC.checkConnected();
    }
    /**
     * s7通讯连接状态
     */
    public boolean CheckConnected() {
        return s7PLC.checkConnected();
    }
    /**
     * 按指定的地址 写入一个word
     *
     * @param address 地址
     * @param data    word的值
     */
    public void WriteWord(String address, short data) {
        if (s7PLC == null) {
            return;
        }
        s7PLC.writeInt16(address, data);
    }
    /**
     * 从某地址连续 写入多个word
     *
     * @param address 地址
     * @param datas   word的值
     */
    public void WriteWord(String address, List<Short> datas) {
        if (s7PLC == null)
            return;
        // s7PLC.write(address, data);
        List<String> addresslist = GetAddressList(address, datas.size(), 16);
        MultiAddressWrite addressWrite = new MultiAddressWrite();
        for (int i = 0; i < datas.size(); i++) {
            addressWrite.addInt16(addresslist.get(i), datas.get(i));
        }
        s7PLC.writeMultiData(addressWrite);
    }
    /**
     * 按指定的地址 写入多个word
     *
     * @param address 地址
     * @param datas   word的值
     */
    /**
     * 按指定的地址 写入一个Bit
     *
     * @param address 地址
     * @param data    Bit的值
     */
    public void WriteBit(String address, Boolean data) {
        if (s7PLC == null)
            return;
        s7PLC.writeBoolean(address, data);
    }
    /**
     * 按指定的地址 写入多个bit
     *
     * @param address 地址
     * @param datas   bit的值
     */
    public void WriteBit(List<String> address, List<Boolean> datas) {
        if (s7PLC == null)
            return;
        // s7PLC.write(address, data);
        MultiAddressWrite addressWrite = new MultiAddressWrite();
        for (int i = 0; i < address.size(); i++) {
            addressWrite.addBoolean(address.get(i), datas.get(i));
        }
        s7PLC.writeMultiData(addressWrite);
    }
    /**
     * 从某地址连续 写入多个bit
     *
     * @param address 地址
     * @param datas   word的值
     */
    public void WriteBit(String address, List<Boolean> datas) {
        if (s7PLC == null)
            return;
        // s7PLC.write(address, data);
        List<String> addresslist = GetAddressList(address, datas.size(), 1);
        MultiAddressWrite addressWrite = new MultiAddressWrite();
        for (int i = 0; i < datas.size(); i++) {
            addressWrite.addBoolean(addresslist.get(i), datas.get(i));
        }
        s7PLC.writeMultiData(addressWrite);
    }
    /**
     * 按指定的地址 写入多个byte
     *
     * @param address 地址
     * @param datas   byte的值
     */
    public void WriteByte(String address, byte[] datas) {
        if (s7PLC == null)
            return;
        // s7PLC.write(address, data);
        s7PLC.writeByte(address, datas);
    }
    /**
     * 按指定的地址 读取word结果集
     *
     * @param address 地址
     * @return 结果
     */
    public List<Short> ReadWord(List<String> address) {
        if (s7PLC == null)
            return null;
        try {
            return s7PLC.readInt16(address);
        } catch (Exception e) {
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    }
    private int getIndexFromAddress(String address) {
        // 可以解析出地址中的数字部分,并转换为整数
        return 0;
    }
    private String getAddressFromIndex(int index) {
        // 整数转换为地址格式的字符串
        return "";
    }
    /**
     * 按指定的地址 读取word结果集
     *
     * @param address 地址
     * @param count   连续读多少个word
     * @return 结果
     */
    public List<Short> ReadWord(String address, int count) {
        if (s7PLC == null)
            return null;
        List<String> addresslist = GetAddressList(address, count, 16);
        try {
            return s7PLC.readInt16(addresslist);
        } catch (Exception e) {
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    }
    /**
     * 按指定的地址 读取byte结果集
     *
     * @param address 地址
     * @param count   连续读多少个byte
     * @return 结果
     */
    public byte[] ReadByte(String address, int count) {
        if (s7PLC == null)
            return null;
        // List<String> addresslist = GetAddressList(address, count, 16);
        try {
            return s7PLC.readByte(address, count);
        } catch (Exception e) {
            // 处理异常
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    }
    /**
     * 按指定的地址 按bit位 0 flase 1 true 读取结果
     *
     * @param addresslist 地址集
     * @return Boolean结果
     */
    public List<Boolean> ReadBits(List<String> addresslist) {
        if (s7PLC == null)
            return null;
        return s7PLC.readBoolean(addresslist);
    }
    // 读取不连续地址bit
    public List<Boolean> readBits(List<String> addressList) {
        if (s7PLC == null || addressList.isEmpty()) {
            return null;
        }
        List<Boolean> values = new ArrayList<>();
        for (String address : addressList) {
            try {
                boolean value = s7PLC.readBoolean(address);
                values.add(value);
            } catch (Exception e) {
                // 处理异常
                System.out.println("读取 " + address + " 失败:" + e.getMessage());
            }
        }
        return values;
    }
    // 读取String
    public List<String> readStrings(List<String> addressList) {
        if (s7PLC == null) {
            return null;
        }
        List<String> result = new ArrayList<>();
        for (String address : addressList) {
            try {
                byte[] bytes = s7PLC.readByte(address, 14);
                if (bytes != null) {
                    String str = new String(bytes, StandardCharsets.UTF_8);
                    result.add(str);
                }
            } catch (Exception e) {
                System.out.println("读取 " + address + " 失败:" + e.getMessage());
                result.add(null);
            }
        }
        return result;
    }
    public List<String> readStringsandword(List<String> addressList) {
        if (s7PLC == null) {
            return null;
        }
        List<String> result = new ArrayList<>();
        for (String address : addressList) {
            try {
                if (address.contains("-")) {
                    address = address.substring(0, address.indexOf("-"));
                    byte[] bytes = s7PLC.readByte(address, 14);
                    if (bytes != null) {
                        String str = new String(bytes, StandardCharsets.UTF_8);
                        result.add(str);
                    }
                } else {
                    Short value = s7PLC.readInt16(address);
                    result.add(value.toString());
                }
            } catch (Exception e) {
                System.out.println("读取 " + address + " 失败:" + e.getMessage());
                result.add(null);
            }
        }
        return result;
    }
    // 不连续地址写入Word
    public void WriteWord(List<String> address, List<Short> datas) {
        if (s7PLC == null)
            return;
        for (int i = 0; i < address.size(); i++) {
            String addr = address.get(i);
            short data = datas.get(i);
            if (addr.contains("-")) {
                outmesid(String.valueOf(data), addr); // 单独处理带破折号的地址
            } else {
                s7PLC.writeInt16(addr, data); // 将数据写入单个地址
            }
        }
    }
    // 字符串写入
    public void outmesid(String data, String addr) {
        // System.out.println("outmesid: " + data);
        List<Byte> glassidlist = new ArrayList<>();
        String[] parts = addr.split("-");
        if (parts.length == 2) {
            addr = parts[0]; // 只保留 "-" 前面的部分
        }
        for (char iditem : data.toCharArray()) {
            glassidlist.add(Byte.valueOf(String.valueOf(iditem)));
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        S7controlalbia.getinstance().WriteByte(addr, bytes);
    }
    // 读取不连续word
    public List<Short> readWords(List<String> addresses) {
        if (s7PLC == null) {
            return null;
        }
        List<Short> data = new ArrayList<>();
        for (String address : addresses) {
            try {
                // 单个地址
                Short value = s7PLC.readInt16(address);
                data.add(value);
            } catch (Exception e) {
                System.out.println("读取 " + address + " 失败:" + e.getMessage());
            }
        }
        return data;
    }
    // 读取时间
    public Long readtime(String address) {
        if (s7PLC == null)
            return null;
        try {
            return s7PLC.readTime(address);
        } catch (Exception e) {
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    }
    public void writetime(String address, long datas) {
        if (s7PLC == null)
            return;
        s7PLC.writeTime(address, datas); // 将数据写入单个地址
    }
    private int extractAddressNumber(String address) {
        String numberStr = address.replaceAll("\\D+", ""); // 使用正则表达式提取数字部分
        return Integer.parseInt(numberStr);
    }
    /**
     * 从指定的地址开始 连续按bit位读取
     *
     * @param address 地址
     * @param count   长度
     * @return Boolean结果
     */
    public List<Boolean> ReadBits(String address, int count) {
        if (s7PLC == null)
            return null;
        List<String> addresslist = GetAddressList(address, count, 1);
        try {
            return s7PLC.readBoolean(addresslist);
        } catch (Exception e) {
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    };
    private List<String> GetAddressList(String address, int count, int addedbit) {
        List<String> addresslist = new ArrayList<String>();
        String[] stringdatas = address.trim().split("\\.");
        if (stringdatas.length < 2 || !address.startsWith("DB"))
            return null;
        int dbwindex = 0;
        int bitindex = 0;
        if (stringdatas.length == 2) {
            dbwindex = Integer.parseInt(stringdatas[1]);
        } else if (stringdatas.length == 3) {
            dbwindex = Integer.parseInt(stringdatas[1]);
            bitindex = Integer.parseInt(stringdatas[2]);
        } else
            return null;
        addresslist.add(address);
        for (int i = 0; i < count - 1; i++) {
            int bitcurrent = bitindex + addedbit;
            if (bitcurrent > 7) {
                dbwindex += bitcurrent / 8;
                bitindex = 0;
            } else
                bitindex = bitcurrent;
            String endstr = stringdatas.length == 3 ? "." + bitindex : "";
            addresslist.add(stringdatas[0] + "." + dbwindex + endstr);
        }
        return addresslist;
    }
    public void writeStrings(String data, String addr) {
        // List<Byte> glassidlist = new ArrayList<>();
        String[] parts = addr.split("-");
        if (parts.length == 2) {
            addr = parts[0];
        }
        s7PLC.writeString(addr, data);
    }
    public String readStrings(String addr) {
        return s7PLC.readString(addr);
    }
}
springboot-vue3/src/main/java/com/example/springboot/controller/MessageController.java
File was deleted
springboot-vue3/src/main/java/com/example/springboot/service/OutSliceServive.java
@@ -92,7 +92,7 @@
  public void DeleteByGlassIDs(String glassid) {
    List<StorageCage> glassinfor = homeMapper.SelectStorageInfoByGlassId(glassid);
    for (StorageCage storageCage : glassinfor) {
      if (storageCage.getState().equals("2")) {
      if (storageCage.getState().equals("2")||storageCage.getState().equals("1")) {
        homeMapper.UpdataCageWidth(storageCage.getGlassWidth(), storageCage.getCage(), storageCage.getCell());
      }
    }
springboot-vue3/src/main/resources/application.properties
@@ -23,9 +23,9 @@
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#spring.rabbitmq.host=10.153.19.150
#spring.rabbitmq.port=5672
#spring.rabbitmq.username=guest
#spring.rabbitmq.password=guest