zhoushihao
2024-12-12 a5771725ac324c3dae366e6fcc38055b39ea4386
Merge remote-tracking branch 'origin/master'

# Conflicts:
# UI-Project/src/views/hollow/hollowequipment.vue
12个文件已修改
279 ■■■■ 已修改文件
UI-Project/src/lang/zh.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/returns.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/upreturns.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/upreturns2.vue 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/hollow/hollowequipment.vue 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/GlassInfoService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js
@@ -108,6 +108,8 @@
          takeon:'摆片完成',
      },
      searchOrder:{
        deleteTask:'删除工程',
        pdeleteTask:'是否删除工程?',
          searchlayout:'非钢化流程卡查询',
          fullfurnaces:'满炉数量',
          specifiedproject:'当前指定工程',
UI-Project/src/views/Returns/returns.vue
@@ -6,7 +6,6 @@
import {host, WebSocketHost} from '@/utils/constants'
import request from "@/utils/request"
import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
const router = useRouter()
const {t} = useI18n()
const dialogFormVisible = ref(false)
@@ -60,7 +59,6 @@
      const uniqueHeights = new Set(response.data.map(item => item.height));
      const uniqueFilmsIds = new Set(response.data.map(item => item.filmsId));
      const uniqueThicknesses = new Set(response.data.map(item => item.thickness));  
      selectOptions.value = Array.from(uniqueWidths).map(width => ({
        value: width,
        label: width,
@@ -93,6 +91,10 @@
  dialogFormVisible.value = true;
  selectgong();
};
// 删除
const handledelete = (row) => {
  blindb.value = true;
};
// 值班信息
const fetchFlowCardId = async () => {
  try  {
@@ -105,6 +107,33 @@
      tableDatax.value = response.data;
    } else {
      ElMessage.error(response.message);
    }
}
catch (error) {
    console.error(error);
  }
}
// 删除
const deleteTask = async () => {
  try {
    let engineeringId = window.localStorage.getItem('engineeringId')
    console.log(engineeringId);
    if (engineeringId !== '') {
      const response = await request.post('/loadGlass/engineering/engineering/deleteTask', {
        engineerId: engineeringId,
      })
      if (response.code == 200) {
        ElMessage.success(response.message);
        blindb.value = false;
      } else {
        ElMessage.error(response.message);
    }
  }
    else  {
      ElMessage({
        type: 'info',
        message: t('basicData.infonull'),
      })
    }
}
catch (error) {
@@ -523,10 +552,6 @@
const handleBinda = (row) => {
  blinda.value = true;
};
// 停止任务
const handleBindb = (row) => {
  blindb.value = true;
};
// 删除
const handleBindRacka = (row) => {
  workstationId.value = row.workstationId;
@@ -604,13 +629,12 @@
            $t('basicData.change')
          }}
        </el-button>
  </div>
    <el-button :disabled="!canSelectProject" style="margin-top: 5px;margin-left: 15px;"  type="primary" @click="selectproject">{{ $t('basicData.selectproject') }}</el-button>
    <el-button :disabled="!canSelectProject" :style="{ backgroundColor: canStartLoading ? 'green' : 'initial',color: canStartLoading ? 'white' : 'black', }" style="margin-top: 5px;margin-left: 20px;"  @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="handledelete">{{ $t('searchOrder.deleteTask') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
    <!-- <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="danger" @click="handleBindb">停止任务</el-button> -->
    <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
    <el-table
@@ -705,6 +729,16 @@
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="blindb" top="30vh" width="25%" :title="$t('searchOrder.pdeleteTask')">
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="deleteTask">
          {{ $t('basicData.confirm') }}
        </el-button>
        <el-button @click="blindb = false">{{ $t('basicData.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>
  <!-- <el-dialog v-model="blindb" top="30vh" width="25%" title="是否停止任务?" >
    <template #footer>
      <div id="dialog-footer">
UI-Project/src/views/Returns/upreturns.vue
@@ -6,7 +6,6 @@
import {host, WebSocketHost} from '@/utils/constants'
import request from "@/utils/request"
import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
const router = useRouter()
const {t} = useI18n()
const selectValuesa = reactive([]);
@@ -16,6 +15,7 @@
const dialogFormVisible = ref(false)
const blind = ref(false)
const blinda = ref(false)
const blindb = ref(false)
const dialoglea = ref(false)
const tableDatax = ref([])
const upstatus = ref(t('basicData.machineaa'));
@@ -72,6 +72,10 @@
onBeforeUnmount(() => {
  closeWebSocket();
});
// 删除
const handledelete = (row) => {
  blindb.value = true;
};
const requestData = {
  state: 100
};
@@ -113,6 +117,33 @@
      ElMessage.error(response.message);
    }
  } catch (error) {
    console.error(error);
  }
}
// 删除
const deleteTask = async () => {
  try {
    let engineeringId = window.localStorage.getItem('engineeringId')
    console.log(engineeringId);
    if (engineeringId !== '') {
      const response = await request.post('/loadGlass/engineering/engineering/deleteTask', {
        engineerId: engineeringId,
      })
      if (response.code == 200) {
        ElMessage.success(response.message);
        blindb.value = false;
      } else {
        ElMessage.error(response.message);
    }
  }
    else  {
      ElMessage({
        type: 'info',
        message: t('basicData.infonull'),
      })
    }
}
catch (error) {
    console.error(error);
  }
}
@@ -172,7 +203,6 @@
    console.error(error);
  }
}
// 查询数据
const selectReportData = async () => {
  let stateList = []
@@ -193,7 +223,6 @@
    ElMessage.error(response.message);
  }
};
// 值班信息
const fetchFlowCardId = async () => {
  try {
@@ -288,6 +317,7 @@
    <el-button style="margin-top: 5px;margin-left: 15px;"  type="primary" @click="selectproject">{{ $t('Mounting.previewproject') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" type="success" @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="handledelete">{{ $t('searchOrder.deleteTask') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
    <el-select disabled v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.oneloadingline')"
               style="margin-top: 5px;margin-left: 20px;">
@@ -393,6 +423,16 @@
    </template>
  </el-dialog>
  <el-dialog v-model="blindb" top="30vh" width="25%" :title="$t('searchOrder.pdeleteTask')">
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="deleteTask">
          {{ $t('basicData.confirm') }}
        </el-button>
        <el-button @click="blindb = false">{{ $t('basicData.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>
    <el-dialog v-model="dialoglea" top="15vh" width="70%" :title="$t('searchOrder.dutyinformation')">
      <el-table ref="table" style="margin-top: 20px;height: 300px;"
                :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
UI-Project/src/views/Returns/upreturns2.vue
@@ -6,7 +6,6 @@
import {host, WebSocketHost} from '@/utils/constants'
import request from "@/utils/request"
import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
const router = useRouter()
const {t} = useI18n()
const selectValuesa = reactive([]);
@@ -16,6 +15,7 @@
const dialogFormVisible = ref(false)
const blind = ref(false)
const blinda = ref(false)
const blindb = ref(false)
const dialoglea = ref(false)
const tableDatax = ref([])
const upstatus = ref(t('basicData.machineaa'));
@@ -51,6 +51,10 @@
    closeWebSocket(socket);
  }
});
// 删除
const handledelete = (row) => {
  blindb.value = true;
};
const fetchTableData = async () => {
  try {
    const response = await request.get("/loadGlass/up-patten-usage/prioritylist");
@@ -143,6 +147,33 @@
    ElMessage.warning(t('basicData.pausea'));
  }
}
// 删除
const deleteTask = async () => {
  try {
    let engineeringId = window.localStorage.getItem('engineeringId')
    console.log(engineeringId);
    if (engineeringId !== '') {
      const response = await request.post('/loadGlass/engineering/engineering/deleteTask', {
        engineerId: engineeringId,
      })
      if (response.code == 200) {
        ElMessage.success(response.message);
        blindb.value = false;
      } else {
        ElMessage.error(response.message);
    }
  }
    else  {
      ElMessage({
        type: 'info',
        message: t('basicData.infonull'),
      })
    }
}
catch (error) {
    console.error(error);
  }
}
// 暂停
const handleup = async () => {
  try {
@@ -170,7 +201,6 @@
    console.error(error);
  }
}
// 查询数据
const selectReportData = async () => {
  let stateList = []
@@ -191,7 +221,6 @@
    ElMessage.error(response.message);
  }
};
// 值班信息
const fetchFlowCardId = async () => {
  try {
@@ -237,7 +266,6 @@
    ElMessage.error(t('basicData.glassnull'));
  }
};
function getStatusType2(filmRemove) {
  switch (filmRemove) {
    case 0:
@@ -248,7 +276,6 @@
      return 'warning';
  }
}
function getStatusText2(filmRemove) {
  switch (filmRemove) {
    case 0:
@@ -286,9 +313,9 @@
    <el-button style="margin-top: 5px;margin-left: 15px;"  type="primary" @click="selectproject">{{ $t('Mounting.previewproject') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" type="success" @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="handledelete">{{ $t('searchOrder.deleteTask') }}</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
    <el-select disabled v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.twoloadingline')"
               style="margin-top: 5px;margin-left: 20px;">
    <el-select disabled v-model="selectValuesa[1]" clearable :placeholder="$t('Mounting.twoloadingline')" style="margin-top: 5px;margin-left: 20px;">
      <el-option :label="$t('Mounting.all')" value="0"></el-option>
      <el-option :label="$t('Mounting.oneloadingline')" value="1"></el-option>
      <el-option :label="$t('Mounting.twoloadingline')" value="2"></el-option>
@@ -302,9 +329,9 @@
    <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
    <el-table
    height="350"
     ref="table"
     :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
      height="350"
      ref="table"
      :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
      :data="tableData"
    >
      <el-table-column prop="layoutSequence" :label="$t('Mounting.project')" width="100" align="center"/>
@@ -477,6 +504,16 @@
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="blindb" top="30vh" width="25%" :title="$t('searchOrder.pdeleteTask')">
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="deleteTask">
          {{ $t('basicData.confirm') }}
        </el-button>
        <el-button @click="blindb = false">{{ $t('basicData.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>
  </div>
</template>
 
UI-Project/src/views/hollow/hollowequipment.vue
@@ -5,13 +5,13 @@
        <el-button id="searchButton" type="success" @click="handlezhiban">
          {{ $t('hellow.createtask') }}
        </el-button>
<!--        <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBinda">-->
<!--          {{ $t('hellow.starttask') }}-->
<!--        </el-button>-->
<!--        <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBindb">{{-->
<!--            $t('hellow.stoptask')-->
<!--          }}-->
<!--        </el-button>-->
        <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBinda">
          {{ $t('hellow.starttask') }}
        </el-button>
        <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBindb">{{
            $t('hellow.stoptask')
          }}
        </el-button>
    <el-switch style="margin-top: 7px;margin-left: 10px;" v-model="ganghua" class="mb-2" :inactive-text="$t('hellow.schedulingswitch')" @change="handleChange" />
  </div>
      <div style="margin-bottom: -5px;margin-left: 5px;">
@@ -46,15 +46,10 @@
              :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }">
      <el-table-column prop="sequence" :label="$t('hellow.order')" align="center"/>
      <el-table-column prop="thickness" :label="$t('hellow.thickness')" align="center"/>
      <el-table-column prop="layer" :label="$t('hellow.layer')" align="center"/>
      <el-table-column prop="filmsId" :label="$t('hellow.coatingtypes')" align="center"/>
      <el-table-column prop="layer" :label="$t('hellow.coatingtypes')" align="center"/>
      <el-table-column prop="height" :label="$t('hellow.height')" align="center"/>
      <el-table-column prop="width" :label="$t('hellow.width')" align="center"/>
      <el-table-column prop="state" :label="$t('hellow.state')" align="center">
        <template #default="scope">
          {{ scope.row.state == -1 ? "等待出片" : "出片完成" }}
        </template>
      </el-table-column>
      <el-table-column prop="state" :label="$t('hellow.state')" align="center"/>
    </el-table>
      <div style="display: flex;margin-left: 40%;margin-top: 10px;">
        <!-- <div style="float: center;"> -->
@@ -65,7 +60,7 @@
          layout="prev, pager, next"
          :total="30"
          :current-page.sync="currentPage"
          @current-change="handlePageChange"
          @current-change="handlePageChange1"
        />
      </div>
  </div>
@@ -196,6 +191,16 @@
        <el-pagination layout="prev, pager, next" :total="50"/>
      </div>
    </el-table>
    <div style="display: flex;margin-left: 40%;margin-top: 10px;">
  <el-pagination
           background
           size="large"
          layout="prev, pager, next"
          :total="30"
          :current-page.sync="currentPage2"
          @current-change="handlePageChange2"
        />
  </div>
  </el-dialog>
  <!-- 开始任务 -->
  <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('hellow.pstarttask')">
@@ -244,6 +249,7 @@
const dialogFormVisibleb = ref(false)
const dialogFormVisiblec = ref(false)
const dialogFormVisibled = ref(false)
const currentPage2 = ref(1)
const currentRow = reactive({});
const options = [
  {
@@ -262,13 +268,21 @@
let socket = null;
const socketUrl = `ws://${WebSocketHost}:${host}/api/hollowGlass/api/talk/HollowGlass`;
const currentPage = ref(parseInt(window.localStorage.getItem('currentPage')) || 1);
 console.log(currentPage.value);
watch(() => currentPage.value, (newVal) => {
  window.localStorage.setItem('currentPage', newVal);
});
const currentPageKey = computed(() => `93${currentPage.value - 1}`);
const handlePageChange = (newPage) => {
const handlePageChange1 = (newPage) => {
  currentPage.value = newPage;
  console.log(currentPage.value);
};
const handlePageChange2 = (newPage) => {
  currentPage2.value = newPage;
  console.log(currentPage2.value);
  // window.localStorage.setItem('page', currentPage2.value)
 fetchFlowBind(currentRow.projectNumber, currentRow.layer, currentPage2.value);
};
const handleMessage = (data) => {
  try {
@@ -306,10 +320,11 @@
};
// 缺片详情
const handleBindRack = (row) => {
  currentPage2.value = 1;
  const { projectNumber, layer } = row;
  currentRow.projectNumber  = row.projectNumber;
  dialogFormVisibleb.value = true;
  fetchFlowBind(projectNumber, layer);
  fetchFlowBind(projectNumber, layer,currentPage2.value);
};
// 领取任务
const handletake = (row) => {
@@ -360,13 +375,34 @@
//   }
// }
// 缺片详情
const fetchFlowBind = async (flowCardId, layer) => {
// const fetchData = async (page) => {
//   try {
//     var url="/hollowGlass/hollowGlassRelationInfo/queryLackByFlowCard?flowCardId="+flowCardId + "&layer=" + layer;
//     // const url = `/hollowGlass/hollowGlassRelationInfo/queryLackByFlowCard?flowCardId=${flowCardId.value}&layer=${layer.value}&page=${page}&size=1`; // 假设你的接口支持分页参数page和size
//     const response = await request.post(url);
//     if (response.code == 200) {
//       tableDatac.value = response.data[newPage]; // 假设返回的数据直接赋值给tableDatac
//       ElMessage.success(response.message);
//     } else {
//       ElMessage.error('数据加载失败');
//     }
//   } catch (error) {
//     ElMessage.error('请求出错');
//   }
// };
// // 初始化加载第一页数据
// fetchData(currentPage2.value);
const fetchFlowBind = async (flowCardId, layer, page) => {
  try {
    // let page = window.localStorage.getItem('page')
    var url="/hollowGlass/hollowGlassRelationInfo/queryLackByFlowCard?flowCardId="+flowCardId + "&layer=" + layer;
    const response = await request.post(url)
    if (response.code == 200) {
      // tableDatac.value = response.data[1];
      tableDatac.value = response.data;
  console.log(page);
  tableDatac.value = response.data[page];
  // window.localStorage.setItem('response.data',response.data)
      ElMessage.success(response.message);
    } else {
      ElMessage.error(response.message);
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
@@ -35,5 +35,7 @@
    List<HollowGlassInfoDTO> listBySize(String engineerId);
    void deleteTask(String engineerId);
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -143,5 +143,12 @@
        return baseMapper.listBySize(engineerId);
    }
    @Override
    public void deleteTask(String engineerId) {
        QueryWrapper<GlassInfo> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("engineer_id", engineerId);
        baseMapper.delete(queryWrapper);
    }
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java
@@ -97,6 +97,23 @@
    }
    @ApiOperation("删除工程上片")
    @PostMapping("/deleteTask") //调用上片任务
    @ResponseBody
    public  Result <Boolean> deleteTask(@RequestBody Engineering engineering) {
        //删除工程表、小片表、上片表,更改优化表状态
        boolean work=engineeringService.deleteTask(engineering.getEngineerId());
        glassInfoService.deleteTask(engineering.getEngineerId());
        upPattenUsageService.deleteTask(engineering.getEngineerId());
        optimizeProjectService.changeTask(engineering.getEngineerId(), 100);
        if (work) {
            return Result.build(200, "删除成功"+engineering.getEngineerId(), true);
        }else {
            return Result.build(200, "删除失败"+engineering.getEngineerId(), false);
        }
    }
    @ApiOperation("查询可以上片的工程号")
    @GetMapping("/selectTask") //调用上片任务
    @ResponseBody
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java
@@ -55,5 +55,8 @@
    boolean pauseTask(String engineerId, Integer state);
    boolean deleteTask(String engineerId);
//    boolean changeTask(String engineerId, Integer state, Integer filmRemove, Integer stationCell);
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
@@ -125,5 +125,13 @@
        return pauseWrapper.update();
    }
    @Override
    public boolean deleteTask(String engineerId) {
        //删除工程表
        QueryWrapper<Engineering> wrapper = new QueryWrapper<>();
        wrapper.eq("engineer_id", engineerId);
        return this.remove(wrapper);
    }
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
@@ -72,5 +72,7 @@
//     UpPattenUsage selectedEngineering(String engineerId, Integer filmRemove, Integer stationCell);
     UpPattenUsage selectedEngineering(String engineerId);
    void deleteTask(String engineerId);
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
@@ -137,6 +137,13 @@
    }
    @Override
    public void deleteTask(String engineerId) {
        QueryWrapper<UpPattenUsage> wrapper = new QueryWrapper<>();
        wrapper.eq("engineering_id",engineerId);
        this.remove(wrapper);
    }
    @Override
    public UpPattenUsage selectOverTask() {
        QueryWrapper<UpPattenUsage>wrapper = new QueryWrapper<>();
        wrapper.gt("state",0)