仓储异常情况断联,任务无法执行,添加clear按钮可手动清除异常状态任务,
6个文件已修改
147 ■■■■ 已修改文件
UI-Project/src/views/GlassStorage/rawfilmstorage2.vue 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/impl/RawGlassRawGlassStorageTaskServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/controller/RawGlassStorageDetailsController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/GlassStorage/rawfilmstorage2.vue
@@ -387,6 +387,75 @@
// catch (error) {
//   }
// }
const dialogVisible = ref(false);
const detailsList = ref([]);
const selectedIds = ref<string[]>([]);
// 新增:加载异常数据列表
const loadDetails = async () => {
  try {
    const response = await request.get("/glassStorage/rawGlassStorageDetails/selectDetails");
    if (response.code === 200) {
      detailsList.value = response.data;
    } else {
      ElMessage.error("数据加载失败:" + response.msg);
    }
  } catch (error) {
    ElMessage.error("请求失败:" + (error as Error).message);
  }
};
// 新增:处理表格选择变化
const handleSelectionChange = (selection: any[]) => {
  selectedIds.value = selection.map(item => item.id);
};
// 新增:确认删除选中数据
const confirmDelete = async () => {
  if (selectedIds.value.length === 0) {
    ElMessage.warning("Select the data you want to delete first");
    return;
  }
  try {
    const confirmResult = await ElMessageBox.confirm(
      t('searchOrder.deletemessage'),
      t('customer.prompt'),
      {
        confirmButtonText: t('workOrder.yes'),
        cancelButtonText: t('workOrder.cancel'),
        type: "warning"
      }
    );
    if (confirmResult === "confirm") {
      // 批量删除请求
      const deletePromises = selectedIds.value.map(id =>
        request.post(`/glassStorage/rawGlassStorageDetails/deleteData?id=${id}`)
      );
      const results = await Promise.all(deletePromises);
      const allSuccess = results.every(res => res.code === 200);
      if (allSuccess) {
        ElMessage.success("success");
        dialogVisible.value = false;
        loadDetails(); // 刷新数据
        selectedIds.value = [];
      } else {
        ElMessage.error("error");
      }
    }
  } catch (error) {
    if (error !== "cancel") {
      ElMessage.error("删除失败:" + (error as Error).message);
    }
  }
};
const handleClearClick = () => {
  dialogVisible.value = true;
  loadDetails(); // 打开弹窗时加载数据
};
// 任务成功处理
const successfull = async (row) => {
  try {
@@ -511,6 +580,9 @@
        $t('searchOrder.historicaltasks')
        }}
      </el-button>
      <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleClearClick">
        clear
      </el-button>
      <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="datetimerange" format="YYYY/MM/DD HH:mm:ss"
        value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="$t('film.starttime')"
        :end-placeholder="$t('film.endtime')" :default-time="defaultTime" />
@@ -557,9 +629,9 @@
          <el-table-column prop="createTime" align="center" :label="$t('film.createtime')" />
          <el-table-column fixed="right" :label="$t('film.operate')" align="center">
            <template #default="scope">
              <el-button :disabled="(scope.row.taskState >2)" type="text" plain @click="successfull(scope.row)">{{
              <el-button type="text" plain @click="successfull(scope.row)">{{
                $t('searchOrder.successfullyprocessed') }}</el-button>
              <el-button :disabled="(scope.row.taskState >2)" type="text" plain @click="handleptask(scope.row)">{{
              <el-button type="text" plain @click="handleptask(scope.row)">{{
                $t('searchOrder.taskfailure') }}</el-button>
            </template>
          </el-table-column>
@@ -603,6 +675,25 @@
      }" v-show="cards[45]">
      </div>
    </div>
    <el-dialog title="Select the data you want to delete first" v-model="dialogVisible" width="60%" @close="selectedIds = []">
      <el-table :data="detailsList" border style="width: 100%; margin-bottom: 20px;"
        @selection-change="handleSelectionChange">
        <el-table-column prop="id" label="ID" width="80"></el-table-column>
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="slot" :label="$t('film.slot')"></el-table-column>
        <el-table-column prop="shelf" :label="$t('reportWork.shelfnumbera')"></el-table-column>
        <el-table-column prop="state" :label="$t('reportWork.state')" :formatter="formatState"></el-table-column>
        <!-- 可根据需要添加其他字段列 -->
      </el-table>
      <template #footer>
        <el-button @click="dialogVisible = false">{{t('workOrder.cancel')}}</el-button>
        <el-button type="danger" @click="confirmDelete" :disabled="selectedIds.length === 0">
         {{t('reportWork.sure')}}
        </el-button>
      </template>
    </el-dialog>
    <el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%">
      <el-table ref="table" style="margin-top: 20px;height: 700px;" :data="tableDatab" v-loading="loading"
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
@@ -49,4 +49,6 @@
    List<RawGlassStorageDetailsDTO> patternUsage(String width, String height, String thickness, String films);
    RawGlassStorageDetails generateDetails(RawGlassStorageDetails details, Integer targetSlot);
    boolean deleteDetails(String id);
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
@@ -57,16 +57,15 @@
    public boolean deleteRawGlassStorageDetails(String device_id) {
        QueryWrapper<RawGlassStorageDetails> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("device_id", device_id);
        return remove(queryWrapper);//remove才是删除,delete得用另外的依赖,默认方法是remove返回bool
        return remove(queryWrapper);
    }
    @Override
    //返回类型                    方法名              传输值
    public List<RawGlassStorageDetails> selectDetails() {
//        QueryWrapper<RawGlassStorageDetails>queryWrapper=new QueryWrapper<>();
//         queryWrapper.eq("id",rs.getId());
//        return list(queryWrapper);
        return list();
        QueryWrapper<RawGlassStorageDetails> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("state", Const.RAW_GLASS_STATE_CAR,
                Const.RAW_GLASS_STATE_WAIT_OUT, Const.RAW_GLASS_STATE_RUNNING);
        return list(queryWrapper);
    }
    // 空架子到吊装位
@@ -336,4 +335,11 @@
        targetDetails.setState(Const.RAW_GLASS_STATE_IN);
        return targetDetails;
    }
    @Override
    public boolean deleteDetails(String id) {
        return removeById(id);
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/impl/RawGlassRawGlassStorageTaskServiceImpl.java
@@ -102,6 +102,7 @@
                    .eq(RawGlassStorageDetails::getSlot, task.getStartSlot()));
            log.info("任务状态已更改为:已完成");
            this.update(new LambdaUpdateWrapper<RawGlassStorageTask>()
                    .eq(RawGlassStorageTask::getId, taskId)
                    .in(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW, Const.RAW_GLASS_TASK_RUNNING)
                    .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_SUCCESS));
            switch (taskType) {
@@ -138,7 +139,7 @@
        if (taskType.equals(Const.RAW_GLASS_TASK_TYPE_IN_REQUEST)) {
            rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                    .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_OUT)
                    .eq(RawGlassStorageDetails::getSlot, task.getStartSlot())
                    .eq(RawGlassStorageDetails::getSlot, task.getEndSlot())
                    .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING, Const.RAW_GLASS_STATE_CAR));
        } else {
            rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
@@ -147,6 +148,7 @@
                    .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING, Const.RAW_GLASS_STATE_CAR));
        }
        this.update(new LambdaUpdateWrapper<RawGlassStorageTask>()
                .eq(RawGlassStorageTask::getId, taskId)
                .in(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW, Const.RAW_GLASS_TASK_RUNNING)
                .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_FAILURE));
        return Boolean.TRUE;
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
@@ -206,7 +206,8 @@
            log.info("将详情表的状态改为已出库");
            rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                    .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_OUT)
                    .eq(RawGlassStorageDetails::getSlot, task.getStartSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR));
                    .eq(RawGlassStorageDetails::getSlot, task.getStartSlot())
                    .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR));
            log.info("任务状态已更改为:已完成");
            rawGlassStorageTaskService.update(new LambdaUpdateWrapper<RawGlassStorageTask>()
                    .eq(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_RUNNING)
@@ -301,7 +302,7 @@
        // 步骤2:检查任务关联的空架子状态(需为“待入库”,且确实是空架子)
        RawGlassStorageDetails emptyShelf = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper<RawGlassStorageDetails>()
                .eq(RawGlassStorageDetails::getSlot, inRequestTask.getStartSlot()) // 起始位:仓库空架子位
                .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING)); // 待入库状态);
                .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
        if (emptyShelf == null) {
            log.info("空架子到吊装位请求任务关联的架子异常(非空架子或状态错误),跳过执行");
@@ -317,12 +318,6 @@
            log.info("吊装位{}已有关联架子,无法执行空架子到吊装位请求", inRequestTask.getEndSlot());
            return Boolean.FALSE;
        }
        // 步骤4:更新空架子状态为“执行中”
        rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                .eq(RawGlassStorageDetails::getSlot, emptyShelf.getSlot())
                .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN)
                .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
        // 步骤5:更新任务状态为“执行中”,避免重复执行
        rawGlassStorageTaskService.update(new LambdaUpdateWrapper<RawGlassStorageTask>()
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/controller/RawGlassStorageDetailsController.java
@@ -1,5 +1,6 @@
package com.mes.rawglassdetails.controller;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassdetails.entity.dto.RawGlassStorageDetailsDTO;
import com.mes.rawglassdetails.entity.request.RawGlassRequest;
import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
@@ -9,10 +10,7 @@
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@@ -151,5 +149,16 @@
        return Result.build(200, "查询成功", rawGlassStorageDetailsService.patternUsage(width, height, thickness, films));
    }
    @ApiOperation("查询原片存储详情")
    @GetMapping("/selectDetails")
    public Result<List<RawGlassStorageDetails>> selectDetails() {
        return Result.build(200, "查询成功", rawGlassStorageDetailsService.selectDetails());
    }
    @ApiOperation("清除异常数据")
    @PostMapping("/deleteData")
    public Result<Boolean> deleteDetails(String id) {
        return Result.success(rawGlassStorageDetailsService.deleteDetails(id));
    }
}