Prechádzať zdrojové kódy

feat:晚上自动打印重量校验逻辑(重量稳定、重复打印等逻辑补充)字典设置重量校验

韩帛霖 1 rok pred
rodič
commit
e5d8b5f485

+ 117 - 90
zkqy-ui/src/views/orderMange/codeListManage/index.vue

@@ -48,10 +48,10 @@
             icon="el-icon-search"
             size="mini"
             @click="handleQuery"
-            >搜索
+          >搜索
           </el-button>
           <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
-            >重置
+          >重置
           </el-button>
         </el-form-item>
       </el-form>
@@ -65,7 +65,7 @@
             size="mini"
             @click="printHandler"
             v-hasPermi="['system:productCodeList:add']"
-            >打印
+          >打印
           </el-button>
         </el-col>
         <el-col :span="1.5">
@@ -77,7 +77,7 @@
             :disabled="single"
             @click="handleUpdate"
             v-hasPermi="['system:productCodeList:edit']"
-            >修改
+          >修改
           </el-button>
         </el-col>
         <el-col :span="1.5">
@@ -89,7 +89,7 @@
             :disabled="multiple"
             @click="handleDelete"
             v-hasPermi="['system:productCodeList:remove']"
-            >删除
+          >删除
           </el-button>
         </el-col>
         <el-col :span="1.5">
@@ -100,7 +100,7 @@
             size="mini"
             @click="handleExport"
             v-hasPermi="['system:productCodeList:export']"
-            >导出
+          >导出
           </el-button>
         </el-col>
         <right-toolbar
@@ -114,22 +114,22 @@
         :data="productCodeListList"
         @selection-change="handleSelectionChange"
       >
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="码单号" align="center" prop="qrCode" />
-        <el-table-column label="品名" align="center" prop="productName" />
+        <el-table-column type="selection" width="55" align="center"/>
+        <el-table-column label="码单号" align="center" prop="qrCode"/>
+        <el-table-column label="品名" align="center" prop="productName"/>
         <el-table-column
           label="规格"
           align="center"
           prop="productSpecifications"
         />
-        <el-table-column label="批号" align="center" prop="lotNum" />
-        <el-table-column label="色泽" align="center" prop="productColor" />
+        <el-table-column label="批号" align="center" prop="lotNum"/>
+        <el-table-column label="色泽" align="center" prop="productColor"/>
         <!-- <el-table-column label="货品编号" align="center" prop="productId" /> -->
-        <el-table-column label="等级" align="center" prop="levels" />
-        <el-table-column label="筒数" align="center" prop="totalCanisterNum" />
-        <el-table-column label="箱数" align="center" prop="totalBoxNum" />
-        <el-table-column label="净重" align="center" prop="totalSuttle" />
-        <el-table-column label="备注" align="center" prop="remark" />
+        <el-table-column label="等级" align="center" prop="levels"/>
+        <el-table-column label="筒数" align="center" prop="totalCanisterNum"/>
+        <el-table-column label="箱数" align="center" prop="totalBoxNum"/>
+        <el-table-column label="净重" align="center" prop="totalSuttle"/>
+        <el-table-column label="备注" align="center" prop="remark"/>
         <el-table-column
           label="操作"
           align="center"
@@ -148,7 +148,7 @@
                     icon="el-icon-edit"
                     @click="handleUpdate(scope.row)"
                     v-hasPermi="['system:productCodeList:edit']"
-                    >修改
+                  >修改
                   </el-button>
                 </el-dropdown-item>
                 <el-dropdown-item>
@@ -157,7 +157,7 @@
                     type="text"
                     icon="el-icon-circle-plus-outline"
                     @click="supplementCode(scope.row)"
-                    >补码
+                  >补码
                   </el-button>
                 </el-dropdown-item>
                 <el-dropdown-item>
@@ -167,7 +167,7 @@
                     icon="el-icon-delete"
                     @click="handleDelete(scope.row)"
                     v-hasPermi="['system:productCodeList:remove']"
-                    >删除
+                  >删除
                   </el-button>
                 </el-dropdown-item>
               </el-dropdown-menu>
@@ -193,25 +193,25 @@
       >
         <el-form ref="form" :model="form" :rules="rules" label-width="80px">
           <el-form-item label="码单号" prop="qrCode">
-            <el-input v-model="form.qrCode" placeholder="请输入码单号" />
+            <el-input v-model="form.qrCode" placeholder="请输入码单号"/>
           </el-form-item>
           <el-form-item label="批号" prop="lotNum">
-            <el-input v-model="form.lotNum" placeholder="请输入批号" />
+            <el-input v-model="form.lotNum" placeholder="请输入批号"/>
           </el-form-item>
           <el-form-item label="货品编号" prop="productId">
-            <el-input v-model="form.productId" placeholder="请输入货品编号" />
+            <el-input v-model="form.productId" placeholder="请输入货品编号"/>
           </el-form-item>
           <el-form-item label="等级" prop="levels">
-            <el-input v-model="form.levels" placeholder="请输入等级" />
+            <el-input v-model="form.levels" placeholder="请输入等级"/>
           </el-form-item>
           <el-form-item label="筒数" prop="canisterNum">
-            <el-input v-model="form.canisterNum" placeholder="请输入筒数" />
+            <el-input v-model="form.canisterNum" placeholder="请输入筒数"/>
           </el-form-item>
           <el-form-item label="箱数" prop="boxNum">
-            <el-input v-model="form.boxNum" placeholder="请输入箱数" />
+            <el-input v-model="form.boxNum" placeholder="请输入箱数"/>
           </el-form-item>
           <el-form-item label="净重" prop="suttle">
-            <el-input v-model="form.suttle" placeholder="请输入净重" />
+            <el-input v-model="form.suttle" placeholder="请输入净重"/>
           </el-form-item>
           <el-form-item label="生产日期" prop="productionDate">
             <el-date-picker
@@ -224,16 +224,16 @@
             </el-date-picker>
           </el-form-item>
           <el-form-item label="机台" prop="machineTool">
-            <el-input v-model="form.machineTool" placeholder="请输入机台" />
+            <el-input v-model="form.machineTool" placeholder="请输入机台"/>
           </el-form-item>
           <el-form-item label="毛重" prop="grossWeight">
-            <el-input v-model="form.grossWeight" placeholder="请输入毛重" />
+            <el-input v-model="form.grossWeight" placeholder="请输入毛重"/>
           </el-form-item>
           <el-form-item label="包装" prop="packaging">
-            <el-input v-model="form.packaging" placeholder="请输入包装" />
+            <el-input v-model="form.packaging" placeholder="请输入包装"/>
           </el-form-item>
           <el-form-item label="班次" prop="workShifts">
-            <el-input v-model="form.workShifts" placeholder="请输入班次" />
+            <el-input v-model="form.workShifts" placeholder="请输入班次"/>
           </el-form-item>
           <el-form-item label="外贸号" prop="foreignTradeNumber">
             <el-input
@@ -242,22 +242,22 @@
             />
           </el-form-item>
           <el-form-item label="筒重" prop="canisterWeight">
-            <el-input v-model="form.canisterWeight" placeholder="请输入筒重" />
+            <el-input v-model="form.canisterWeight" placeholder="请输入筒重"/>
           </el-form-item>
           <el-form-item label="箱重/车重" prop="boxWeight">
-            <el-input v-model="form.boxWeight" placeholder="请输入箱重/车重" />
+            <el-input v-model="form.boxWeight" placeholder="请输入箱重/车重"/>
           </el-form-item>
           <el-form-item label="管色" prop="tubeColor">
-            <el-input v-model="form.tubeColor" placeholder="请输入管色" />
+            <el-input v-model="form.tubeColor" placeholder="请输入管色"/>
           </el-form-item>
           <el-form-item label="端口" prop="comPort">
-            <el-input v-model="form.comPort" placeholder="请输入端口" />
+            <el-input v-model="form.comPort" placeholder="请输入端口"/>
           </el-form-item>
           <el-form-item label="打印格式" prop="printFormat">
-            <el-input v-model="form.printFormat" placeholder="请输入打印格式" />
+            <el-input v-model="form.printFormat" placeholder="请输入打印格式"/>
           </el-form-item>
           <el-form-item label="库位" prop="storageLocation">
-            <el-input v-model="form.storageLocation" placeholder="请输入库位" />
+            <el-input v-model="form.storageLocation" placeholder="请输入库位"/>
           </el-form-item>
           <el-form-item label="区域编号" prop="warehouseregionId">
             <el-input
@@ -273,7 +273,7 @@
             />
           </el-form-item>
           <el-form-item label="删除标志" prop="delFlag">
-            <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+            <el-input v-model="form.delFlag" placeholder="请输入删除标志"/>
           </el-form-item>
           <el-form-item label="创建者编号" prop="createById">
             <el-input
@@ -315,14 +315,14 @@
                     type="primary"
                     size="mini"
                     @click="updateOrderData"
-                    >保存修改
+                  >保存修改
                   </el-button>
                   <el-button
                     :disabled="tableData.length != 1"
                     type="primary"
                     size="mini"
                     @click="getOrderData"
-                    >箱单
+                  >箱单
                   </el-button>
                   <el-button
                     :disabled="tableData.length < 2"
@@ -330,7 +330,7 @@
                     type="primary"
                     size="mini"
                     @click="chooseOneToPrint"
-                    >{{ chooseState ? "退出批箱单" : "批箱单" }}
+                  >{{ chooseState ? "退出批箱单" : "批箱单" }}
                   </el-button>
                   <el-switch
                     class="ml10 mr10"
@@ -340,7 +340,7 @@
                   >
                   </el-switch>
                   <el-button type="primary" size="mini" @click="readStateChange"
-                    >{{ isStartReadNum ? "停止读数" : "开始读数" }}
+                  >{{ isStartReadNum ? "停止读数" : "开始读数" }}
                   </el-button>
                 </div>
                 <div class="weightWrap">
@@ -416,7 +416,7 @@
                     size="mini"
                     :disabled="chooseState"
                     @click="handleDeleteOne(scope.$index)"
-                    >删除
+                  >删除
                   </el-button>
                 </template>
               </el-table-column>
@@ -697,7 +697,7 @@
                 size="mini"
                 :disabled="!currentRow.lotNum || isDisabled || printAuto"
                 @click="addProductHandler"
-                >添加
+              >添加
               </el-button>
             </div>
             <div class="table-wrap">
@@ -748,12 +748,12 @@ import {
   AutoPrinting,
 } from "@/api/codeListManage/productCodeList";
 import codeListPrint from "@/utils/print/codeListPrint";
-import { getServerPrintData } from "@/utils/print/printUtils";
-import { v4 as uuidv4 } from "uuid";
+import {getServerPrintData} from "@/utils/print/printUtils";
+import {v4 as uuidv4} from "uuid";
 
 export default {
   name: "ProductCodeList",
-  dicts: ["packaging_type", "port", "coding_list_format", "direction_of_twist"],
+  dicts: ["packaging_type", "port", "coding_list_format", "direction_of_twist", "automatic_printing"],
   data() {
     return {
       isStartReadNum: false, //是否开始读取重量
@@ -812,33 +812,33 @@ export default {
       },
       rules: {
         packaging: [
-          { required: true, message: "请选择包装", trigger: "change" },
+          {required: true, message: "请选择包装", trigger: "change"},
         ],
         machineTool: [
-          { required: true, message: "请选择机台", trigger: "change" },
+          {required: true, message: "请选择机台", trigger: "change"},
         ],
         workShifts: [
-          { required: true, message: "请选择班次", trigger: "change" },
+          {required: true, message: "请选择班次", trigger: "change"},
         ],
         productionDate: [
-          { required: true, message: "请选择生产日期", trigger: "change" },
+          {required: true, message: "请选择生产日期", trigger: "change"},
         ],
-        levels: [{ required: true, message: "请选择等级", trigger: "change" }],
+        levels: [{required: true, message: "请选择等级", trigger: "change"}],
         // foreignTradeNumber: [
         //   { required: true, message: "请输入外贸号", trigger: "blur" },
         // ],
         canisterWeight: [
-          { required: true, message: "请选择筒重", trigger: "change" },
+          {required: true, message: "请选择筒重", trigger: "change"},
         ],
         boxWeight: [
-          { required: true, message: "请选择箱重/车重", trigger: "change" },
+          {required: true, message: "请选择箱重/车重", trigger: "change"},
         ],
         tubeColor: [
-          { required: true, message: "请选择管色", trigger: "change" },
+          {required: true, message: "请选择管色", trigger: "change"},
         ],
-        comPort: [{ required: true, message: "请选择端口", trigger: "change" }],
+        comPort: [{required: true, message: "请选择端口", trigger: "change"}],
         printFormat: [
-          { required: true, message: "请选择格式", trigger: "change" },
+          {required: true, message: "请选择格式", trigger: "change"},
         ],
       },
       dropDownData: {},
@@ -935,8 +935,8 @@ export default {
     },
   },
   mounted() {
-    console.log(this.dict.type.packaging_type);
-    // this.initWebSocket();
+    // console.log(this.dict.type.packaging_type);
+
   },
   beforeDestroy() {
     this.closeWebSocket();
@@ -959,7 +959,13 @@ export default {
       }
     },
     initWebSocket() {
-      console.log("开始连接ws", process.env.VUE_APP_BASE_WS_API);
+
+      // console.log("开始连接ws", process.env.VUE_APP_BASE_WS_API);
+      let automatis_printing = this.dict.type.automatic_printing
+      let frequency = automatis_printing.find(item => item.label == "frequency")?.value
+      if (frequency == undefined) {
+        frequency = 30;
+      }
       const wsUrl = "ws:" + process.env.VUE_APP_BASE_WS_API + "/currentWeight";
       this.websocket = new WebSocket(wsUrl);
       this.websocket.addEventListener("open", (event) => {
@@ -967,40 +973,45 @@ export default {
         this.isStartReadNum = true;
         this.$message.success("已开启读数");
       });
+      let initialWeight = null; // 初始化基准重量
+      const weightChangeThreshold = 0.001; // 定义重量变化阈值x
+      let shouldPrint = false; // 用于控制是否应该打印
 
       this.websocket.addEventListener("message", async (event) => {
         console.log(event);
-        if (!this.printAuto) {
-          // 手动打印直接退出
+        if (!this.printAuto) return;
+        const weightData = JSON.parse(event.data);
+        const weight = weightData.weight;
+        this.nowWeight = weight
+        if (weight === 0.0 || weight === 0) {
+          this.resetWeightStatus();
+          shouldPrint = false; // 重量为0时,重置打印标志
           return;
         }
-        const weight = JSON.parse(event.data).weight;
-        this.nowWeight = weight;
-        if (weight == 0.0 || weight == 0) {
-          // 如果重量为0不做任何处理
-          this.waiting = 0;
-          this.lastWeight = 0;
+
+        if (initialWeight === null) {
+          initialWeight = weight;
+          shouldPrint = true; // 第一次有效重量,允许打印
           return;
+        }
+
+        const weightDifference = Math.abs(weight - initialWeight);
+        if (weightDifference > weightChangeThreshold) {
+          initialWeight = weight;
+          this.waiting = 0; // 重量有显著变化,重置等待计数并允许打印
+          shouldPrint = true;
         } else {
-          if (this.lastWeight != weight) {
-            this.lastWeight = weight;
-            return;
-          } else {
-            this.waiting++;
-            if (this.waiting != 30) {
-              return;
-            } else {
-              this.waiting = 0;
-              let isValidate = await this.addIsValidate();
-              console.log("isValidate", isValidate);
-              if (isValidate) {
-                // 开始执行打印逻辑
-                this.setWeight(weight);
-              }
-            }
+          this.waiting++;
+          if (this.waiting === frequency && shouldPrint) { // 只有在应该打印且等待计数达标时才打印
+            this.waiting = 0;
+            shouldPrint = false; // 打印后禁止下一次打印,直到重量再次变化
+            const isValidate = await this.validateAndPrint(weight);
+            console.log("isValidate", isValidate);
           }
         }
       });
+
+
       this.websocket.addEventListener("on", (e) => {
         console.log(e, "连接已建立");
       });
@@ -1013,6 +1024,20 @@ export default {
         console.log("关闭WebSocket连接");
       });
     },
+    // 用于重置与重量相关的状态
+    resetWeightStatus() {
+      this.waiting = 0;
+      this.lastWeight = 0;
+    },
+
+    // 整合验证和打印标签的逻辑
+    async validateAndPrint(weight) {
+      let isValidate = await this.addIsValidate();
+      if (isValidate) {
+        this.setWeight(weight);
+      }
+      return isValidate;
+    },
     // 开始设置新的重量
     async setWeight(weight) {
       console.log("设置新的重量", weight);
@@ -1166,7 +1191,7 @@ export default {
     // 毛重改变回调
     changeGrossWeight(row) {
       console.log(row);
-      let { boxWeight, grossWeight, canisterWeight, canisterNum } = row;
+      let {boxWeight, grossWeight, canisterWeight, canisterNum} = row;
       if (!Number(grossWeight)) return;
       row.suttle = (
         Number(grossWeight) -
@@ -1217,7 +1242,7 @@ export default {
       this.$refs.form.validate(async (valid) => {
         if (valid) {
           try {
-            let { sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight } =
+            let {sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight} =
               this.count;
             let rowData = newData.machineTool
               ? JSON.parse(JSON.stringify(newData))
@@ -1273,7 +1298,7 @@ export default {
       this.$refs.form.validate(async (valid) => {
         if (valid) {
           try {
-            let { sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight } =
+            let {sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight} =
               this.count;
             let rowData = JSON.parse(JSON.stringify(this.tableData[0]));
             this.printTableData = [rowData];
@@ -1417,7 +1442,7 @@ export default {
     },
     // 计算净重
     getSuttle() {
-      let { boxWeight, canisterWeight, canisterNum } = this.form;
+      let {boxWeight, canisterWeight, canisterNum} = this.form;
       return (Number(boxWeight) - canisterWeight * canisterNum).toFixed(2);
     },
     // 表格点击回调
@@ -1437,7 +1462,7 @@ export default {
             this.$refs.form.validate(async (valid) => {
               if (valid) {
                 try {
-                  let { sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight } =
+                  let {sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight} =
                     this.count;
                   let rowData = JSON.parse(JSON.stringify(row));
                   this.printTableData = [rowData];
@@ -1516,7 +1541,8 @@ export default {
         if (res.code == 200) {
           this.dropDownData = res.data;
         }
-      } catch (error) {}
+      } catch (error) {
+      }
     },
     /** 查询产品码单列表 */
     getList() {
@@ -1712,7 +1738,8 @@ export default {
           this.getList();
           this.$modal.msgSuccess("删除成功");
         })
-        .catch(() => {});
+        .catch(() => {
+        });
     },
     /** 导出按钮操作 */
     handleExport() {