wu
2024-09-27 03baf3dc978f9e71d9e96a45978a42b932fbd505
Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes
24个文件已修改
1个文件已添加
1个文件已删除
844 ■■■■■ 已修改文件
UI-Project/src/lang/zh.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Caching/cachingun.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/GlassStorage/rawfilmstorage.vue 262 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Identify/identify.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/stockBasicData.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassPushMessage.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/push.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/controller/RawGlassStorageDetailsController.java 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/entity/request/RawGlassRequest.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/controller/RawGlassStorageStationController.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/RawGlassStorageStationMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js
@@ -525,6 +525,7 @@
        startslot:'开始工位',
        endslot:'目标工位',
        slotid:'格子ID',
        slot:'格子号',
        width:'原片宽',
        widtha:'原片宽:',
        inwidth:'请输入原片宽',
UI-Project/src/views/Caching/cachingun.vue
@@ -102,7 +102,7 @@
        glassId: row.glass_id,
        state: 9,
        line: 1001,
        workingProcedure: '磨边前理片笼',
        workingProcedure: '磨边',
    })
    if (response.code === 200) {
      ElMessage.success(response.message);
UI-Project/src/views/GlassStorage/rawfilmstorage.vue
@@ -17,46 +17,81 @@
const dialogFormVisiblea = ref(false)
const dialogFormVisibleb = ref(false)
const dialogFormVisiblec = ref(false)
const timeRange = ref(["2022-01-01", "2025-01-01"])
const timeRange = ref(["2022-01-01 00:00:00", "2025-01-01 00:00:00"])
const selectValuesa = reactive([]);
let webSocket: WebSocket | null = null;
  const patternWidth = ref('');
  const patternHeight = ref('');
  const patternThickness = ref('');
  const filmsId = ref('');
  const remainQuantity = ref('');
  const slot = ref('');
  let webSocket: WebSocket | null = null;
const value = ref('')
const options = [
  {
    value: t('film.warehousing1'),
    value: 1,
    label: t('film.warehousing1'),
  },
  {
    value: t('film.warehousing2'),
    value: 2,
    label: t('film.warehousing2'),
  }
]
const report = ref({
  enableType: '',
  enableState: '',
  taskType: '',
  taskState: '',
});
request.post("/glassStorage/rawGlassStorageTask/setRawGlassTaskRequest",{
      beginDate: "2022-01-01 00:00:00",
      endDate: "2025-01-01 00:00:00",
}).then((response) => {
          if (response.code == 200) {
            tableDataa.value = response.data
            console.log(tableDataa.value);
          } else {
          ElMessage.warning(response.msg)
          }
          });
onMounted(() => {
  // closeWebSocket();
  debugger
  // console.log("--------------webSocket")
    socket = initializeWebSocket(socketUrl, handleMessage);
});
  onUnmounted(() => {
    if (socket) {
    closeWebSocket(socket);
    }
    });
let socket = null;
const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/rawGlass`;
const handleMessage = (data) => {
  if(data.tasks !=null){
  tableDataa.value = data.tasks[0]
  console.log(data.tasks[0]);
  }
  if(data.rack !=null){
  tableDatab.value = data.rack[0]
  if(data.rawStationDetailsList !=null){
  tableDatab.value = data.rawStationDetailsList[0]
  }
};
// 修改数量
const handleConfirmb = async () => {
  let slotId = window.localStorage.getItem('slotId')
  try {
    const response = await request.post('/glassStorage/rawGlassStorageDetails/updateQuantity', {
      slotId: slotId,
      remainQuantity: remainQuantity.value,
  }
  );
    if (response.code === 200) {
      ElMessage.success(response.message);
      dialogFormVisiblec.value = false;
      tableDatab.value = response.data;
    } else {
      ElMessage.error(response.message);
    }
  } catch (error) {
    console.error(error);
  }
};
  // 删除 
 const opena = async(row) => {
 const deleteWarehousing = async(row) => {
  try {
    const confirmResult = await ElMessageBox.confirm(  
      t('film.dedelete'), 
@@ -68,7 +103,10 @@
      } 
    );
    if (confirmResult === 'confirm') {
      const response = await request.post("/loadGlass/sys/user/deleteUser",  [row.id])
    var url="/glassStorage/rawGlassStorageDetails/deleteWarehousing?slotId="+row.slotId;
    const response = await request.post(url)
      // const response = await request.post("/glassStorage/rawGlassStorageDetails/deleteWarehousing",[row.slotId])
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {
@@ -79,30 +117,7 @@
    console.error('发生错误:', error);  
  }  
};  
  // 禁用
  const openb = async(row) => {
  try {
    const confirmResult = await ElMessageBox.confirm(
      t('film.dedisable'),
      t('productStock.prompt'),
      {
        confirmButtonText: t('productStock.yes'),
        cancelButtonText: t('productStock.cancel'),
        type: 'warning',
      }
    );
    if (confirmResult === 'confirm') {
      const response = await request.post("/loadGlass/sys/user/deleteUser",  [row.id])
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {
      ElMessage.error(response.msg);
      }
    }
  } catch (error) {
    console.error('发生错误:', error);
  }
};
  // 出库 
  const openc = async(row) => {  
  try {
@@ -116,12 +131,14 @@
      } 
    );
    if (confirmResult === 'confirm') {
      const response = await request.post("/loadGlass/sys/user/deleteUser",  [row.id])
      var url="/glassStorage/rawGlassStorageDetails/outWarehousing?slotId="+row.slotId;
      const response = await request.post(url)
      // const response = await request.post("/glassStorage/rawGlassStorageDetails/outWarehousing",[row.slotId])
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {
      ElMessage.error(response.msg);
      }
      }
    }  
  } catch (error) {
    console.error('发生错误:', error);  
@@ -141,45 +158,74 @@
      stateList=[selectValuesa[1]];
    }
  }
  const response = await request.post("/glassStorage/raw_glass_storage_task/selectRawglasstask", {
    createTime: timeRange.value[0],
    patternQuantity: timeRange.value[1],
    enableType: stateList,
    enableState: celllist
  const response = await request.post("/glassStorage/rawGlassStorageTask/setRawGlassTaskRequest", {
    beginDate: timeRange.value[0],
    endDate: timeRange.value[1],
    taskState: stateList,
    taskType: celllist
  })
  if (response.code === 200) {
    tableDataa.value = response.data;
    // tableDataa.value = response.data;
    ElMessage.success(response.message);
  } 
  else {
    ElMessage.error(response.message);
  }
};
// 入库
const handleConfirma = async () => {
  try {
    const response = await request.post('/glassStorage/rawGlassStorageDetails/patternWarehousing', {
      patternWidth: patternWidth.value,
      patternHeight: patternHeight.value,
      patternThickness: patternThickness.value,
      filmsId: filmsId.value,
      remainQuantity: remainQuantity.value,
      slotId: slot.value,
    });
    if (response.code === 200) {
      ElMessage.success(response.message);
      dialogFormVisibleb.value = false;
      patternWidth.value = '';
      patternHeight.value = '';
      patternThickness.value = '';
      filmsId.value = '';
      remainQuantity.value = '';
      slot.value = '';
    } else {
      ElMessage.error(response.message);
    }
  } catch (error) {
    console.error(error);
  }
};
// 是否禁用
const toggleEnableState = async (row: any) => {
const toggleEnableState = async (row: any) => {
  if (!row.deviceId) {  
    ElMessage.error(t('basicData.updatanull'));  
    return;
  }  
  const newState = row.enableState === 1 ? 0 : 1;
  try {
    // 发送请求到后端更新状态
    const response = await request.post('/glassStorage/rawGlassStorageDetails/updateEnableState', { deviceId: row.deviceId, enableState: newState });
  const newState = row.state === 1 ? 0 : 1;
  try {
    var url="/glassStorage/rawGlassStorageStation/updateSlotState?slot="+row.deviceId + "&state=" + newState;
    const response = await request.post(url)
    if (response.code === 200) {  
      ElMessage.success(response.message);  
      row.enableState = newState;
      row.state = newState;
    } else {  
      ElMessage.error(response.message);  
    }  
  } catch (error) {
  row.state = newState;
} catch (error) {
    ElMessage.error(t('basicData.glassnull'));   
  }  
}; 
const handleEdit = (row) => {
  window.localStorage.setItem('slotId', row.slotId)
  dialogFormVisiblec.value = true;
};
function getStatusType1(enableType) {
switch (enableType) {
function getStatusType1(taskType) {
switch (taskType) {
  case 1:  
    return 'info';  
  case 2:  
@@ -188,8 +234,8 @@
    return 'success';  
}  
}
function getStatusText1(enableType) {
switch (enableType) {
function getStatusText1(taskType) {
switch (taskType) {
  case 1:  
    return t('film.stocke');//入库
  case 2:  
@@ -198,8 +244,8 @@
  return t('film.dispatch');//调度
}  
}
function getStatusType2(enableState) {
switch (enableState) {
function getStatusType2(taskState) {
switch (taskState) {
  case 1:  
    return 'info';  
  case 2:  
@@ -208,8 +254,8 @@
    return 'success';  
}  
}
function getStatusText2(enableState) {
switch (enableState) {
function getStatusText2(taskState) {
switch (taskState) {
  case 1:  
    return t('film.built');//新建
  case 2:  
@@ -218,6 +264,11 @@
  return t('film.finish');//完成
}  
}
// onUnmounted(() => {
//     if (socket) {
//     closeWebSocket(socket);
//     }
//     });
onBeforeUnmount(() => {
  closeWebSocket();
}); 
@@ -227,8 +278,12 @@
  <div style="display: flex; flex-direction: row; align-items: center; margin-top: 20px;">  
    <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="dialogFormVisiblea = true">{{ $t('film.mes') }}</el-button>
  <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="dialogFormVisibleb = true">{{ $t('film.warehousing') }}</el-button>
    <el-date-picker style="margin-left: 10px;"  v-model="timeRange" type="daterange" format="YYYY/MM/DD" value-format="YYYY-MM-DD"
      :start-placeholder="$t('film.starttime')" :end-placeholder="$t('film.endtime')" :default-time="defaultTime" />
    <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" />
    <el-select v-model="selectValuesa[0]" clearable :placeholder="$t('film.taskstatus')" style="margin-left: 10px;" >
      <el-option :label="$t('film.built')" value="1"></el-option>
      <el-option :label="$t('film.execution')" value="2"></el-option>
@@ -245,29 +300,29 @@
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table height="300" ref="table"
        :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="enableId" align="center" :label="$t('film.enableid')"/>
          <el-table-column prop="id" align="center" :label="$t('film.enableid')"/>
          <el-table-column prop="originateSlot" align="center" :label="$t('film.originateslot')"/>
          <el-table-column prop="endSlot" align="center" :label="$t('film.endslot')"/>
          <el-table-column prop="patternQuantity" align="center" :label="$t('film.patternquantity')"/>
          <el-table-column
          align="center"
          :label="$t('film.enabletype')"
          prop="enableType"
          prop="taskType"
        >
        <template #default="scope">  
      <el-tag :type="getStatusType1(scope.row.enableType)">
        {{ getStatusText1(scope.row.enableType) }}
      <el-tag :type="getStatusType1(scope.row.taskType)">
        {{ getStatusText1(scope.row.taskType) }}
      </el-tag>  
    </template> 
        </el-table-column>
        <el-table-column
          align="center"
          :label="$t('film.enablestate')"
          prop="enableState"
          :label="$t('film.taskstatus')"
          prop="taskState"
        >
        <template #default="scope">  
      <el-tag :type="getStatusType2(scope.row.enableState)">
        {{ getStatusText2(scope.row.enableState) }}
      <el-tag :type="getStatusType2(scope.row.taskState)">
        {{ getStatusText2(scope.row.taskState) }}
      </el-tag>  
    </template> 
        </el-table-column>
@@ -284,6 +339,7 @@
    <el-table  ref="table" style="margin-top: 20px;height: 700px;"
        :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="deviceId" fixed align="center" :label="$t('film.station')" min-width="80"/>
          <el-table-column prop="slotId" fixed align="center" :label="$t('film.slot')" min-width="80"/>
          <el-table-column prop="patternWidth" align="center" :label="$t('film.width')"  min-width="80" />
          <el-table-column prop="patternHeight" align="center" :label="$t('film.height')" min-width="80" />
          <el-table-column prop="patternThickness" align="center" :label="$t('film.thickness')" min-width="80" />
@@ -293,36 +349,36 @@
          align="center"
            :label="$t('film.enablestate')"
            min-width="80"
            prop="enablestate"
            prop="state"
          >
          <template #default="scope">  
          <el-tag  
            :type="scope.row.enableState == 1 ? 'success' : 'danger'"
            :type="scope.row.state == 1 ? 'success' : 'danger'"
            @click="toggleEnableState(scope.row)"  
            >  
            {{ scope.row.enableState == 1 ? $t('film.start') : $t('film.disable')}}
            {{ scope.row.state == 1 ? $t('film.start') : $t('film.disable')}}
          </el-tag>  
        </template> 
          </el-table-column>
          <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="270">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">{{ $t('film.exit') }}</el-button>
              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('film.delete') }}</el-button>
              <el-button size="mini" type="text" plain @click="deleteWarehousing(scope.row)">{{ $t('film.delete') }}</el-button>
              <el-button size="mini" type="text" plain @click="openc(scope.row)">{{ $t('film.outbound') }}</el-button>
            </template>
        </el-table-column>
        </el-table>
</el-dialog>
<el-dialog v-model="dialogFormVisibleb" top="15vh" width="60%">
  <div style="margin-top: 10px;margin-bottom: 10px;">
      <el-form size="mini" label-width="150px">
      <el-form label-width="70vm" label-position="right">
        <el-row >
<el-dialog v-model="dialogFormVisibleb" top="23vh" width="55%" :title="$t('basicData.addglass')" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form label-width="100px" label-position="right">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('film.widtha')" :required="true" style="width: 17vw;">
                <el-input :placeholder="$t('film.inwidth')" v-model="number" autocomplete="off" />
                <el-input :placeholder="$t('film.inwidth')" v-model="patternWidth" autocomplete="off" />
              </el-form-item>
              </div></div>
          </el-col>
@@ -330,7 +386,7 @@
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('film.heighta')" :required="true" style="width: 17vw;">
                <el-input :placeholder="$t('film.inheight')" v-model="number" autocomplete="off" />
                <el-input :placeholder="$t('film.inheight')" v-model="patternHeight" autocomplete="off" />
              </el-form-item></div>
              </div>
          </el-col>
@@ -340,14 +396,14 @@
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('film.thicknessa')" :required="true" style="width: 17vw;">
                <el-input :placeholder="$t('film.inthickness')" v-model="number" autocomplete="off" />
                <el-input :placeholder="$t('film.inthickness')" v-model="patternThickness" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('film.filmsa')" :required="true" style="width: 17vw;">
                <el-input :placeholder="$t('film.infilms')" v-model="number" autocomplete="off" />
                <el-input :placeholder="$t('film.infilms')" v-model="filmsId" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
@@ -355,24 +411,26 @@
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item :label="$t('film.quantitya')" :required="true" style="width: 17vw;">
                <el-input :placeholder="$t('film.inquantity')" v-model="number" autocomplete="off" />
          <el-form-item :label="$t('film.quantitya')" :required="true" style="width: 17vw;">
                <el-input :placeholder="$t('film.inquantity')" v-model="remainQuantity" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('film.inwarehousing')" :required="true" style="width: 17vw">
            <el-select :placeholder="$t('film.selectwarehousing')">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      />
            <el-select
            :placeholder="$t('film.selectwarehousing')"
             style="width: 270px"
             v-model="slot">
               <el-option
                v-for="item in options"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
          </el-select>
              </el-form-item></div>
              </div>
              </el-form-item></div></div>
          </el-col>
        </el-row>
        </el-form>
@@ -380,26 +438,26 @@
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleConfirm">
        <el-button type="primary" @click="handleConfirma">
          {{ $t('basicData.confirm') }}
        </el-button>
        <el-button @click="dialogFormVisibleb = false">{{ $t('basicData.cancel') }}</el-button>
      </div>
    </template>
</el-dialog>
  </el-dialog>
<el-dialog v-model="dialogFormVisiblec" top="21vh" width="40%">
    <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
      <el-form size="mini" label-width="100px">
        <el-form label-width="210px" label-position="right">
          <el-form-item :label="$t('film.thickremainquantity')" :required="true" style="width: 25vw">
            <el-input v-model="workstationId" autocomplete="off" />
            <el-input v-model="remainQuantity" autocomplete="off" />
          </el-form-item>
        </el-form>
      </el-form>
    </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleConfirm">
        <el-button type="primary" @click="handleConfirmb">
          {{ $t('reportWork.sure') }}
        </el-button>
        <el-button @click="dialogFormVisiblec = false">{{ $t('reportWork.cancel') }}</el-button>
UI-Project/src/views/Identify/identify.vue
@@ -97,7 +97,7 @@
    glassId: currentGlassId.value,
    state: 8,
    line: 1001,
    workingProcedure: '识别',
    workingProcedure: '切割',
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
@@ -125,7 +125,7 @@
    glassId: currentGlassId.value,
    state: 9,
    line: 1001,
    workingProcedure: '识别',
    workingProcedure: '切割',
    })
    if (response.code == 200) {
      // 绑定成功,处理逻辑
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -152,13 +152,15 @@
    adjustedRects2.value = []
  }
  // 进炉中左
  if (data.intoGlass && data.intoGlass.length > 0) {
    const newGlassIds = new Set(data.intoGlass[0].map(rect => rect.glassId));
    const existingRects = adjustedRects1.value.filter(rect => newGlassIds.has(rect.glassId));
    const newRects = data.intoGlass[0].map(rect => {
      const scaleFactor =  810.89/5087;
      const scaleFactorY =  430/2800;
      let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
  if (data.intoGlass && data.intoGlass.length > 0) {
    console.log(data.intoGlass);
    const newGlassIds = new Set(data.intoGlass[0].map(rect => rect.glassId));
    const existingRects = adjustedRects1.value.filter(rect => newGlassIds.has(rect.glassId));
    const newRects = data.intoGlass[0].map(rect => {
      const scaleFactor =  810.89/5087;
      const scaleFactorY =  430/2800;
      let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;
      let newX = rect.yCoordinate; 
      if (rect.width < rect.height) {
        widtha = rect.height;
@@ -199,7 +201,7 @@
      return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样  
    }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId)));  
  }  
  else if (data.overGlass == null) {
  else {
    adjustedRects1.value = []
  }
  if (data.waitingGlass && data.waitingGlass.length > 0) {  
@@ -325,7 +327,21 @@
      rect.state = 9;
    }
  });  
}
}
function updateoutColorsc() {
  adjustedRects1.value.forEach(rect => {
    if (rect.glassId === glassId) {
      rect.state = 9;
    }
  });
}
function updateoutColorsd() {
  adjustedRects2.value.forEach(rect => {
    if (rect.glassId === glassId) {
      rect.state = 9;
    }
  });
}
function updateonColorsa() {
  adjustedRectsa.value.forEach(rect => {  
    if (rect.glassId === glassId) {  
@@ -367,8 +383,28 @@
      rect.state = 8;
    }
  });  
}
function getRectColora(state) {
}
function getRectColor1(state) {
  switch (state) {
    case 2:
      return 'lightblue';
    case 8:
      return '#911005';
    case 9:
      return '#4682B4';
  }
}
function getRectColor2(state) {
  switch (state) {
    case 2:
      return 'lightblue';
    case 8:
      return '#911005';
    case 9:
      return '#4682B4';
  }
}
function getRectColora(state) {
  switch (state) {  
    case 0:  
      return '#7AC5CD';
@@ -408,6 +444,11 @@
  } else if (currentRect.value.state !== 8) {
    canSelectProject1.value = true;
  }
  if (currentRect.value.state == 9) {
    cantakea.value = false;
  } else if (currentRect.value.state !== 9) {
    cantakea.value = true;
  }
function showDialog2(rect) {
  const index = adjustedRects2.value.findIndex(r => r.glassId === rect.glassId);  
@@ -422,6 +463,11 @@
    canSelectProject2.value = false;
  } else if (currentRect.value.state !== 8) {
    canSelectProject2.value = true;
  }
  if (currentRect.value.state == 9) {
    cantakea.value = false;
  } else if (currentRect.value.state !== 9) {
    cantakea.value = true;
  }
function showDialoga(rect) {
@@ -613,6 +659,52 @@
    console.error(error);
  }
}
// 进炉中人工拿走
const takeoutc = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', {
    glassId: currentGlassId.value,
    line: 4001,
    status: 9,
    workingProcedure: '钢化',
    })
    if (response.code == 200) {
      ElMessage.success('成功!');
      blind1.value = false;
      updateoutColorsc();
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
// 进炉zhong人工拿走
const takeoutd = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', {
    glassId: currentGlassId.value,
    line: 4001,
    status: 9,
    workingProcedure: '钢化',
    })
    if (response.code == 200) {
      ElMessage.success('成功!');
      blind2.value = false;
      updateoutColorsd();
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
// 已出炉破损
const handleDamageb = async () => {
  try  {
@@ -711,8 +803,7 @@
       left: `${rect.xcoordinate}px`,
        width: `${rect.width}px`, 
        height: `${rect.height}px`,
        backgroundColor: rect.isActive ? '#ADFF2F' : rect.state === 8 ? '#911005' : 'lightblue' }"
    >
        backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor1(rect.state) }">
     <div  class="centered-text">
    <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div>  
    <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div>  
@@ -739,8 +830,7 @@
       left: `${rect.xcoordinate}px`, 
       width: `${rect.width}px`, 
       height: `${rect.height}px`,
       backgroundColor: rect.isActive ? '#ADFF2F' : rect.state === 8 ? '#911005' : 'lightblue' }"
       >
        backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor2(rect.state) }">
     <div  class="centered-text">
    <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div>  
    <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div>  
@@ -842,11 +932,19 @@
        <el-button :disabled="!canSelectProject1" type="warning" plain :icon="Delete" @click="handleDamage1"  style="width: 150px;margin-left: 10px;">
          {{ $t('order.dilapidation') }}
        </el-button>
        <el-button :disabled="!cantakea" type="danger" plain @click="takeoutc"  style="width: 150px;margin-left: 10px;margin-top: 10px;">
          <el-icon class="el-icon--right"><Upload /></el-icon>
          {{ $t('order.takeaway') }}
        </el-button>
  </el-dialog>  
<el-dialog v-model="blind2" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose2">
        <el-button :disabled="!canSelectProject2" type="warning" plain :icon="Delete" @click="handleDamage2"  style="width: 150px;margin-left: 10px;">
          {{ $t('order.dilapidation') }}
        </el-button>
        <el-button :disabled="!cantakea" type="danger" plain @click="takeoutd"  style="width: 150px;margin-left: 10px;margin-top: 10px;">
          <el-icon class="el-icon--right"><Upload /></el-icon>
          {{ $t('order.takeaway') }}
        </el-button>
  </el-dialog>  
  <!-- 进炉前 -->
<el-dialog v-model="blinda" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClosea">
UI-Project/src/views/Slicecage/slicecage.vue
@@ -642,8 +642,8 @@
const fetchFlowCardId = async () => {
  try  {
    const response = await request.post('/cacheVerticalGlass/work_assignment/selectWorkAssignment',{
      line: 2001,
      workingProcedure : '冷加工'
      line: 4001,
      workingProcedure : '钢化'
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -84,7 +84,7 @@
        glassId: row.glassId,
        state: 8,
        line: row.line,
        workingProcedure: '冷加工',
        workingProcedure: '磨边',
    })
    if (response.code === 200) {
      ElMessage.success(response.message);
@@ -117,7 +117,7 @@
        glassId: row.glassId,
        state: 9,
        line: row.line,
        workingProcedure: '冷加工',
        workingProcedure: '磨边',
    })
    if (response.code === 200) {
      ElMessage.success(response.message);
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
@@ -27,7 +27,7 @@
@ResponseBody
public class DamageController {
    @Autowired
    @Autowired(required=true)
    private DamageService damageService;
    @ApiOperation("报工数据查询")
    @PostMapping("/selectDamage")
@@ -44,6 +44,7 @@
    @PostMapping("/submitDamage")
    public Result submitDamage(@RequestBody List<Damage> damageList) {
        damageService.submitDamage(damageList);
        damageList.forEach(damage -> damage.setStatus(2));
        damageService.updateBatchById(damageList);
        return Result.build(200,"报工成功",1);
    }
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
@@ -18,8 +18,12 @@
 */
public interface DamageService extends MPJBaseService<Damage> {
    List<Damage> selectDamage(String startTime, String endTime, int type, String workingProcedure);
    List<Damage> selectDamage(String startTime, String endTime, int type, int status, String workingProcedure);
//    List<Damage> selectDamage(String startTime, String endTime, int type, int status, String workingProcedure);
    void submitDamage(List<Damage> damageList);
    Boolean submitReport(Damage damage);
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -18,6 +18,7 @@
import com.mes.pp.entity.ReportingWorkDetail;
import com.mes.work_assignment.entity.WorkAssignment;
import com.mes.work_assignment.mapper.WorkAssignmentMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@@ -43,6 +44,7 @@
 * @author wu
 * @since 2024-06-13
 */
@Slf4j
@Service
public class DamageServiceImpl extends MPJBaseServiceImpl<DamageMapper, Damage> implements DamageService {
@@ -50,6 +52,11 @@
    GlassInfoMapper glassInfoMapper;
    @Resource
    WorkAssignmentMapper workAssignmentMapper;
    @Override
    public List<Damage> selectDamage(String startTime, String endTime, int type, String workingProcedure) {
        return null;
    }
    /**
     * 查询报工信息
@@ -81,7 +88,7 @@
    @Override
    public void submitDamage(List<Damage> damageList) {
        Map<String, List<Damage>> firstMap = damageList.stream().collect(Collectors.groupingBy(e -> e.getProcessId() + ":"
                + e.getWorkingProcedure() + ":" + e.getDeviceName() + ":" + e.getTeamsGroupsName()));
                + e.getWorkingProcedure() + ":" + e.getDeviceName() + ":" + e.getTeamsGroupsName() + ":" + e.getOrderNumber() + ":" + e.getTechnologyNumber()));
        for (Map.Entry<String, List<Damage>> entry : firstMap.entrySet()) {
            ReportingWork reportingWork = new ReportingWork();
            List<ReportingWorkDetail> reportingWorkDetails = new ArrayList<>();
@@ -104,7 +111,7 @@
            reportingWorkDetail.setOrderNumber(damages.get(0).getOrderNumber());
            reportingWorkDetail.setCompletedQuantity(0);
            reportingWorkDetail.setBreakageQuantity(0);
            reportingWorkDetails.add(reportingWorkDetail);
            Map<String, List<Damage>> secondMap = damages.stream().collect(Collectors.groupingBy(e -> e.getProcessId() + ":"
                    + e.getWorkingProcedure() + ":" + e.getDeviceName() + ":" + e.getTeamsGroupsName()));
@@ -118,6 +125,7 @@
                    reportingWork.setThisCompletedQuantity(damagesdetails.size() + reportingWork.getThisCompletedQuantity());
                } else {
                    reportingWork.setThisWornQuantity(damagesdetails.size() + reportingWork.getThisWornQuantity());
                    reportingWorkDetail.setBreakageQuantity(damagesdetails.size());
                    DamageDetails damageDetails = new DamageDetails();
                    damageDetails.setBreakageQuantity(damagesdetails.size());
                    damageDetails.setBreakageType(damagesdetails.get(0).getBreakageType());
@@ -129,6 +137,7 @@
                    damageDetailses.add(damageDetails);
                }
            }
            reportingWorkDetails.add(reportingWorkDetail);
            reportingWorkDetail.setDamageDetailsList(damageDetailses);
            sendToERP(reportingWork, reportingWorkDetails);
        }
@@ -171,6 +180,7 @@
                        .ne(Damage::getType, Const.GLASS_STATE_TAKE)
                        .eq(Damage::getLine, damage.getLine())
                        .eq(Damage::getWorkingProcedure, damage.getWorkingProcedure())
                        .eq(Damage::getGlassId, damage.getGlassId())
        );
        if (damage1 == null || damage1.size() == 0) {
            LambdaQueryWrapper<GlassInfo> glassInfoSelectWrapper = new LambdaQueryWrapper<>();
@@ -197,6 +207,8 @@
            if (damage.getType() == 1) {
                if (submitReport(damage)) {
                    damage.setStatus(2);
                } else {
                    damage.setStatus(1);
                }
            }
            baseMapper.insert(damage);
@@ -273,6 +285,7 @@
    @Override
    public Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails) {
        log.info("报工数据reportingWork:{},reportingWorkDetails:{}", reportingWork, reportingWorkDetails);
        try {
            // 目标系统的API URL
            String url = "http://192.168.1.199:8086/reportingWork/mesSaveReportingWorkWorn";
@@ -330,11 +343,10 @@
                // 提取 code 和 message
                int code = jsonResponse.getInt("code");
                String message = jsonResponse.getStr("data");
                log.info("报工失败:{},{}", code, message);
                if (code == 200 && message.equals("true")) {
                    return true;
                } else {
                    return false;
                }
            }
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -237,7 +237,6 @@
        List<Engineering> engineering=engineeringMapper.selectJoinList(Engineering.class, new MPJLambdaWrapper<Engineering>()
                .selectAll(Engineering.class)
                .eq(Engineering::getEngineerId,current)
                .gt(Engineering::getState,0)
        );
        if(engineering.size()==0){
            log.info("当前工程号未领取过:{}",current);
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -211,9 +211,9 @@
        bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot());
        damage.setGlassId(bigStorageCageDetails.getGlassId());
        damage.setWorkingProcedure("钢化");
        damage.setLine(3001);
        damage.setRemark("大理片笼破损");
        damage.setStatus(2);
        damage.setLine(4001);
        damage.setRemark("大理片笼");
        damage.setStatus(1);
        damageService.insertDamage(damage);
    }
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassPushMessage.java
New file
@@ -0,0 +1,54 @@
package com.mes.job;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONObject;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassstation.service.RawGlassStorageStationService;
import com.mes.rawglasstask.entity.RawGlassStorageTask;
import com.mes.rawglasstask.service.RawGlassStorageTaskService;
import com.mes.tools.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
 * @author wangfei
 */
@Slf4j
@Component
public class RawGlassPushMessage {
  @Resource private RawGlassStorageStationService rawGlassStorageStationService;
  @Resource private RawGlassStorageTaskService rawGlassStorageTaskService;
  @Scheduled(fixedDelay = 2000)
  public void sendRawGlassMessage() {
    log.info("发送任务信息和架子信息");
    JSONObject jsonObject = new JSONObject();
    List<RawGlassStorageDetails> rawStationDetailsList =
        rawGlassStorageStationService.listRawGlassDetails();
    List<RawGlassStorageTask> tasks = rawGlassStorageTaskService.listRawGlassTask();
    jsonObject.append("rawStationDetailsList", rawStationDetailsList);
    jsonObject.append("tasks", tasks);
//    log.info("获取到的工位详情及任务信息为:{}", jsonObject);
    List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("rawGlass");
    if (CollectionUtil.isNotEmpty(sendwServer)) {
      sendwServer.stream().forEach(e->{
        e.sendMessage(String.valueOf(jsonObject));
      });
    }
  }
  /** todo:入库任务:吊装位有玻璃,先去工位表查询空格子,生成入库任务从吊装位到目标格子 */
  /** todo:出库任务:1、点出库,立马生成出片任务 2、点出库修改工位详情内的状态为待出库,定时任务扫描生成出库任务 */
  /** todo:原片调度:1、查询工程原片表,按照顺序将原片放入上片1号位,后续原片放上片2号位,出现尺寸替换,判断原上片位是否有玻璃,有 先出后进,无 直接进片 */
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/push.java
File was deleted
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/controller/RawGlassStorageDetailsController.java
@@ -1,18 +1,19 @@
package com.mes.rawglassdetails.controller;
import com.mes.entity.request.GeneralRequest;
import com.mes.rawglassdetails.entity.request.RawGlassRequest;
import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
import com.mes.userinfo.entity.vo.SysUserVO;
import com.mes.utils.Result;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author wf
 * @since 2024-09-10
@@ -21,27 +22,29 @@
@RequestMapping("/rawGlassStorageDetails")
public class RawGlassStorageDetailsController {
    @Autowired
    private RawGlassStorageDetailsService rawGlassStorageDetailsService;
    @ApiOperation("工位状态")
    @PostMapping("/updateEnableState")
    @ResponseBody
    public Result<Boolean> updateStatus(@RequestBody Integer enableState) {
        boolean result = rawGlassStorageDetailsService.updateRawGlassStorageDetails(String.valueOf(enableState));
        if (enableState == 1) {
            return Result.build(1, "启用", result);
        } else {
            return Result.build(0, "禁用", result);
        }
    }
  @Autowired private RawGlassStorageDetailsService rawGlassStorageDetailsService;
    @ApiOperation("原片入库")
    @PostMapping("/patternWarehousing")
    public Result<String> patternWarehousing(@Validated @RequestBody RawGlassRequest request) {
  @ApiOperation("原片入库")
  @PostMapping("/patternWarehousing")
  public Result<String> patternWarehousing(@Validated @RequestBody RawGlassRequest request) {
        return Result.build(200, "入库已完成,等待任务执行", rawGlassStorageDetailsService.patternWarehousing(request));
    return Result.build(
        200, "入库已完成,等待任务执行", rawGlassStorageDetailsService.patternWarehousing(request));
  }
  @ApiOperation("更新剩余数量")
  @PostMapping("/updateQuantity")
  public Result<Object> updateQuantity(@Validated @RequestBody RawGlassRequest request) {
    return Result.success(rawGlassStorageDetailsService.UpdateQuantity(request));
  }
  @ApiOperation("删除原片")
  @PostMapping("/deleteWarehousing")
  public Result<Object> deleteWarehousing(@RequestBody Long slotId) {
    return Result.success(rawGlassStorageDetailsService.deleteWarehousing(slotId));
  }
    }
  @ApiOperation("原片出库")
  @PostMapping("/outWarehousing")
  public Result<Object> outWarehousing(@RequestBody Long slotId) {
    return Result.success(rawGlassStorageDetailsService.outWarehousing(slotId));
  }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/entity/request/RawGlassRequest.java
@@ -1,5 +1,6 @@
package com.mes.rawglassdetails.entity.request;
import com.mes.userinfo.entity.vo.SysUserVO;
import lombok.Data;
/**
@@ -8,7 +9,7 @@
 * @Description:
 */
@Data
public class RawGlassRequest {
public class RawGlassRequest extends SysUserVO {
    /**
     * 原片宽
@@ -38,5 +39,5 @@
    /**
     * 栅格号
     */
    private Integer slot;
    private String slotId;
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
@@ -1,8 +1,10 @@
package com.mes.rawglassdetails.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.entity.request.GeneralRequest;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassdetails.entity.request.RawGlassRequest;
import com.mes.userinfo.entity.vo.SysUserVO;
import java.util.List;
@@ -14,13 +16,6 @@
    List<RawGlassStorageDetails> selectDetails();
    /**
     * 要大写这个
     *
     * @param films_id
     * @return
     */
    boolean updateRawGlassStorageDetails(String films_id);
    /**
     * 删除表  先在这里创  然后点那个相关问题
@@ -29,12 +24,6 @@
     */
    boolean deleteRawGlassStorageDetails(String device_id);
    /**
     * 新增表
     *
     * @return boolean
     */
    boolean insertRawGlassStorageDetails(RawGlassStorageDetails rw);
    /**
@@ -44,4 +33,10 @@
     * @return
     */
    String patternWarehousing(RawGlassRequest request);
    String UpdateQuantity(RawGlassRequest request);
    String deleteWarehousing(Long slotId);
    String outWarehousing(Long slotId);
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
@@ -1,17 +1,20 @@
package com.mes.rawglassdetails.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.common.config.Const;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassdetails.entity.request.RawGlassRequest;
import com.mes.rawglassdetails.mapper.RawGlassStorageDetailsMapper;
import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
import com.mes.rawglassstation.entity.RawGlassStorageStation;
import com.mes.userinfo.entity.vo.SysUserVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
@@ -21,18 +24,8 @@
@Service
@Slf4j
public class RawGlassStorageDetailsServiceImpl extends ServiceImpl<RawGlassStorageDetailsMapper, RawGlassStorageDetails> implements RawGlassStorageDetailsService {
    @Override
    public boolean updateRawGlassStorageDetails(String films_id) {
        UpdateWrapper<RawGlassStorageDetails> wrapper = new UpdateWrapper<>();  //这个类型定义错了,不应该是tasking
        wrapper.set("films_id", "1005")
                .eq("films_id", films_id);
        return update(wrapper);//这个方法默认返回的就是bool类型 所有可以直接return这个方法,ok了,你正常创建方法去上一层创
    }
    @Override
    public boolean deleteRawGlassStorageDetails(String device_id) {
  @Override
  public boolean deleteRawGlassStorageDetails(String device_id) {
        QueryWrapper<RawGlassStorageDetails> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("device_id", device_id);
        return remove(queryWrapper);//remove才是删除,delete得用另外的依赖,默认方法是remove返回bool
@@ -47,10 +40,6 @@
        return list();
    }
    @Override
    public boolean insertRawGlassStorageDetails(RawGlassStorageDetails rw) {
        return this.save(rw);
    }
    @Override
    public String patternWarehousing(RawGlassRequest request) {
@@ -58,8 +47,30 @@
        RawGlassStorageDetails details = new RawGlassStorageDetails();
        BeanUtils.copyProperties(request, details);
        details.setState(Const.GLASS_STATE_IN);
        details.setCreateTime(new Date());
        save(details);
        return null;
        return "success";
    }
    @Override
    public String UpdateQuantity(RawGlassRequest request) {
        update(
                new LambdaUpdateWrapper<RawGlassStorageDetails>()
                        .set(RawGlassStorageDetails::getRemainQuantity, request.getRemainQuantity())
                        .eq(RawGlassStorageDetails::getSlotId, request.getSlotId()));
        return "success";
    }
    @Override
    public String deleteWarehousing(Long slotId) {
        update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlotId, slotId)
                .set(RawGlassStorageDetails::getState,Const.GLASS_STATE_OUT));
        return "success";
    }
    @Override
    public String outWarehousing(Long slotId) {
        update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlotId, slotId)
                .set(RawGlassStorageDetails::getState,Const.GLASS_STATE_OUT_ING));
        return "success";
    }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/controller/RawGlassStorageStationController.java
@@ -1,21 +1,37 @@
package com.mes.rawglassstation.controller;
import com.mes.rawglassstation.service.RawGlassStorageStationService;
import com.mes.utils.Result;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * <p>
 *  前端控制器
 * </p>
 * 前端控制器
 *
 * @author wf
 * @since 2024-09-10
 */
@RestController
@RequestMapping("/raw-glass-storage-station")
@RequestMapping("/rawGlassStorageStation")
public class RawGlassStorageStationController {
  @Resource RawGlassStorageStationService rawGlassStorageStationService;
  @ApiOperation("工位状态")
  @PostMapping("/updateSlotState")
  @ResponseBody
  public Result<Boolean> updateSlotState(@RequestParam(value = "state")int enableState, @RequestParam(value = "slot")int slot) {
    boolean result = rawGlassStorageStationService.updateSlotState(slot, enableState);
    if (enableState == 1) {
      return Result.build(200, "启用", result);
    } else {
      return Result.build(200, "禁用", result);
    }
  }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java
@@ -2,15 +2,12 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author wf
 * @since 2024-09-10
 */
@@ -20,8 +17,8 @@
    private static final long serialVersionUID = 1L;
      @TableId(value = "id", type = IdType.AUTO)
    private Long id;
  @TableId(value = "id", type = IdType.AUTO)
  private Long id;
    /**
     * 设备id
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java
@@ -1,8 +1,8 @@
package com.mes.rawglassstation.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassstation.entity.RawGlassStorageStation;
import com.mes.rawglasstask.entity.RawGlassStorageTask;
import java.util.List;
@@ -16,5 +16,5 @@
 */
public interface RawGlassStorageStationMapper extends BaseMapper<RawGlassStorageStation> {
    List<RawGlassStorageTask> listRawGlassDetails();
  List<RawGlassStorageDetails> listRawGlassDetails();
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java
@@ -1,8 +1,8 @@
package com.mes.rawglassstation.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassstation.entity.RawGlassStorageStation;
import com.mes.rawglasstask.entity.RawGlassStorageTask;
import java.util.List;
@@ -19,5 +19,12 @@
    boolean insertRawGlassStorageStation(RawGlassStorageStation rw);
    List<RawGlassStorageTask> listRawGlassDetails();
  /**
   * 获取工位及对应的原片信息
   *
   * @return
   */
  List<RawGlassStorageDetails> listRawGlassDetails();
  boolean updateSlotState(Integer slot, Integer enableState);
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java
@@ -1,12 +1,13 @@
package com.mes.rawglassstation.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassstation.entity.RawGlassStorageStation;
import com.mes.rawglassstation.mapper.RawGlassStorageStationMapper;
import com.mes.rawglassstation.service.RawGlassStorageStationService;
import com.mes.rawglasstask.entity.RawGlassStorageTask;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -43,10 +44,16 @@
        return this.save(rw);
    }
    @Override
    public List<RawGlassStorageTask> listRawGlassDetails() {
  @Override
  public List<RawGlassStorageDetails> listRawGlassDetails() {
        return baseMapper.listRawGlassDetails();
    }
  @Override
  public boolean updateSlotState(Integer slot, Integer enableState) {
    return update(
        new LambdaUpdateWrapper<RawGlassStorageStation>()
            .set(RawGlassStorageStation::getEnableState, enableState)
            .eq(RawGlassStorageStation::getSlot, slot));
  }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/RawGlassStorageStationMapper.xml
@@ -11,6 +11,7 @@
        <result column="films_id" property="filmsId"/>
        <result column="create_time" property="createTime"/>
        <result column="remain_quantity" property="remainQuantity"/>
        <result column="enable_state" property="state"/>
    </resultMap>
@@ -22,7 +23,8 @@
               T1.PATTERN_THICKNESS,
               T1.FILMS_ID,
               T1.CREATE_TIME,
               T1.REMAIN_QUANTITY
               T1.REMAIN_QUANTITY,
               T.ENABLE_STATE
        FROM RAW_GLASS_STORAGE_STATION T
                 LEFT JOIN RAW_GLASS_STORAGE_DETAILS T1 ON T.DEVICE_ID = T1.DEVICE_ID
            AND T.SLOT = T1.SLOT_ID
hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java
@@ -75,36 +75,36 @@
    /**
     * 测试
     */
    @Test
    public void testWebSocket() {
        List<RawGlassStorageTask> list=rawGlassStorageTaskService.findAll();
        log.info("返回内容:{}",list);
    }
//    @Test
//    public void testWebSocket() {
//        List<RawGlassStorageTask> list=rawGlassStorageTaskService.findAll();
//        log.info("返回内容:{}",list);
//    }
    /**
     * 测试修改WebSocket  参数
     */
    @Test
    public void testWebSocketArgument() {
        RawGlassTaskRequest request=new RawGlassTaskRequest();
        //设置参数:
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate=null;
        Date endDate=null;
        try {
            startDate= df.parse("2022-01-01");
            endDate= df.parse("2025-01-01");
        }catch (ParseException e){
            e.printStackTrace();
        request.setCreateTime(startDate);//
        request.setPatternQuantity(endDate);
        request.setEnableState(new ArrayList<Integer>());
        request.setEnableType(new ArrayList<Integer>());
        String list=rawGlassStorageTaskService.setRawGlassTaskRequest(request);
        log.info("返回内容:{}",list);
    }
    }
//    @Test
//    public void testWebSocketArgument() {
//        RawGlassTaskRequest request=new RawGlassTaskRequest();
//        //设置参数:
//        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//        Date startDate=null;
//        Date endDate=null;
//        try {
//            startDate= df.parse("2022-01-01");
//            endDate= df.parse("2025-01-01");
//        }catch (ParseException e){
//            e.printStackTrace();
//
//        request.setCreateTime(startDate);//
//        request.setPatternQuantity(endDate);
//        request.setEnableState(new ArrayList<Integer>());
//        request.setEnableType(new ArrayList<Integer>());
//        String list=rawGlassStorageTaskService.setRawGlassTaskRequest(request);
//        log.info("返回内容:{}",list);
//    }
//    }
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
@@ -70,39 +70,29 @@
        //将确认字置为0
        plcControl.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 0);
        //可能有几炉玻璃同时在钢,需要获取钢化小片表中的数据信息状态为2(旋转台玻璃已送出未钢化,正在钢化)
        List<TemperingGlassInfo> temperingGlassInfoList = temporaryGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
                .eq(TemperingGlassInfo::getState, Const.TEMPERING_START));
        List<TemperingGlassInfo> temperingGlassInfoList = temporaryGlassInfoService.list(
                new LambdaQueryWrapper<TemperingGlassInfo>()
                        .inSql(TemperingGlassInfo::getTemperingLayoutId, "select distinct tempering_layout_id from tempering_glass_info where state=1")
                        .lt(TemperingGlassInfo::getState, Const.TEMPERING_START)
        );
        if (CollectionUtils.isEmpty(temperingGlassInfoList)) {
            log.info("当前系统没有需要钢化的玻璃信息");
            return;
        }
        TemperingGlassInfo maxGlassInfo = temperingGlassInfoList.stream().max(Comparator.comparingLong(TemperingGlassInfo::getId)).get();
        TemperingGlassInfo minGlassInfo = temperingGlassInfoList.stream().min(Comparator.comparingLong(TemperingGlassInfo::getState)).get();
        if (minGlassInfo.getState() < Const.TEMPERING_DROP) {
            log.info("当前炉玻璃未到齐,稍后在执行");
            return;
        }
        //拿到工程id及炉号
//        List<EngineerTemperingDTO> engineerTemperingList = temperingGlassInfoList.stream().map(e -> {
//            EngineerTemperingDTO engineerTemperingDTO = new EngineerTemperingDTO();
//            BeanUtils.copyProperties(e, engineerTemperingDTO);
//            return engineerTemperingDTO;
//        }).distinct().collect(Collectors.toList());
        //将正在钢化的炉号过滤掉,仅获取待钢化的玻璃
//        List<TemperingRecord> temperingRecords = temperingRecordService.list(new LambdaQueryWrapper<TemperingRecord>().and(i -> i.isNull(TemperingRecord::getCoolEnergy).or().eq(TemperingRecord::getCoolEnergy, "")));
//        List<EngineerTemperingDTO> temperingList = new ArrayList<>();
//        if (CollectionUtils.isNotEmpty(temperingRecords)) {
//            temperingList = temperingRecords.stream().map(e -> {
//                EngineerTemperingDTO engineerTemperingDTO = new EngineerTemperingDTO();
//                BeanUtils.copyProperties(e, engineerTemperingDTO);
//                return engineerTemperingDTO;
//            }).collect(Collectors.toList());
//        }
//        engineerTemperingList.removeAll(temperingList);
//        if (CollectionUtils.isEmpty(engineerTemperingList)) {
//            log.info("没有待钢化的任务,结束");
//            return;
//        }
//        if (engineerTemperingList.size() > 1) {
//            log.info("存在多炉待钢化的任务,请检查现场是否有异常数据未处理");
//            return;
//        }
//        EngineerTemperingDTO temperingDTO = engineerTemperingList.get(0);
        TemperingGlassInfo maxGlassInfo = temperingGlassInfoList.stream().max(Comparator.comparingLong(TemperingGlassInfo::getId)).get();
        //将正在钢化的炉号过滤掉,仅获取待钢化的玻璃:判断待钢的玻璃是否已发送对接数据
        List<TemperingRecord> temperingRecordList = temperingRecordService.list(new LambdaQueryWrapper<TemperingRecord>().eq(TemperingRecord::getEngineerId, maxGlassInfo.getEngineerId())
                .eq(TemperingRecord::getTemperingLayoutId, maxGlassInfo.getTemperingLayoutId()));
        if (CollectionUtils.isNotEmpty(temperingRecordList)) {
            log.info("没有待钢化的任务,结束");
            return;
        }
        //获取待钢化的所有玻璃信息
        List<TemperingGlassInfo> temperingGlassList = temperingGlassInfoList.stream()
                .filter(e -> e.getEngineerId().equals(maxGlassInfo.getEngineerId())