wangfei
2024-08-01 c1cb663f4308ddf02ee6ea435c809c8162585b03
Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes
23个文件已修改
3个文件已添加
1850 ■■■■ 已修改文件
UI-Project/src/utils/api.js 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/GlassStorage/MaterialRackManagement.vue 1052 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/gateway/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/push.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/entity/LoadPosition.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/controller/RawUsageController.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/entity/RawUsage.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/RawUsageService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/impl/RawUsageServiceImpl.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/ShelfRack.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/request/RawUsageAndShelfRack.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/StorageTask.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/request/StorageTaskRequest.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/api.js
@@ -1,14 +1,42 @@
// src/services/api.js
import request from 'request';
import request from '../utils/request';
import { ElMessage } from 'element-plus';
 // Replace with your actual backend base URL
export const findTasks = (id, newState) => {
// Function to find list of raw usages
const BASE_URL = 'glassStorage/api/rawUsage';
const taskBASE_URL = 'glassStorage/api/storageTask';
export const findTasks = () => {
  const url = `glassStorage/api/storageTask/findTasks`;
  const options = {
    method: 'POST',
    method: 'get',
    url,
    json: true,
    body: { id, enableState: newState }
  };
  return new Promise((resolve, reject) => {
    request(options, (error, response, body) => {
      if (error) {
        reject(new Error(error.message));
      } else {
        resolve(body);
      }
    });
  });
};
export const findList = (params) => {
  const url = `${BASE_URL}/findList`;
  const options = {
    method: 'post',
    url,
    json: true,
    body: params
  };
  return new Promise((resolve, reject) => {
@@ -21,3 +49,157 @@
    });
  });
};
// Function to find raw usage by ID
export const findById = (id) => {
  const url = `${BASE_URL}/${id}`;
  const options = {
    method: 'get',
    url,
    json: true
  };
  return new Promise((resolve, reject) => {
    request(options, (error, response, body) => {
      if (error) {
        reject(new Error(error.message));
      } else {
        resolve(body);
      }
    });
  });
};
// Function to insert a new raw usage
export const insertRawUsage = (rawUsage) => {
  const url = `${BASE_URL}`;
  const options = {
    method: 'post',
    url,
    json: true,
    body: rawUsage
  };
  return new Promise((resolve, reject) => {
    request(options, (error, response, body) => {
      if (error) {
        reject(new Error(error.message));
      } else {
        resolve(body);
      }
    });
  });
};
export const updateRawUsage = async (rawUsage) => {
  try {
    const response = await request.post(`${BASE_URL}/updaterawUsage`, rawUsage);
    ElMessage.success('修改成功');
    return response.data;
  } catch (error) {
    ElMessage.error('修改失败');
    throw error;
  }
};
export const deleteRawUsage = async (id) => {
  try {
    const response = await request.post(`${BASE_URL}/id`, id);
    ElMessage.success('删除原始使用数据成功');
    return response.data;
  } catch (error) {
    ElMessage.error('删除原始使用数据失败');
    throw error;
  }
};
export const inStorage = async (RawUsageAndShelfRack) => {
  try {
    const response = await request.post(`${BASE_URL}/inStorage`, RawUsageAndShelfRack);
    ElMessage.success('入库操作成功');
    return response.data;
  } catch (error) {
    ElMessage.error('入库操作失败');
    throw error;
  }
};
export const outStorage = async (RawUsageAndShelfRack) => {
  try {
    const response = await request.post(`${BASE_URL}/outStorage`, RawUsageAndShelfRack);
    ElMessage.success('出库操作成功');
    return response.data;
  } catch (error) {
    ElMessage.error('出库操作失败');
    throw error;
  }
};
export const taskUpdate = async (task) => {
  try {
    const response = await request.post(`${taskBASE_URL}/taskUpdate`, task);
    return response.data;
  } catch (error) {
    throw error;
  }
};
const API_URL = 'glassStorage/api/shelfRack';  // Adjust this based on your actual API URL
export const shelfRackfindList = (params) => {
  return request.post(`${API_URL}/findList`, params)
    .then(response => response.data)
    .catch(error => {
      throw error;  // Handle errors appropriately in your frontend
    });
};
export const shelfRackfindById = (id) => {
  return request.get(`${API_URL}/${id}`)
    .then(response => response.data)
    .catch(error => {
      throw error;
    });
};
export const insertShelfRack = (shelfRack) => {
  return request.post(`${API_URL}`, shelfRack)
    .then(response => response.data)
    .catch(error => {
      throw error;
    });
};
export const updateShelfRack = (shelfRack) => {
  return request.put(`${API_URL}`, shelfRack)
    .then(response => response.data)
    .catch(error => {
      throw error;
    });
};
export const shelfRackdeleteById = (id) => {
  return request.delete(`${API_URL}/${id}`)
    .then(response => response.data)
    .catch(error => {
      throw error;
    });
};
export const findShelfRack = () => {
  return request.get(`${API_URL}/findshelfrack`)
    .then(response => response.data)
    .catch(error => {
      throw error;
    });
};
UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
@@ -1,119 +1,174 @@
<template>
  <div  class="app-container" style="height: 600px;">
    <!-- <el-card style="flex: 1; margin-left: 10px; " :loading="loading"> -->
      <div slot="header" class="clearfix" style="display: flex; align-items: center;">
<!-- 左侧按钮组 -->
<div >
  <el-button type="success" size="mini" style="margin-left: 10px;" @click="storage()">原片仓储详情</el-button>
  <el-button type="success" size="mini" @click="handleInbound()">入库</el-button>
  <el-button type="success" size="mini" >吊装位入库</el-button>
</div>
<!-- 右侧选择框 -->
<el-form-item style="margin-top: 15px; width: 150px;margin-left: 10px;">
  <el-select v-model="formData2.dzw" placeholder="请选择吊装位">
    <el-option label="吊装位1" value="吊装位1"></el-option>
    <el-option label="吊装位2" value="吊装位2"></el-option>
    <!-- 根据实际情况添加更多选项 -->
  </el-select>
</el-form-item>
</div>
<el-dialog v-model="Hidden" top="10vh" width="80%"  >
  <div class="app-container">
    <el-card style="flex: 1; margin-left: 10px" :loading="loading">
      <div
        slot="header"
        class="clearfix"
        style="display: flex; align-items: center"
      >
        <!-- 左侧按钮组 -->
        <div>
          <el-button type="success" size="mini" @click="storage()"
            >原片仓储详情</el-button
          >
          <el-button type="success" size="mini" @click="handleInbound()"
            >入库</el-button
          >
          <el-button type="success" size="mini">吊装位入库</el-button>
        </div>
        <!-- 右侧选择框 -->
        <el-form-item style="margin-top: 15px; width: 150px">
          <el-select v-model="formData2.dzw" placeholder="请选择吊装位">
            <el-option label="吊装位1" value="吊装位1"></el-option>
            <el-option label="吊装位2" value="吊装位2"></el-option>
            <!-- 根据实际情况添加更多选项 -->
          </el-select>
        </el-form-item>
      </div>
      <el-dialog v-model="Hidden" top="10vh" width="80%">
        <el-table
          :data="tableData"
          v-model="dialogVisible3"
          style="width: 98%; height: 200px"
          @selection-change="handleSelectionChange"
          :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
          ref="table"
          empty-text="No Data"
        >
          <el-table-column prop="number" label="库位号"></el-table-column>
          <el-table-column prop="rawType" label="类型"></el-table-column>
          <el-table-column prop="rawWidth" label="长度(mm)"></el-table-column>
          <el-table-column prop="rawHeight" label="高度(mm)"></el-table-column>
          <el-table-column
            prop="rawThickness"
            label="厚度(mm)"
          ></el-table-column>
          <el-table-column prop="pieces" label="数量"></el-table-column>
          <el-table-column prop="createTime" label="入库时间"></el-table-column>
          <el-table-column prop="batchId" label="批次号"></el-table-column>
          <el-table-column
            align="center"
            label="料架状态"
            min-width="80"
            prop="enableState"
          >
            <template #default="scope">
              <el-tag
                :type="getTagType(scope.row.enableState)"
                @click="toggleStatus(scope.row)"
              >
                {{ scope.row.enableState === 1 ? "启用" : "未启用" }}
              </el-tag>
            </template>
          </el-table-column>
          <!-- 操作列 -->
          <el-table-column label="操作" width="250">
            <template #default="{ row }">
              <el-button
                type="primary"
                size="mini"
                @click="edithandleRowClick(row)"
                >修改</el-button
              >
              <el-button type="danger" size="mini" @click="handleDelete(row)"
                >删除</el-button
              >
              <el-button type="warning" size="mini" @click="handleCheckout(row)"
                >出库</el-button
              >
              <!-- <el-button type="success" size="mini" @click="addglass()">添加原片</el-button> -->
            </template>
          </el-table-column>
        </el-table>
        <el-pagination
          v-if="totalItems > 0"
          background
          layout="prev, pager, next"
          :total="totalItems"
          :page-size="pageSize"
          @current-change="handleCurrentChange"
        ></el-pagination>
      </el-dialog>
      <el-table
        :data="tableData" v-model="dialogVisible3"
        style="width: 98%; height: 500px"
        :data="tasktableData"
        style="width: 98%; height: 150px"
        @selection-change="handleSelectionChange"
        :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
        ref="table"
        empty-text="No Data"
      >
        <el-table-column prop="location" align="center" label="库位号"></el-table-column>
        <el-table-column prop="type" align="center" label="类型"></el-table-column>
        <el-table-column prop="length" align="center" label="长度(mm)"></el-table-column>
        <el-table-column prop="height" align="center" label="高度(mm)"></el-table-column>
        <el-table-column prop="thickness" align="center" label="厚度(mm)"></el-table-column>
        <el-table-column prop="quantity" align="center" label="数量"></el-table-column>
        <el-table-column prop="entry_time" align="center" min-width="180" label="入库时间"></el-table-column>
        <el-table-column prop="batchnumber" align="center" label="批次号"></el-table-column>
        <template #header>
          <div style="display: flex; align-items: center">
            <span style="font-size: 16px; font-weight: bold; margin-right: 20px"
              >任务列表</span
            >
          </div>
        </template>
        <el-table-column prop="id" label="Glassid"></el-table-column>
        <el-table-column
          prop="taskType"
          label="任务描述"
          width="250"
          :formatter="formatTaskType"
        ></el-table-column>
        <el-table-column
          prop="rawThickness"
          label="玻璃厚度"
        ></el-table-column>
        <el-table-column prop="color" label="玻璃膜系"></el-table-column>
        <el-table-column prop="startTime" label="创建时间"></el-table-column>
        <el-table-column
          align="center"
          label="料架状态"
          label="任务状态"
          min-width="80"
          prop="shelf_status"
          prop="taskState"
        >
        <template #default="scope">
        <el-tag :type="getTagType(scope.row.shelf_status)" @click="toggleStatus(scope.row)">
          {{ scope.row.shelf_status === 1 ? '启用' : '未启用' }}
        </el-tag>
      </template>
      </el-table-column>
          <template #default="scope">
            <el-tag :type="getTagType2(scope.row.taskState)">
              {{ scope.row.taskState == "completed" ? "完成" : "进行中" }}
            </el-tag>
          </template>
        </el-table-column>
        <!-- 操作列 -->
        <el-table-column label="操作" align="center" width="250">
        <el-table-column label="操作" width="350">
          <template #default="{ row }">
            <el-button type="primary" size="mini" @click="edithandleRowClick(row)">修改</el-button>
            <el-button type="danger" size="mini" @click="handleDelete(row)">删除</el-button>
            <el-button type="warning" size="mini" @click="handleCheckout(row)">出库</el-button>
            <!-- <el-button type="success" size="mini" @click="addglass()">添加原片</el-button> -->
            <el-button type="primary" size="mini" @click="handleRestart(row)"
              >重新开始</el-button
            >
            <el-button type="danger" size="mini" @click="handleDeletetask(row)"
              >删除任务</el-button
            >
            <el-button type="success" size="mini" @click="handleComplete(row)"
              >任务完成</el-button
            >
          </template>
        </el-table-column>
      </el-table>
      <el-pagination
        v-if="totalItems > 0"
        background
        layout="prev, pager, next"
        :total="totalItems"
        :page-size="pageSize"
        @current-change="handleCurrentChange"
      ></el-pagination>
  </el-dialog>
  <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
  <el-table
    :data="tasktableData"
    height="240"
    @selection-change="handleSelectionChange"
    :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
    ref="table"
    empty-text="No Data"
  >
  <template #header>
        <div style="display: flex; align-items: center;">
          <span style="font-size: 16px; font-weight: bold; margin-right: 20px;">任务列表</span>
        </div>
      </template>
    <el-table-column prop="Glassid" label="Glassid"></el-table-column>
    <el-table-column prop="taskDescription" label="任务描述" width="250"></el-table-column>
    <el-table-column prop="glassThickness" label="玻璃厚度"></el-table-column>
    <el-table-column prop="glassFilm" label="玻璃膜系"></el-table-column>
    <el-table-column prop="creationTime" label="创建时间"></el-table-column>
    <el-table-column
      align="center"
      label="任务状态"
      min-width="80"
      prop="taskStatus"
    >
      <template #default="scope">
        <el-tag :type="getTagType2(scope.row.taskStatus)">
          {{ scope.row.taskStatus == 'completed' ? '完成' : '进行中' }}
        </el-tag>
      </template>
    </el-table-column>
    <!-- 操作列 -->
    <el-table-column label="操作" width="350">
      <template #default="{ row }">
        <el-button type="primary" size="mini" @click="handleRestart(row)">重新开始</el-button>
        <el-button type="danger" size="mini" @click="handleDeletetask(row)">删除任务</el-button>
        <el-button type="success" size="mini" @click="handleComplete(row)">任务完成</el-button>
      </template>
    </el-table-column>
  </el-table>
  </div>
  </el-card>
    <!-- </el-card> -->
    <div class="img-ypcc" >
      <div class="img-car1" :style="'z-index:999;left:397px;top:205px;position:absolute;'">
      <div v-show="cellshow1" style="margin-top:10px;width:200px;height:5px;background-color:#409EFF;"></div>
    </el-card>
    <div class="img-ypcc">
      <div
        class="img-car1"
        :style="'z-index:999;left:397px;top:205px;position:absolute;'"
      >
        <div
          v-show="cellshow1"
          style="
            margin-top: 10px;
            width: 200px;
            height: 5px;
            background-color: #409eff;
          "
        ></div>
      </div>
    </div>
    </div>
    <!-- 入库对话框 -->
    <el-dialog
      title="入库"
@@ -123,9 +178,9 @@
    >
      <el-form :model="formData" ref="form" label-width="80px">
        <el-form-item label="进库料架">
          <el-select v-model="formData.shelf" placeholder="请选择进库料架">
            <el-option label="A1" value="A1"></el-option>
            <el-option label="B2" value="B2"></el-option>
          <el-select v-model="formData.number" placeholder="请选择进库料架">
            <el-option label="1" value="1"></el-option>
            <el-option label="2" value="2"></el-option>
            <!-- 根据实际情况添加更多选项 -->
          </el-select>
        </el-form-item>
@@ -137,348 +192,555 @@
          </el-select>
        </el-form-item>
        <el-form-item label="宽度">
          <el-input v-model.number="formData.width" placeholder="请输入宽度"></el-input>
          <el-input
            v-model.number="formData.rawWidth"
            placeholder="请输入宽度"
          ></el-input>
        </el-form-item>
        <el-form-item label="高度">
          <el-input v-model.number="formData.height" placeholder="请输入高度"></el-input>
          <el-input
            v-model.number="formData.rawHeight"
            placeholder="请输入高度"
          ></el-input>
        </el-form-item>
        <el-form-item label="厚度">
          <el-input v-model.number="formData.thickness" placeholder="请输入厚度"></el-input>
          <el-input
            v-model.number="formData.rawThickness"
            placeholder="请输入厚度"
          ></el-input>
        </el-form-item>
        <el-form-item label="数量">
          <el-input v-model.number="formData.quantity" placeholder="请输入数量"></el-input>
          <el-input
            v-model.number="formData.pieces"
            placeholder="请输入数量"
          ></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="handleConfirmInbound">确 定</el-button>
        <el-button type="primary" @click="handleConfirmInbound"
          >确 定</el-button
        >
      </div>
    </el-dialog>
    <el-dialog title="添加原片"  v-model="dialogVisible3" width="50%">
    <el-form :model="formData3" ref="form" label-width="80px">
      <el-form-item label="颜色膜系">
        <el-input v-model="formData.selectedColor" readonly style="width: 250px; height: 35px; font-size: 20px"></el-input>
        <el-dropdown @command="handleCommand">
          <span class="el-dropdown-link">
            选择<i class="el-icon-arrow-down el-icon--right"></i>
          </span>
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item v-for="color in colors" :key="color['0_glass_id']" :command="color['0_glass_id']">
              {{ color['0_glass_id'] }}
            </el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>
      </el-form-item>
      <el-form-item label="长度">
        <el-input v-model="formData.width" required style="width: 250px; font-size: 20px" @focus="clearInput('wid')"></el-input>
      </el-form-item>
      <el-form-item label="高度">
        <el-input v-model="formData.height" required style="width: 250px; font-size: 20px" @focus="clearInput('heig')"></el-input>
      </el-form-item>
      <el-form-item label="厚度">
        <el-input v-model="formData.thickness" required style="width: 250px; font-size: 20px" @focus="clearInput('thinkness')"></el-input>
      </el-form-item>
      <el-form-item label="数量">
        <el-input-number v-model="formData.quantity" required :min="0" :max="9000" style="width: 250px; font-size: 20px" @focus="clearInput('num')"></el-input-number>
      </el-form-item>
    </el-form>
    <span slot="footer" class="dialog-footer">
      <el-button @click="dialogVisible3 = false">关闭</el-button>
      <el-button type="primary" @click="submitForm">提交</el-button>
    </span>
  </el-dialog>
  <el-dialog title="编辑" v-model="editdialogVisible" width="30%" @close="edithandleDialogClose">
      <el-form :model="editForm" ref="editFormRef" label-width="80px">
        <el-form-item label="数量">
          <el-input v-model="editForm.quantity"></el-input>
    <el-dialog title="添加原片" v-model="dialogVisible3" width="50%">
      <el-form :model="formData3" ref="form" label-width="80px">
        <el-form-item label="颜色膜系">
          <el-input
            v-model="formData.selectedColor"
            readonly
            style="width: 250px; height: 35px; font-size: 20px"
          ></el-input>
          <el-dropdown @command="handleCommand">
            <span class="el-dropdown-link">
              选择<i class="el-icon-arrow-down el-icon--right"></i>
            </span>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item
                v-for="color in colors"
                :key="color['0_glass_id']"
                :command="color['0_glass_id']"
              >
                {{ color["0_glass_id"] }}
              </el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
        </el-form-item>
        <el-form-item label="批次号">
          <el-input v-model="editForm.batchnumber"></el-input>
        </el-form-item>
        <el-form-item label="长度">
          <el-input v-model="editForm.length"></el-input>
          <el-input
            v-model="formData.width"
            required
            style="width: 250px; font-size: 20px"
            @focus="clearInput('wid')"
          ></el-input>
        </el-form-item>
        <el-form-item label="高度">
          <el-input v-model="editForm.height"></el-input>
          <el-input
            v-model="formData.height"
            required
            style="width: 250px; font-size: 20px"
            @focus="clearInput('heig')"
          ></el-input>
        </el-form-item>
        <el-form-item label="厚度">
          <el-input v-model="editForm.thickness"></el-input>
          <el-input
            v-model="formData.thickness"
            required
            style="width: 250px; font-size: 20px"
            @focus="clearInput('thinkness')"
          ></el-input>
        </el-form-item>
        <el-form-item label="数量">
          <el-input-number
            v-model="formData.quantity"
            required
            :min="0"
            :max="9000"
            style="width: 250px; font-size: 20px"
            @focus="clearInput('num')"
          ></el-input-number>
        </el-form-item>
      </el-form>
      <div  class="dialog-footer">
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible3 = false">关闭</el-button>
        <el-button type="primary" @click="submitForm">提交</el-button>
      </span>
    </el-dialog>
    <el-dialog
      title="编辑"
      v-model="editdialogVisible"
      width="30%"
      @close="edithandleDialogClose"
    >
      <el-form :model="editForm" ref="editFormRef" label-width="80px">
        <el-form-item label="数量">
          <el-input v-model="editForm.pieces"></el-input>
        </el-form-item>
        <el-form-item label="批次号">
          <el-input v-model="editForm.batchId"></el-input>
        </el-form-item>
        <el-form-item label="长度">
          <el-input v-model="editForm.rawWidth"></el-input>
        </el-form-item>
        <el-form-item label="高度">
          <el-input v-model="editForm.rawHeight"></el-input>
        </el-form-item>
        <el-form-item label="厚度">
          <el-input v-model="editForm.rawThickness"></el-input>
        </el-form-item>
      </el-form>
      <div class="dialog-footer">
        <el-button @click="editdialogVisible = false">取消</el-button>
        <el-button type="primary" @click="editsaveEdit">保存</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue'; // 导入 Vue 3 的模块
import * as echarts from 'echarts';
import { ElMessage, ElMessageBox } from 'element-plus'
import {tableData} from '@/stores/tableData.js';
    const loading = ref(false);
    const Hidden = ref(false)
    const totalItems = ref(0);
    totalItems.value = 10;
    const pageSize = 10;
    let currentPage = ref(1);
    const handleCurrentChange = (val) => {
      currentPage.value = val;
    };
   const getTagType2 =(status) => {
      switch (status) {
        case 'completed':
          return 'success';
        case 'in-progress':
          return 'info';
        case 'warning':
          return 'warning';
        case 'danger':
          return 'danger';
        default:
          return '';
      }
    }
    const getTagType =(status) => {
      return status === 1 ? 'success' : 'danger';
      // 根据状态值决定标签类型,这里假设状态为1时为成功(绿色),否则为失败(红色)
    }
    const toggleStatus = (row) => {
      // 切换料架状态的逻辑
      row.shelf_status = 1 - row.shelf_status; // Toggle between 0 and 1
      // 此处可以添加保存状态的逻辑,比如调用 API 更新数据
    };
   const tasktableData=ref([
    {
          Glassid: 'G001',
          taskDescription: '从吊装位【99】到仓位【56】',
          taskStatus: 'in-progress',
          glassThickness: '5mm',
          glassFilm: '膜系A',
          creationTime: '2024-06-19 10:00:00'
        },
        {
          Glassid: 'G002',
          taskDescription: '从吊装位【99】到仓位【56】',
          taskStatus: 'completed',
          glassThickness: '10mm',
          glassFilm: '膜系B',
          creationTime: '2024-06-19 11:00:00'
        }
        ]);
    const dialogVisible = ref(false);
    const formData = ref({
      shelf: '',
      color: '',
      width: '',
      height: '',
      thickness: '',
      quantity: ''
    });
    const formData2 = ref({
      dzw: '',
    });
    const handleDelete = (row) => {
  // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认
  ElMessageBox.confirm('确定要执行删除操作吗?', '确认删除', {
    confirmButtonText: '确认',
    cancelButtonText: '取消',
    type: 'warning',
  }).then(() => {
    // 点击确认按钮的回调,执行出库操作
    console.log('执行删除操作', row);
  }).catch(() => {
    // 点击取消按钮的回调,不执行任何操作
    console.log('取消删除操作');
  });
import { ref, onMounted, onBeforeUnmount } from "vue"; // 导入 Vue 3 的模块
//import * as echarts from 'echarts';
import { ElMessage, ElMessageBox } from "element-plus";
// import {tableData} from '@/stores/tableData.js';
import { WebSocketHost, host } from "@/utils/constants";
import { initializeWebSocket, closeWebSocket } from "@/utils/WebSocketService";
import {
  updateRawUsage,
  deleteRawUsage,
  inStorage,
  outStorage,
  taskUpdate,
} from "@/utils/api";
const loading = ref(false);
const Hidden = ref(false);
const tableData = ref([]);
const totalItems = ref(0);
totalItems.value = 10;
const pageSize = 10;
let currentPage = ref(1);
const handleCurrentChange = (val) => {
  currentPage.value = val;
};
    const handleCheckout = (row) => {
  // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认
  ElMessageBox.confirm('确定要执行出库操作吗?', '确认出库', {
    confirmButtonText: '确认',
    cancelButtonText: '取消',
    type: 'warning',
  }).then(() => {
    // 点击确认按钮的回调,执行出库操作
    console.log('执行出库操作', row);
  }).catch(() => {
    // 点击取消按钮的回调,不执行任何操作
    console.log('取消出库操作');
  });
const formatTaskType = (row, column) => {
  if (row.taskType === "从仓位到吊装位") {
    return `从仓位${row.shelfRack}到吊装位${row.loadRack}`;
  } else if (row.taskType === "从仓位到上片位") {
    return `从仓位${row.shelfRack}到上片位${row.loadRack}`;
  } else if (row.taskType === "从上片位到仓位") {
    return `从上片位${row.loadRack}到仓位${row.shelfRack}`;
  } else if (row.taskType === "从吊装位到仓位") {
    return `从吊装位${row.loadRack}到仓位${row.shelfRack}`;
  }
};
    const handleInbound = () => {
      // 打开入库对话框
      dialogVisible.value = true;
    };
    const storage = () => {
      // 打开入库对话框
      Hidden.value = true;
    };
    const handleCloseDialog = () => {
      // 关闭对话框时重置表单数据
      formData.value = {
        shelf: '',
        color: '',
        width: '',
        height: '',
        thickness: '',
        quantity: ''
const getTagType2 = (status) => {
  switch (status) {
    case "completed":
      return "success";
    case "in-progress":
      return "info";
    case "warning":
      return "warning";
    case "danger":
      return "danger";
    default:
      return "";
  }
};
const getTagType = (status) => {
  return status === 1 ? "success" : "danger";
  // 根据状态值决定标签类型,这里假设状态为1时为成功(绿色),否则为失败(红色)
};
const toggleStatus = (row) => {
  // 切换料架状态的逻辑
  row.enableState = 1 - row.enableState; // Toggle between 0 and 1
  // 此处可以添加保存状态的逻辑,比如调用 API 更新数据
};
const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/storageTask`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  tableData.value = data.rack[0]; // 假设 tableData 是响应式对象或变量
  tableData.value.forEach((item) => {
    // 获取 createTime 的时间戳
    const createTimeTimestamp = item.createTime;
    // 创建日期对象
    const date = new Date(createTimeTimestamp);
    // 格式化日期时间为本地格式
    const formattedDateTime = date.toLocaleString();
    // 替换原来的 createTime 字段为格式化后的日期时间字符串
    item.createTime = formattedDateTime;
  });
  tasktableData.value = data.tasks[0]; // 假设 tasktableData 是响应式对象或变量
  tasktableData.value.forEach((item) => {
    // 获取 createTime 的时间戳
    const createTimeTimestamp = item.startTime;
    // 创建日期对象
    const date = new Date(createTimeTimestamp);
    // 格式化日期时间为本地格式
    const formattedDateTime = date.toLocaleString();
    // 替换原来的 createTime 字段为格式化后的日期时间字符串
    item.startTime = formattedDateTime;
  });
};
onMounted(() => {
  initializeWebSocket(socketUrl, handleMessage);
});
onBeforeUnmount(() => {
  console.log("关闭了");
  closeWebSocket();
});
const tasktableData = ref([]);
const dialogVisible = ref(false);
const formData = ref({
  number: "",
  color: "",
  rawWidth: "",
  rawHeight: "",
  rawThickness: "",
  pieces: "",
  loadRack: 1,
});
const formData2 = ref({
  dzw: "",
});
const handleDelete = (row) => {
  // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认
  ElMessageBox.confirm("确定要执行删除操作吗?", "确认删除", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      // 点击确认按钮的回调,执行出库操作
      const intNumber = {
        id: parseInt(row.number),
      };
      dialogVisible.value = false;
    };
    const handleConfirmInbound = () => {
      // 处理确认入库逻辑,可以在这里提交表单或者执行其他操作
      console.log('Confirm Inbound:', formData.value);
      // 关闭对话框
      dialogVisible.value = false;
    };
    const dialogVisible3 = ref(false);
    const colors = ref([
      { '0_glass_id': 'Red' },
      { '0_glass_id': 'Green' },
      { '0_glass_id': 'Blue' }
      // Add more colors as needed
    ]);
    const formData3 = ref({
      selectedColor: '',
      wid: '',
      heig: '',
      thinkness: '',
      num: ''
      deleteRawUsage(intNumber);
      console.log("执行删除操作");
    })
    .catch(() => {
      // 点击取消按钮的回调,不执行任何操作
      console.log("取消删除操作");
    });
    const addglass = () => {
      // 打开入库对话框
      dialogVisible3.value = true;
    };
    const handleCommand = (command) => {
      formData.value.selectedColor = command;
    };
    const clearInput = (field) => {
      formData.value[field] = '';
    };
    const submitForm = () => {
      console.log('提交数据:', formData.value);
      dialogVisible3.value = false;
      // Add your submit logic here
    };
    const editdialogVisible = ref(false);
    const editForm = ref({
      quantity: '',
      batchnumber: '',
      length:'',
      height:'',
      thickness:''
    });
    const editFormRef = ref(null);
    let currentRow = ref(null);
    // 处理行点击事件
    const edithandleRowClick = (row) => {
      currentRow.value = row;
      console.log(row)
      editForm.value.quantity = row.quantity.toString();
      editForm.value.batchnumber = row.batchnumber;
      editForm.value.length = row.length;
      editForm.value.height = row.height;
      editForm.value.thickness = row.thickness;
      editdialogVisible.value = true;
      console.log(editForm.value)
    };
    // 添加保存编辑内容
    const editsaveEdit = () => {
      if (!currentRow.value) return;
      // 更新当前行数据
      currentRow.value.quantity = parseInt(editForm.value.quantity);
      currentRow.value.batchnumber = editForm.value.batchnumber;
      // 关闭对话框
      editdialogVisible.value = false;
    };
    // 对话框关闭时重置编辑表单和当前行数据
    const edithandleDialogClose = () => {
      editForm.value.quantity = '';
      editForm.value.batchnumber = '';
      editForm.value.width = '';
      editForm.value.height = '';
      editForm.value.thickness = '';
      currentRow.value = null;
    };
    const handleRestart = (row) => {
  // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认
  ElMessageBox.confirm('确定要执行重新开始操作吗?', '确认重新开始', {
    confirmButtonText: '确认',
    cancelButtonText: '取消',
    type: 'warning',
  }).then(() => {
    // 点击确认按钮的回调
    console.log('执行重新开始操作', row);
  }).catch(() => {
    // 点击取消按钮的回调,不执行任何操作
    console.log('取消重新开始操作');
  });
};
const handleCheckout = (row) => {
  // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认
  ElMessageBox.confirm("确定要执行出库操作吗?", "确认出库", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      // 点击确认按钮的回调,执行出库操作
      const raw={
        number:parseInt(row.number),
        loadRack:2
      }
      outStorage(raw)
      console.log("执行出库操作", row);
    })
    .catch(() => {
      // 点击取消按钮的回调,不执行任何操作
      console.log("取消出库操作");
    });
};
const handleInbound = () => {
  // 打开入库对话框
  dialogVisible.value = true;
};
const storage = () => {
  // 打开入库对话框
  Hidden.value = true;
};
const handleCloseDialog = () => {
  // 关闭对话框时重置表单数据
  formData.value = {
    number: "",
    color: "",
    rawWidth: "",
    rawHeight: "",
    rawThickness: "",
    pieces: "",
  };
  dialogVisible.value = false;
};
const handleConfirmInbound = () => {
  inStorage(formData.value);
  // 处理确认入库逻辑,可以在这里提交表单或者执行其他操作
  console.log("Confirm Inbound:", formData.value);
  // 关闭对话框
  dialogVisible.value = false;
};
const dialogVisible3 = ref(false);
const colors = ref([
  { "0_glass_id": "Red" },
  { "0_glass_id": "Green" },
  { "0_glass_id": "Blue" },
  // Add more colors as needed
]);
const formData3 = ref({
  selectedColor: "",
  wid: "",
  heig: "",
  thinkness: "",
  num: "",
});
const addglass = () => {
  // 打开入库对话框
  dialogVisible3.value = true;
};
const handleCommand = (command) => {
  formData.value.selectedColor = command;
};
const clearInput = (field) => {
  formData.value[field] = "";
};
const submitForm = () => {
  console.log("提交数据:", formData.value);
  dialogVisible3.value = false;
  // Add your submit logic here
};
const editdialogVisible = ref(false);
const editForm = ref({
  id: "",
  pieces: "",
  batchId: "",
  rawWidth: "",
  rawHeight: "",
  rawThickness: "",
});
const editFormRef = ref(null);
let currentRow = ref(null);
// 处理行点击事件
const edithandleRowClick = (row) => {
  currentRow.value = row;
  console.log(row);
  editForm.value.pieces = row.pieces.toString();
  editForm.value.batchId = row.batchId;
  editForm.value.rawWidth = row.rawWidth;
  editForm.value.rawHeight = row.rawHeight;
  editForm.value.rawThickness = row.rawThickness;
  editForm.value.id = row.number;
  editdialogVisible.value = true;
  console.log(editForm.value);
};
// 添加保存编辑内容
const editsaveEdit = () => {
  if (!currentRow.value) return;
  // 更新当前行数据
  currentRow.value.pieces = editForm.value.pieces;
  currentRow.value.batchId = editForm.value.batchId;
  currentRow.value.rawWidth = editForm.value.rawWidth;
  currentRow.value.rawHeight = editForm.value.rawHeight;
  currentRow.value.rawThickness = editForm.value.rawThickness;
  // 调用更新函数,并处理其返回的 Promise
  updateRawUsage(editForm.value);
  // 关闭对话框
  editdialogVisible.value = false;
};
// 对话框关闭时重置编辑表单和当前行数据
const edithandleDialogClose = () => {
  editForm.value.pieces = "";
  editForm.value.batchId = "";
  editForm.value.rawWidth = "";
  editForm.value.rawHeight = "";
  editForm.value.rawThickness = "";
  currentRow.value = null;
};
const handleRestart = (row) => {
  // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认
  ElMessageBox.confirm("确定要执行重新开始操作吗?", "确认重新开始", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      const taskdata={
        id:row.id,
        Type:"重新开始"
      }
      taskUpdate(taskdata);
      console.log("执行重新开始操作", row);
    })
    .catch(() => {
      // 点击取消按钮的回调,不执行任何操作
      console.log("取消重新开始操作");
    });
};
const handleDeletetask = (row) => {
  // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认
  ElMessageBox.confirm('确定要执行删除任务操作吗?', '确认删除任务', {
    confirmButtonText: '确认',
    cancelButtonText: '取消',
    type: 'warning',
  }).then(() => {
    // 点击确认按钮的回调
    console.log('执行删除任务操作', row);
  }).catch(() => {
    // 点击取消按钮的回调,不执行任何操作
    console.log('取消删除任务操作');
  });
  ElMessageBox.confirm("确定要执行删除任务操作吗?", "确认删除任务", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      // 点击确认按钮的回调
      const taskdata={
        id:row.id,
        Type:"删除"
      }
      taskUpdate(taskdata);
      console.log("执行删除任务操作", row);
    })
    .catch(() => {
      // 点击取消按钮的回调,不执行任何操作
      console.log("取消删除任务操作");
    });
};
const handleComplete = (row) => {
  // 使用 Element UI 的 MessageBox.confirm 方法进行二次确认
  ElMessageBox.confirm('确定要执行任务完成操作吗?', '确认任务完成', {
    confirmButtonText: '确认',
    cancelButtonText: '取消',
    type: 'warning',
  }).then(() => {
    // 点击确认按钮的回调
    console.log('执行任务完成操作', row);
  }).catch(() => {
    // 点击取消按钮的回调,不执行任何操作
    console.log('取消任务完成操作');
  });
  ElMessageBox.confirm("确定要执行任务完成操作吗?", "确认任务完成", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      const taskdata={
        id:row.id,
        Type:"完成"
      }
      taskUpdate(taskdata);
      // 点击确认按钮的回调
      console.log("执行任务完成操作", row);
    })
    .catch(() => {
      // 点击取消按钮的回调,不执行任何操作
      console.log("取消任务完成操作");
    });
};
</script>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
#dt {
  display: block;
  float: left;
  line-height: 20px;
  margin-left: 100px;
}
#dta {
  display: block;
  float: left;
  line-height: 20px;
  margin-left: 80%;
}
#dialog-footer {
  text-align: center;
  margin-top: -15px;
}
.img-ypcc{
  margin-left: -40px;
  background-image:url('../../assets/ypcc.png');
.img-ypcc {
  margin-left: 80px;
  background-image: url("../../assets/ypcc.png");
  background-repeat: no-repeat;
    background-attachment: local;
    min-height: 600px;
    width: 1400px;
    max-width: 100%;
    background-size: 1400px 600px;
    overflow: hidden;
    position:relative;
    margin-top: -30px
  background-attachment: local;
  min-height: 600px;
  width: 1400px;
  max-width: 100%;
  background-size: 1400px 600px;
  overflow: hidden;
  position: relative;
  margin-top: 0px;
}
.img-car1{
  background-image:url('../../assets/ypccche.png');
.img-car1 {
  background-image: url("../../assets/ypccche.png");
  position: absolute;
  background-repeat: no-repeat;
    background-attachment: local;
    min-height: 400px;
    width: 200px;
    max-width: 100%;
    background-size: 200px 170px;
    overflow: hidden;
    position:relative
  background-attachment: local;
  min-height: 400px;
  width: 200px;
  max-width: 100%;
  background-size: 200px 170px;
  overflow: hidden;
  position: relative;
}
.custom-dialog {
  max-height: 90vh; /* 最大高度为视口高度的90% */
  overflow-y: auto; /* 对话框内部出现垂直滚动条 */
}
</style>
</style>
hangzhoumesParent/gateway/src/main/resources/application.yml
@@ -6,7 +6,7 @@
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        server-addr: 10.153.19.150:8848
    gateway:
      discovery:
        locator:
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
@@ -78,7 +78,7 @@
                            .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId)
                            .eq(EdgStorageCageDetails::getEngineerId, GlassInfo::getEngineerId))
                    .eq(GlassInfo::getGlassId,taskCache1.getGlassId())
                    .eq(EdgStorageCageDetails::getState,Const.GLASS_STATE_IN)
                    .eq(EdgStorageCageDetails::getState,Const.GLASS_STATE_OUT)
            );
            if(glassInfos.size()==1){
                GlassInfo glassInfo=glassInfos.get(0);
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/push.java
New file
@@ -0,0 +1,54 @@
package com.mes.job;
import cn.hutool.json.JSONObject;
import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
import com.mes.shelfrack.service.ShelfRackService;
import com.mes.storagetask.entity.request.StorageTaskRequest;
import com.mes.storagetask.service.StorageTaskService;
import com.mes.tools.WebSocketServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Slf4j
@Component
public class push {
    @Autowired
    private StorageTaskService storageTaskService;
    @Autowired
    private ShelfRackService shelfRackService;
    @Scheduled(fixedDelay = 2000)
    public void sendDownWorkstations() {
        log.info("发送任务信息和架子信息");
        JSONObject jsonObject = new JSONObject();
        List<RawUsageAndShelfRack> rack =  shelfRackService.selectshelf_rack();
        List<StorageTaskRequest>  tasks =  storageTaskService.Tasks();
        jsonObject.append("rack",rack);
        jsonObject.append("tasks",tasks);
        log.info(jsonObject.toString());
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("storageTask");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null&&webserver.session.isOpen()) {
                    log.info("已发送");
                    webserver.sendMessage(String.valueOf(jsonObject));
                }
            }
        }
    }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/entity/LoadPosition.java
@@ -1,5 +1,7 @@
package com.mes.loadposition.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -27,8 +29,8 @@
    /**
     *   
     */
    @ApiModelProperty(" ")
    private Long id;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     *  架子编号
@@ -58,7 +60,7 @@
     *  仓储任务编号
     */
    @ApiModelProperty("仓储任务编号")
    private Long storageTaskId;
    private Integer storageTaskId;
    /**
     *  上片位类型
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/controller/RawUsageController.java
@@ -1,5 +1,6 @@
package com.mes.rawusage.controller;
import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
import com.mes.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@@ -80,8 +81,8 @@
     */
    @ApiOperation(value = "修改", notes = "修改数据")
    @ApiResponses({@ApiResponse(code = 200, message = "操作成功")})
    @PutMapping
    public Result update( @RequestBody RawUsage rawUsage) {
    @PostMapping("/updaterawUsage")
    public Result updaterawUsage(@RequestBody RawUsage rawUsage) {
        boolean result = rawUsageService.updateById(rawUsage);
        return Result.success(result);
    }
@@ -89,14 +90,30 @@
    /**
     * 删除
     *
     * @param id
     * @param
     * @return
     */
    @ApiOperation(value = "删除", notes = "删除数据")
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable("id") Long id) {
        int result = rawUsageService.getBaseMapper().deleteById(id);
        return Result.success(result);
    @PostMapping("/id")
    public Result delete(@RequestBody RawUsage rawUsage) {
         rawUsageService.updateRawPackageAndStorageRack(rawUsage);
        return Result.success();
    }
    @ApiOperation(value = "入库", notes = "入库")
    @PostMapping("/inStorage")
    public Result inStorage(@RequestBody RawUsageAndShelfRack rawUsage) {
        rawUsageService.inStorage(rawUsage);
        return Result.success();
    }
    @ApiOperation(value = "出库", notes = "出库")
    @PostMapping("/outStorage")
    public Result outStorage(@RequestBody RawUsageAndShelfRack rawUsage) {
        rawUsageService.outStorage(rawUsage);
        return Result.success();
    }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/entity/RawUsage.java
@@ -2,6 +2,9 @@
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -27,8 +30,8 @@
    /**
     *   
     */
    @ApiModelProperty(" ")
    private Long id;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     *  玻璃类型
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/RawUsageService.java
@@ -2,6 +2,8 @@
import com.mes.rawusage.entity.RawUsage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.shelfrack.entity.ShelfRack;
import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
import java.util.List;
/**
@@ -12,6 +14,23 @@
    List<RawUsage> findList(RawUsage params);
    /**
     * @param raw
     * 修改
     */
    void updateRawPackageAndStorageRack(RawUsage raw);
    /**
     * @param raw
     * 入库
     */
    void inStorage(RawUsageAndShelfRack raw);
    /**
     * @param raw
     * 出库
     */
    void outStorage(RawUsageAndShelfRack raw);
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/impl/RawUsageServiceImpl.java
@@ -6,9 +6,20 @@
import com.mes.rawusage.mapper.RawUsageMapper;
import com.mes.rawusage.entity.RawUsage;
import com.mes.rawusage.service.RawUsageService;
import com.mes.shelfrack.entity.ShelfRack;
import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
import com.mes.shelfrack.mapper.ShelfRackMapper;
import com.mes.storagetask.entity.StorageTask;
import com.mes.storagetask.mapper.StorageTaskMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.InvocationTargetException;
import java.time.LocalDateTime;
import java.util.List;
import static cn.hutool.core.date.DateTime.now;
/**
 * @author system
@@ -19,6 +30,10 @@
    @Autowired
    private RawUsageMapper rawUsageMapper;
    @Autowired
    private ShelfRackMapper shelfRackMapper;
    @Autowired
    private StorageTaskMapper storageTaskMapper;
    @Override
    public List<RawUsage> findList(RawUsage params){
@@ -26,6 +41,98 @@
        return rawUsageMapper.selectList(query);
    }
    @Override
    public void updateRawPackageAndStorageRack(RawUsage raw) {
        // Step 1: 查询raw_package_id
        LambdaQueryWrapper<ShelfRack> queryWrapper = Wrappers.lambdaQuery(ShelfRack.class)
                .eq(ShelfRack::getNumber, raw.getId());
        ShelfRack shelfRack = shelfRackMapper.selectOne(queryWrapper);
        if (shelfRack == null) {
            throw new RuntimeException("未找到与指定货架ID关联的原料包信息");
        }
        // Step 2: 更新raw_package表
        RawUsage rawUsage=new RawUsage();
        rawUsage.setState("空闲");
        rawUsage.setId(shelfRack.getRawPackageId());
        rawUsageMapper.updateById(rawUsage);
        // Step 3: 更新storage_rack表
        ShelfRack rack = new ShelfRack();
        rack.setState("空闲");
        rack.setRawPackageId(null);  // 设置RawPackageId为特定的空值,例如0
        LambdaQueryWrapper<ShelfRack> queryWrapper2 = Wrappers.lambdaQuery(ShelfRack.class)
                .eq(ShelfRack::getNumber, raw.getId());
        shelfRackMapper.update(rack, queryWrapper2);
    }
    @Override
    public void inStorage(RawUsageAndShelfRack raw) {
        RawUsage rawPackage = new RawUsage();
        BeanUtils.copyProperties(raw,rawPackage);
        rawPackage.setRawType(raw.getRawThickness() + raw.getColor());
        rawPackage.setState("使用中");
        rawPackage.setLeftPieces(rawPackage.getPieces());
        rawUsageMapper.insert(rawPackage);
        // 更新架表
        ShelfRack rack = new ShelfRack();
        rack.setState("使用中");
        rack.setRawPackageId(rawPackage.getId());  // 设置RawPackageId为特定的空值,例如0
        LambdaQueryWrapper<ShelfRack> queryWrapper = Wrappers.lambdaQuery(ShelfRack.class)
                .eq(ShelfRack::getNumber, raw.getNumber());
        shelfRackMapper.update(rack, queryWrapper);
        StorageTask storageTask=new StorageTask();
        storageTask.setTaskState("等待中");
        storageTask.setTaskType("从仓位到吊装位");
        storageTask.setLoadRack(raw.getLoadRack());
        storageTask.setShelfRack(raw.getNumber());
        storageTask.setRouteGroup(1);
        storageTask.setStartTime(now());
        storageTask.setFinishTime(now());
        insertTask(storageTask);
    }
    @Override
    public void outStorage(RawUsageAndShelfRack raw) {
        ShelfRack rack = new ShelfRack();
        rack.setState("等待出库");
        rack.setRawPackageId(null);  // 设置RawPackageId为特定的空值,例如0
        LambdaQueryWrapper<ShelfRack> queryWrapper = Wrappers.lambdaQuery(ShelfRack.class)
                .eq(ShelfRack::getNumber, raw.getNumber());
        shelfRackMapper.update(rack, queryWrapper);
        StorageTask storageTask=new StorageTask();
        storageTask.setTaskState("等待中");
        storageTask.setTaskType("从仓位到吊装位");
        storageTask.setLoadRack(raw.getLoadRack());
        storageTask.setShelfRack(raw.getNumber());
        storageTask.setRouteGroup(1);
        storageTask.setStartTime(now());
        storageTask.setFinishTime(now());
        insertTask(storageTask);
    }
    public void insertTask(StorageTask storageTask) {
        storageTaskMapper.insert(storageTask);
    }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java
@@ -1,5 +1,6 @@
package com.mes.shelfrack.controller;
import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
import com.mes.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@@ -105,7 +106,7 @@
    @ApiResponses({@ApiResponse(code = 200, message = "查询成功")})
    @GetMapping("/findshelfrack")
    public Result findshelfrack() {
        List<Map<String, Object>> result = shelfRackService.selectshelf_rack();
        List<RawUsageAndShelfRack> result = shelfRackService.selectshelf_rack();
        return Result.success(result);
    }
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/ShelfRack.java
@@ -2,6 +2,9 @@
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -27,8 +30,8 @@
    /**
     *   
     */
    @ApiModelProperty(" ")
    private Long id;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     *  架子编号
@@ -46,7 +49,7 @@
     *  包号编号
     */
    @ApiModelProperty("包号编号")
    private Long rawPackageId;
    private Integer rawPackageId;
    /**
     *  修改时间
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/request/RawUsageAndShelfRack.java
New file
@@ -0,0 +1,76 @@
package com.mes.shelfrack.entity.request;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
public class RawUsageAndShelfRack {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("ID")
    private Integer id;
    @ApiModelProperty("玻璃类型")
    private String rawType;
    @ApiModelProperty("宽度")
    private Float rawWidth;
    @ApiModelProperty("高度")
    private Float rawHeight;
    @ApiModelProperty("厚度")
    private Float rawThickness;
    @ApiModelProperty("颜色")
    private String color;
    @ApiModelProperty("总数量")
    private Integer pieces;
    @ApiModelProperty("剩余数量")
    private Integer leftPieces;
    @ApiModelProperty("物料编码")
    private String qrcode;
    @ApiModelProperty("创建时间")
    private Date createTime;
    private Date productionTime;
    @ApiModelProperty("批次号")
    private String batchId;
    @ApiModelProperty("架子编号")
    private String number;
    @ApiModelProperty("工作状态")
    private String state;
    @ApiModelProperty("包号编号")
    private Integer rawPackageId;
    private Date modTime;
    @ApiModelProperty("启用状态")
    private String enableState;
    @ApiModelProperty("上片位编号")
    private String loadRack;
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.mes.shelfrack.entity.ShelfRack;
import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
import java.util.List;
import java.util.Map;
@@ -18,5 +19,5 @@
public interface ShelfRackMapper extends MPJBaseMapper<ShelfRack> {
    List<Map<String, Object>> selectshelf_rack();
    List<RawUsageAndShelfRack> selectshelf_rack();
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java
@@ -2,6 +2,7 @@
import com.mes.shelfrack.entity.ShelfRack;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
import java.util.List;
import java.util.Map;
@@ -14,6 +15,6 @@
    List<ShelfRack> findList(ShelfRack params);
    List<Map<String, Object>> selectshelf_rack();
    List<RawUsageAndShelfRack> selectshelf_rack();
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java
@@ -7,6 +7,7 @@
import com.github.yulichang.toolkit.JoinWrappers;
import com.mes.common.config.Const;
import com.mes.rawusage.entity.RawUsage;
import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
import com.mes.shelfrack.mapper.ShelfRackMapper;
import com.mes.shelfrack.entity.ShelfRack;
import com.mes.shelfrack.service.ShelfRackService;
@@ -51,7 +52,7 @@
    @Override
    public  List<Map<String, Object>> selectshelf_rack() {
    public  List<RawUsageAndShelfRack> selectshelf_rack() {
        return baseMapper.selectshelf_rack();
    }
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java
@@ -1,5 +1,7 @@
package com.mes.storagetask.controller;
import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
import com.mes.storagetask.entity.request.StorageTaskRequest;
import com.mes.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@@ -106,9 +108,22 @@
    @ApiResponses({@ApiResponse(code = 200, message = "查询成功")})
    @GetMapping("/findTasks")
    public Result findLatestTasks() {
        List<Map<String, Object>> result = storageTaskService.Tasks();
        List<StorageTaskRequest> result = storageTaskService.Tasks();
        return Result.success(result);
    }
    @ApiOperation(value = "任务操作", notes = "任务操作")
    @PostMapping("/taskUpdate")
    public Result taskUpdate(@RequestBody Map<String, Object> storageTaskMap) {
        StorageTask task = new StorageTask();
        task.setType((String) storageTaskMap.get("Type")); // 假设Type是存储在Map中的一个键
        task.setId((int) storageTaskMap.get("id"));
        storageTaskService.taskUpdate(task);
        return Result.success();
    }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/StorageTask.java
@@ -2,11 +2,15 @@
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.xmlbeans.impl.xb.xsdschema.Public;
import org.springframework.stereotype.Component;
/**
@@ -27,9 +31,8 @@
    /**
     *   
     */
    @ApiModelProperty(" ")
    private Long id;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     *  任务类型
     */
@@ -72,6 +75,8 @@
    @ApiModelProperty("完成时间")
    private Date finishTime;
    @ApiModelProperty("前端任务类型")
    private String Type;
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/request/StorageTaskRequest.java
New file
@@ -0,0 +1,77 @@
package com.mes.storagetask.entity.request;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
public class StorageTaskRequest {
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 任务类型
     */
    @ApiModelProperty("任务类型")
    private String taskType;
    @ApiModelProperty("前端任务类型")
    private String Type;
    /**
     * 工作状态
     */
    @ApiModelProperty("工作状态")
    private String taskState;
    /**
     * 仓储架号
     */
    @ApiModelProperty("仓储架号")
    private String shelfRack;
    /**
     * 上片位编号
     */
    @ApiModelProperty("上片位编号")
    private String loadRack;
    /**
     * 线路
     */
    @ApiModelProperty("线路")
    private Integer routeGroup;
    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date startTime;
    /**
     * 完成时间
     */
    @ApiModelProperty("完成时间")
    private Date finishTime;
    @ApiModelProperty("颜色")
    private String color;
    @ApiModelProperty("厚度")
    private Float rawThickness;
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.storagetask.entity.StorageTask;
import com.mes.storagetask.entity.request.StorageTaskRequest;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@@ -19,6 +20,6 @@
public interface StorageTaskMapper extends BaseMapper<StorageTask> {
    List<Map<String, Object>> selectTasks();
    List<StorageTaskRequest>  selectTasks();
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java
@@ -2,6 +2,7 @@
import com.mes.storagetask.entity.StorageTask;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.storagetask.entity.request.StorageTaskRequest;
import java.util.List;
import java.util.Map;
@@ -17,5 +18,7 @@
    Map<String, Optional<StorageTask>> findLatestTasks();
    List<Map<String, Object>> Tasks();
    List<StorageTaskRequest>  Tasks();
    void taskUpdate(StorageTask storageTask);
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java
@@ -3,6 +3,14 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.loadposition.entity.LoadPosition;
import com.mes.loadposition.mapper.LoadPositionMapper;
import com.mes.rawusage.entity.RawUsage;
import com.mes.rawusage.mapper.RawUsageMapper;
import com.mes.shelfrack.entity.ShelfRack;
import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
import com.mes.shelfrack.mapper.ShelfRackMapper;
import com.mes.storagetask.entity.request.StorageTaskRequest;
import com.mes.storagetask.mapper.StorageTaskMapper;
import com.mes.storagetask.entity.StorageTask;
import com.mes.storagetask.service.StorageTaskService;
@@ -25,6 +33,13 @@
    @Autowired
    private StorageTaskMapper storageTaskMapper;
    @Autowired
    private LoadPositionMapper loadPositionMapper;
    @Autowired
    private ShelfRackMapper shelfRackMapper;
    @Autowired
    private RawUsageMapper rawUsageMapper;
    @Override
    public List<StorageTask> findList(StorageTask params){
@@ -56,12 +71,97 @@
    @Override
    public  List<Map<String, Object>> Tasks() {
    public   List<StorageTaskRequest>  Tasks() {
        return baseMapper.selectTasks();
    }
    @Override
    public void taskUpdate(StorageTask request) {
        Integer taskId = request.getId();
        String taskType = request.getTaskType();
        String Type = request.getType();
        String taskState = request.getTaskState();
        String shelfRack = request.getShelfRack();
        String loadRack = request.getLoadRack();
        if ("重新开始".equals(Type)) {
            StorageTask storageTask = new StorageTask();
            storageTask.setTaskState("等待中");
            LambdaQueryWrapper<StorageTask> queryWrapper = Wrappers.lambdaQuery(StorageTask.class)
                    .eq(StorageTask::getId, request.getId());
            storageTaskMapper.update(request,queryWrapper);
        } else if ("完成".equals(Type)) {
            StorageTask existingTask = storageTaskMapper.selectById(taskId);
            if (existingTask != null && "正在工作".equals(existingTask.getTaskState())) {
                if ("从仓位到上片位".equals(taskType) || "从仓位到吊装位".equals(taskType)) {
                    LoadPosition loadPosition = new LoadPosition();
                    loadPosition.setState("正在使用");
                    loadPosition.setStorageTaskId(request.getId());
                    LambdaQueryWrapper<LoadPosition> queryWrapper = Wrappers.lambdaQuery(LoadPosition.class)
                            .eq(LoadPosition::getNumber, request.getLoadRack());
                    loadPositionMapper.update(loadPosition, queryWrapper);
                    StorageTask storageTask = new StorageTask();
                    storageTask.setTaskState("正在使用");
                    LambdaQueryWrapper<StorageTask> StorageTaskqueryWrapper = Wrappers.lambdaQuery(StorageTask.class)
                            .eq(StorageTask::getId, request.getId());
                    storageTaskMapper.update(request,StorageTaskqueryWrapper);
                } else if ("从上片位到仓位".equals(taskType)) {
                    LoadPosition loadPosition = new LoadPosition();
                    loadPosition.setState("使用中");
                    loadPosition.setStorageTaskId(null);
                    LambdaQueryWrapper<LoadPosition> queryWrapper = Wrappers.lambdaQuery(LoadPosition.class)
                            .eq(LoadPosition::getNumber, request.getLoadRack());
                    loadPositionMapper.update(loadPosition, queryWrapper);
                    ShelfRack loshelfRack = new ShelfRack();
                    LambdaQueryWrapper<RawUsage> RawUsagequeryWrapper = Wrappers.lambdaQuery(RawUsage.class)
                            .eq(RawUsage::getId,loshelfRack.getRawPackageId());
                    RawUsage RawUsage = rawUsageMapper.selectOne(RawUsagequeryWrapper);
                    if(RawUsage.getLeftPieces()==0){
                        loshelfRack.setState("空闲");
                    }else {
                        loshelfRack.setState("使用中");
                    }
                    LambdaQueryWrapper<ShelfRack> loshelfRackqueryWrapper = Wrappers.lambdaQuery(ShelfRack.class)
                            .eq(ShelfRack::getNumber, request.getLoadRack());
                    shelfRackMapper.update(loshelfRack, loshelfRackqueryWrapper);
                } else if ("从吊装位到仓位".equals(taskType)) {
                    LoadPosition loadPosition = new LoadPosition();
                    loadPosition.setState("空闲");
                    loadPosition.setStorageTaskId(null);
                    LambdaQueryWrapper<LoadPosition> queryWrapper = Wrappers.lambdaQuery(LoadPosition.class)
                            .eq(LoadPosition::getNumber, request.getLoadRack());
                    loadPositionMapper.update(loadPosition, queryWrapper);
                    ShelfRack loshelfRack = new ShelfRack();
                    LambdaQueryWrapper<RawUsage> RawUsagequeryWrapper = Wrappers.lambdaQuery(RawUsage.class)
                            .eq(RawUsage::getId,loshelfRack.getRawPackageId());
                    RawUsage RawUsage = rawUsageMapper.selectOne(RawUsagequeryWrapper);
                    if(RawUsage.getLeftPieces()==1){
                        loshelfRack.setEnableState("启用");
                    }else {
                        loshelfRack.setEnableState(loshelfRack.getEnableState());
                    }
                    loadPosition.setState("使用中");
                    LambdaQueryWrapper<ShelfRack> loshelfRackqueryWrapper = Wrappers.lambdaQuery(ShelfRack.class)
                            .eq(ShelfRack::getNumber, request.getLoadRack());
                    shelfRackMapper.update(loshelfRack, loshelfRackqueryWrapper);
                }
                StorageTask storageTask = new StorageTask();
                storageTask.setTaskState("已完成");
                LambdaQueryWrapper<StorageTask> StorageTaskqueryWrapper = Wrappers.lambdaQuery(StorageTask.class)
                        .eq(StorageTask::getId, request.getId());
                storageTaskMapper.update(storageTask, StorageTaskqueryWrapper);
            }
        } else if ("删除".equals(Type)) {
            LambdaQueryWrapper<StorageTask> StorageTaskqueryWrapper = Wrappers.lambdaQuery(StorageTask.class)
                    .eq(StorageTask::getId, request.getId());
            storageTaskMapper.delete(StorageTaskqueryWrapper);
        }
    }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml
@@ -2,15 +2,24 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mes.shelfrack.mapper.ShelfRackMapper">
        <select id="selectshelf_rack" resultType="java.util.Map">
        <![CDATA[
            SELECT a.number, b.raw_type, b.raw_width, b.raw_height, b.raw_thickness, b.left_pieces, a.mod_time, a.enable_state, b.pieces,
                   datediff(now(), b.create_time) as rukutime,
                   concat(if(ROUND(b.left_pieces / b.pieces * 100, 0) < 20, 20, ROUND(b.left_pieces / b.pieces * 100, 0)), '%') as bfb
            FROM shelf_rack AS a
                     LEFT JOIN raw_usage AS b ON a.raw_package_id = b.id
            ]]>
    </select>
    <resultMap id="ShelfRackResultMap" type="com.mes.shelfrack.entity.request.RawUsageAndShelfRack">
        <result property="number" column="number"/>
        <result property="rawType" column="raw_type"/>
        <result property="rawWidth" column="raw_width"/>
        <result property="rawHeight" column="raw_height"/>
        <result property="rawThickness" column="raw_thickness"/>
        <result property="enableState" column="enable_state"/>
        <result property="pieces" column="pieces"/>
        <result property="createTime" column="createTime"  />
        <result property="batchId" column="batch_id"/>
    </resultMap>
    <select id="selectshelf_rack" resultMap="ShelfRackResultMap">
    <![CDATA[
        SELECT a.number, b.raw_type, b.raw_width, b.raw_height, b.raw_thickness, a.enable_state, b.pieces,
               b.batch_id,DATE_FORMAT(b.create_time, '%Y-%m-%d %H:%i:%s') as createTime
        FROM shelf_rack AS a
                 LEFT JOIN raw_usage AS b ON a.raw_package_id = b.id
        ]]>
</select>
</mapper>
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml
@@ -3,8 +3,21 @@
<mapper namespace="com.mes.storagetask.mapper.StorageTaskMapper">
    <resultMap id="StorageTaskRequest" type="com.mes.storagetask.entity.request.StorageTaskRequest">
        <result property="loadRack" column="load_rack"/>
        <result property="color" column="color"/>
        <result property="taskState" column="task_state"/>
        <result property="shelfRack" column="shelf_rack"/>
        <result property="startTime" column="start_time"/>
        <result property="rawThickness" column="raw_thickness"/>
        <result property="routeGroup" column="route_group"/>
        <result property="id" column="id"  />
        <result property="taskType" column="task_type"/>
    </resultMap>
    <select id="selectTasks" resultType="java.util.Map">
    <select id="selectTasks" resultMap="StorageTaskRequest">
        <![CDATA[
        SELECT d.*, g.raw_thickness, g.color
        FROM (
hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java
@@ -1,6 +1,9 @@
package mes;
import com.mes.GlassStorageApplication;
import com.mes.rawusage.entity.RawUsage;
import com.mes.rawusage.service.RawUsageService;
import com.mes.shelfrack.entity.ShelfRack;
import com.mes.shelfrack.service.ShelfRackService;
import com.mes.storagetask.entity.StorageTask;
import com.mes.storagetask.service.StorageTaskService;
@@ -30,6 +33,8 @@
    private StorageTaskService storageTaskService;
    @Autowired
    private ShelfRackService shelfRackService;
    @Autowired
    private RawUsageService rawUsageService;
    @Test
@@ -57,6 +62,13 @@
    @Test
    public void updateRawPackageAndStorageRack() {
        RawUsage raw=new RawUsage();
        raw.setId(null);
        rawUsageService.updateRawPackageAndStorageRack(raw);
    }
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
@@ -77,17 +77,9 @@
        // 调用 DownWorkstationService 中的方法清除指定工位ID的信息
        int workstationId = (int) requestData.get("workstationId");
        int totalWorkstations = downWorkstationService.getTotalQuantity(workstationId);
        int downWorkstations = downWorkstationService.getRacksNumber(workstationId);
        if (downWorkstations == totalWorkstations) {
            downWorkstationService.clearFlowCardId(workstationId);
            return Result.build(200, "清除工位信息成功", 1);
        } else {
            // 如果总数量和落架数量不一致,返回错误响应
            return Result.build(500, "清除工位信息失败", 1);
        }
        // 构建响应数据