| | |
| | | // export const WebSocketHost = "192.168.10.86"; |
| | | export const WebSocketHost = "192.168.10.86"; |
| | | // export const WebSocketHost = "192.168.0.39"; |
| | | export const WebSocketHost = "10.153.19.179"; |
| | | // export const WebSocketHost = "10.153.19.179"; |
| | | // export const WebSocketHost = "10.153.19.47"; |
| | | // export const WebSocketHost = "10.153.19.162"; |
| | | // export const WebSocketHost = "127.0.0.1"; |
| | |
| | | import { closeWebSocket, initializeWebSocket } from '@/utils/WebSocketService'; |
| | | import { inject } from 'vue'; |
| | | const router = useRouter() |
| | | // 表格加载状态(转圈) |
| | | const loading = ref(true) |
| | | |
| | | const tableDataa = ref([]) |
| | | const tableDatab = ref([]) |
| | | const tableDatad = ref([]) |
| | |
| | | rawTableData.value = formattedTasks; |
| | | tableDataa.value = formattedTasks; |
| | | if (data.rawStationDetailsList != null) { |
| | | loading.value = false |
| | | tableDatab.value = data.rawStationDetailsList[0] |
| | | if (data.rawStationDetailsList[0][0].patternThickness != null) { |
| | | card1.value = true |
| | |
| | | const handleEdit = (row) => { |
| | | window.localStorage.setItem('deviceId', row.deviceId) |
| | | window.localStorage.setItem('slot', row.slot) |
| | | patternWidth.value = row.patternWidth; |
| | | patternHeight.value = row.patternHeight; |
| | | patternThickness.value = row.patternThickness; |
| | | filmsId.value = row.filmsId; |
| | | remainQuantity.value = row.remainQuantity; |
| | | Edit.value = true; |
| | | }; |
| | | const handleBinda = (row) => { |
| | |
| | | |
| | | tableDataa.value = filteredData; |
| | | |
| | | ElMessage.success(`查询成功,共 ${filteredData.length} 条数据`); |
| | | ElMessage.success(t('film.inquire') + ` ${filteredData.length} ` + t('searchOrder.tit')); |
| | | }; |
| | | |
| | | // 是否禁用 |
| | |
| | | </div> |
| | | |
| | | <el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%"> |
| | | <el-table ref="table" style="margin-top: 20px;height: 700px;" :data="tableDatab" |
| | | <el-table ref="table" style="margin-top: 20px;height: 700px;" :data="tableDatab" v-loading="loading" |
| | | :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="slot" fixed align="center" :label="$t('film.slot')" min-width="80" /> |
| | |
| | | case 2: |
| | | return t('searchOrder.endtask'); |
| | | case 3: |
| | | return t('film.fail'); |
| | | return t('searchOrder.breakage'); |
| | | } |
| | | } |
| | | function getStatusTypea(taskRunning: number) { |
| | |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="270"> |
| | | <template #default="scope"> |
| | | <el-input v-model="inputQuantities[scope.row.slot]" type="number" min="0" @input="handleInput(scope.row)" |
| | | :placeholder="$t('basicData.selectquantity')" v-if ="scope.row.slot < 99" |
| | | :placeholder="$t('basicData.selectquantity')" v-if ="scope.row.slot != 99" |
| | | style="width: 120px; margin-right: 10px;"> |
| | | </el-input> |
| | | <el-button type="text" v-if = "scope.row.slot < 99" :disabled="isPaused || hasRunningTask" @click="handleBind(scope.row)"> |
| | | <el-button type="text" v-if = "scope.row.slot != 99" :disabled="isPaused || hasRunningTask" @click="handleBind(scope.row)"> |
| | | {{ $t('basicData.startloading') }} </el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <!-- 工程列表展示 --> |
| | | <div v-if="pauseEngineeringList.length > 0"> |
| | | <div style="text-align: center; margin-bottom: 10px;"> |
| | | {{ $t('basicData.isEnable')}}{{ pauseEngineeringList[0].engineerId }}{{ $t('basicData.project') }} |
| | | {{ $t('basicData.isEnable')}} {{ pauseEngineeringList[0].engineerId }} {{ $t('basicData.project') }} |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 无暂停工程时的提示 --> |
| | | <div v-else class="no-data" style="text-align: center; padding: 20px;"> |
| | | <el-empty description="No pause engineering" /> |
| | |
| | | |
| | | |
| | | </dependencies> |
| | | |
| | | <build> |
| | | <resources> |
| | | <resource> |
| | | <!-- 源资源目录(默认是 src/main/resources) --> |
| | | <directory>src/main/resources</directory> |
| | | <!-- 排除 i18n 文件夹及其所有内容 --> |
| | | <excludes> |
| | | <exclude>i18n/**/*</exclude> <!-- **表示递归匹配所有子目录,*表示所有文件 --> |
| | | </excludes> |
| | | </resource> |
| | | </resources> |
| | | </build> |
| | | </project> |
| | |
| | | } |
| | | Page<LoadGlassDeviceTaskHistory> page = new Page<>(request.getPageNo(), request.getPageSize()); |
| | | LambdaQueryWrapper<LoadGlassDeviceTaskHistory> wrapper = new LambdaQueryWrapper<LoadGlassDeviceTaskHistory>() |
| | | .like(StringUtils.isNotBlank(request.getRawGlassWidth()), LoadGlassDeviceTaskHistory::getRawGlassWidth, "%" + request.getRawGlassWidth() + "%") |
| | | .like(StringUtils.isNotBlank(request.getRawGlassHeight()), LoadGlassDeviceTaskHistory::getRawGlassHeight, "%" + request.getRawGlassHeight() + "%") |
| | | .like(StringUtils.isNotBlank(request.getRawGlassThickness()), LoadGlassDeviceTaskHistory::getRawGlassThickness, "%" + request.getRawGlassThickness() + "%") |
| | | .like(StringUtils.isNotBlank(request.getRawGlassfilmsId()), LoadGlassDeviceTaskHistory::getRawGlassFilmsId, "%" + request.getRawGlassfilmsId() + "%") |
| | | .like(StringUtils.isNotBlank(request.getRawGlassWidth()), LoadGlassDeviceTaskHistory::getRawGlassWidth, request.getRawGlassWidth()) |
| | | .like(StringUtils.isNotBlank(request.getRawGlassHeight()), LoadGlassDeviceTaskHistory::getRawGlassHeight, request.getRawGlassHeight()) |
| | | .like(StringUtils.isNotBlank(request.getRawGlassThickness()), LoadGlassDeviceTaskHistory::getRawGlassThickness, request.getRawGlassThickness()) |
| | | .like(StringUtils.isNotBlank(request.getRawGlassfilmsId()), LoadGlassDeviceTaskHistory::getRawGlassFilmsId, request.getRawGlassfilmsId()) |
| | | .eq(request.getEngineeringId() != null, LoadGlassDeviceTaskHistory::getEngineeringId, request.getEngineeringId()) |
| | | .eq(request.getStation() != 0, LoadGlassDeviceTaskHistory::getStation, request.getStation()) |
| | | .eq(request.getSlot() != 0, LoadGlassDeviceTaskHistory::getSlot, request.getSlot()) |
| | |
| | | public ReloadableResourceBundleMessageSource messageSource() { |
| | | ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); |
| | | // 配置文件i18n目录下的messages开头文件 |
| | | messageSource.setBasename("file:D:/mes/aerjiliya/i18n/messages"); |
| | | messageSource.setBasename("file:D:/MES/i18n/messages"); |
| | | messageSource.setDefaultEncoding("UTF-8"); |
| | | messageSource.setCacheSeconds(20); |
| | | return messageSource; |
| New file |
| | |
| | | package com.mes.tools; |
| | | |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.scheduling.annotation.SchedulingConfigurer; |
| | | import org.springframework.scheduling.config.ScheduledTaskRegistrar; |
| | | |
| | | import java.util.concurrent.*; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | |
| | | /** |
| | | * @author huang |
| | | * @since 2025/10/22 |
| | | */ |
| | | @Configuration |
| | | public class SchedulerConfig implements SchedulingConfigurer { |
| | | |
| | | @Override |
| | | public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { |
| | | // 使用 ScheduledThreadPoolExecutor(支持定时调度的线程池) |
| | | ScheduledThreadPoolExecutor schedulerPool = new ScheduledThreadPoolExecutor( |
| | | // 核心线程数:根据定时任务数量设置 |
| | | 5, |
| | | new ThreadFactory() { |
| | | private final AtomicInteger count = new AtomicInteger(1); |
| | | @Override |
| | | public Thread newThread(Runnable r) { |
| | | return new Thread(r, "scheduler-thread-" + count.getAndIncrement()); |
| | | } |
| | | }, |
| | | new ThreadPoolExecutor.CallerRunsPolicy() |
| | | ); |
| | | // 设置空闲线程存活时间(非核心线程,默认60秒,可按需调整) |
| | | schedulerPool.setKeepAliveTime(60, TimeUnit.SECONDS); |
| | | // 允许核心线程超时销毁(如果任务不频繁,可节省资源) |
| | | schedulerPool.allowCoreThreadTimeOut(true); |
| | | |
| | | taskRegistrar.setScheduler(schedulerPool); |
| | | } |
| | | } |
| New file |
| | |
| | | package com.mes.tools; |
| | | |
| | | import liquibase.pro.packaged.C; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | import java.util.concurrent.*; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | |
| | | /** |
| | | * @author huang |
| | | * @since 2025/10/22 |
| | | */ |
| | | @Configuration |
| | | public class WebSocketExecutorConfig { |
| | | @Bean("webSocketSenderPool") |
| | | public ExecutorService webSocketSenderPool() { |
| | | return new ThreadPoolExecutor( |
| | | 2, // 核心线程数:根据客户端数量设置(一般2-5足够) |
| | | 4, // 最大线程数:客户端峰值时临时扩容 |
| | | 30L, TimeUnit.SECONDS, |
| | | new SynchronousQueue<>(), // 同步队列:无缓冲,直接提交给线程执行 |
| | | new ThreadFactory() { |
| | | private final AtomicInteger count = new AtomicInteger(1); |
| | | @Override |
| | | public Thread newThread(Runnable r) { |
| | | Thread thread = new Thread(r, "ws-sender-thread-" + count.getAndIncrement()); |
| | | thread.setDaemon(true); // 守护线程:应用退出时自动销毁 |
| | | return thread; |
| | | } |
| | | }, |
| | | new ThreadPoolExecutor.DiscardOldestPolicy() // 队列满时:丢弃最旧的任务,执行新任务(避免消息堆积过久) |
| | | ); |
| | | } |
| | | } |
| | |
| | | #基础通用 |
| | | rawglass.success=任务下发成功,等待任务执行 |
| | | rawglass.details.success=录入信息成功 |
| | | rawglass.error=任务失败,请稍后重试 |
| | | rawglass.task.generate.error=生成任务异常 |
| | | rawglass.no.empty.shelf=当前工位不存在可用的架子 |
| | | rawglass.modify.success=修改成功 |
| | | rawglass.query.success=查询成功 |
| | | rawglass.delete.success=删除成功 |
| | | rawglass.enable=启用 |
| | | rawglass.unenable=禁用 |
| | | #???? |
| | | rawglass.success=????????????? |
| | | rawglass.details.success=?????? |
| | | rawglass.error=?????????? |
| | | rawglass.task.generate.error=?????? |
| | | rawglass.no.empty.shelf=???????????? |
| | | rawglass.modify.success=???? |
| | | rawglass.query.success=???? |
| | | rawglass.delete.success=???? |
| | | rawglass.enable=?? |
| | | rawglass.disable=?? |
| | | |
| | | #吊装位请求 |
| | | rawglass.warehousing.request.error=吊装位请求失败 |
| | | rawglass.warehousing.slot.occupied=当前吊装位有架子,请求失败 |
| | | rawglass.warehousing.task.exists=当前吊装位已经存在任务 |
| | | #????? |
| | | rawglass.warehousing.request.error=??????? |
| | | rawglass.warehousing.slot.occupied=????????????? |
| | | rawglass.warehousing.task.exists=??????????? |
| | | |
| | | #出库请求 |
| | | rawglass.outWarehousing.error=当前架子不在库内(状态异常),无法执行出库操作 |
| | | #???? |
| | | rawglass.outWarehousing.error=??????????????????????? |
| | |
| | | #基础通用 |
| | | #???? |
| | | rawglass.success=The task is successfully issued and waiting for the task to be executed |
| | | rawglass.details.success=Successfully entered information |
| | | rawglass.error=The task failed, please try again later |
| | |
| | | rawglass.query.success=Query successfully |
| | | rawglass.delete.success=Deleted successfully |
| | | rawglass.enable=Enable |
| | | rawglass.Disable=Disable |
| | | #吊装位请求 |
| | | rawglass.disable=Disable |
| | | |
| | | #????? |
| | | rawglass.warehousing.request.error=Hoisting position request failed, please check parameters |
| | | rawglass.warehousing.slot.occupied=Current hoisting position has a shelf, request failed |
| | | rawglass.warehousing.task.exists=Task already exists for the current hanger |
| | | |
| | | #出库请求 |
| | | #???? |
| | | rawglass.outWarehousing.error=The current shelf is not in the library (abnormal status), and the checkout operation cannot be performed |
| | |
| | | #基础通用 |
| | | rawglass.success=任务下发成功,等待任务执行 |
| | | rawglass.details.success=录入信息成功 |
| | | rawglass.error=任务失败,请稍后重试 |
| | | rawglass.task.generate.error=生成任务异常 |
| | | rawglass.no.empty.shelf=当前工位不存在可用的架子 |
| | | rawglass.modify.success=修改成功 |
| | | rawglass.query.success=查询成功 |
| | | rawglass.delete.success=删除成功 |
| | | rawglass.enable=启用 |
| | | rawglass.disable=禁用 |
| | | #???? |
| | | rawglass.success=????????????? |
| | | rawglass.details.success=?????? |
| | | rawglass.error=?????????? |
| | | rawglass.task.generate.error=?????? |
| | | rawglass.no.empty.shelf=???????????? |
| | | rawglass.modify.success=???? |
| | | rawglass.query.success=???? |
| | | query.error=???? |
| | | |
| | | #吊装位请求 |
| | | rawglass.warehousing.request.error=吊装位请求失败 |
| | | rawglass.warehousing.slot.occupied=当前吊装位有架子,请求失败 |
| | | rawglass.warehousing.task.exists=当前吊装位已经存在任务 |
| | | rawglass.delete.success=???? |
| | | rawglass.enable=?? |
| | | rawglass.disable=?? |
| | | |
| | | #出库请求 |
| | | rawglass.outWarehousing.error=当前架子不在库内(状态异常),无法执行出库操作 |
| | | #????? |
| | | rawglass.warehousing.request.error=??????? |
| | | rawglass.warehousing.slot.occupied=????????????? |
| | | rawglass.warehousing.task.exists=??????????? |
| | | |
| | | #???? |
| | | rawglass.outWarehousing.error=??????????????????????? |
| | |
| | | <result column="group_number" property="groupNumber"/> |
| | | </resultMap> |
| | | <select id="queryRawGlassByEngineeringId" resultMap="baseMap"> |
| | | SET @prev_width := NULL; |
| | | SET @prev_height := NULL; |
| | | SET @counter := 0; |
| | | SELECT t.*, |
| | | @counter := IF(@prev_width = width and @prev_height = height, @counter, @counter + 1) AS group_number, |
| | | @prev_width := width, |
| | | @prev_height := height |
| | | FROM up_patten_usage t |
| | | where t.engineering_id = #{engineeringId} |
| | | and t.state = 0 |
| | | ORDER BY t.layout_sequence |
| | | SELECT |
| | | t.*, |
| | | t.group_number |
| | | FROM ( |
| | | SELECT |
| | | upu.*, |
| | | -- 计算组号 |
| | | @counter := IF(@prev_width = upu.width AND @prev_height = upu.height, |
| | | @counter, |
| | | @counter + 1) AS group_number, |
| | | -- 变量赋值 |
| | | @prev_width := upu.width, |
| | | @prev_height := upu.height |
| | | FROM |
| | | up_patten_usage upu, |
| | | -- 关键:用虚拟表初始化变量,替代单独的SET语句 |
| | | (SELECT @prev_width := NULL, @prev_height := NULL, @counter := 0) AS init_var |
| | | WHERE |
| | | upu.engineering_id = #{engineeringId} |
| | | AND upu.state = 0 |
| | | ORDER BY |
| | | upu.layout_sequence |
| | | ) AS t |
| | | </select> |
| | | <select id="queryFinishByEngineering" resultType="java.lang.Integer"> |
| | | SELECT id |
| | |
| | | import com.mes.rawglasstask.service.RawGlassStorageTaskService; |
| | | import com.mes.tools.WebSocketServer; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Qualifier; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | import java.util.concurrent.ExecutorService; |
| | | |
| | | /** |
| | | * @author wangfei |
| | |
| | | @Resource |
| | | private OrdersService ordersService; |
| | | |
| | | @Scheduled(fixedDelay = 2000) |
| | | @Autowired |
| | | @Qualifier("webSocketSenderPool") |
| | | private ExecutorService webSocketSenderPool; |
| | | |
| | | @Scheduled(fixedDelay = 5000) |
| | | public void sendRawGlassMessage() { |
| | | log.info("发送任务信息和架子信息"); |
| | | JSONObject jsonObject = new JSONObject(); |
| | |
| | | List<RawGlassStorageTask> tasks = rawGlassStorageTaskService.listRawGlassTask(); |
| | | jsonObject.append("rawStationDetailsList", rawStationDetailsList); |
| | | jsonObject.append("tasks", tasks); |
| | | String message = String.valueOf(jsonObject); |
| | | List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("rawGlass"); |
| | | if (CollectionUtil.isNotEmpty(sendwServer)) { |
| | | sendwServer.stream().forEach(e -> { |
| | | e.sendMessage(String.valueOf(jsonObject)); |
| | | }); |
| | | sendwServer.forEach(ws -> webSocketSenderPool.submit(() -> ws.sendMessage(message))); |
| | | } |
| | | } |
| | | |
| | |
| | | @ApiOperation("更新剩余数量") |
| | | @PostMapping("/updateQuantity") |
| | | public Result<Object> updateQuantity(@Validated @RequestBody RawGlassRequest request) { |
| | | String successMsg = messageSource.getMessage( |
| | | "rawglass.modify.success", |
| | | null, |
| | | LocaleContextHolder.getLocale() |
| | | ); |
| | | return Result.build(200, successMsg, rawGlassStorageDetailsService.updateQuantity(request)); |
| | | String result = rawGlassStorageDetailsService.updateQuantity(request); |
| | | if ("success".equals(result)) { |
| | | String successMsg = messageSource.getMessage( |
| | | "rawglass.modify.success", |
| | | null, |
| | | LocaleContextHolder.getLocale() |
| | | ); |
| | | return Result.build(200, successMsg, null); |
| | | } else { |
| | | return Result.build(500, "fail", null); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation("删除原片") |
| | | @PostMapping("/deleteWarehousing") |
| | | public Result<Object> deleteWarehousing(Long slot) { |
| | | String successMsg = messageSource.getMessage( |
| | | "rawglass.delete.success", |
| | | null, |
| | | LocaleContextHolder.getLocale() |
| | | ); |
| | | return Result.build(200, successMsg, rawGlassStorageDetailsService.deleteWarehousing(slot)); |
| | | String result = rawGlassStorageDetailsService.deleteWarehousing(slot); |
| | | if ("success".equals(result)) { |
| | | String successMsg = messageSource.getMessage( |
| | | "rawglass.delete.success", |
| | | null, |
| | | LocaleContextHolder.getLocale() |
| | | ); |
| | | return Result.build(200, successMsg, null); |
| | | } else { |
| | | return Result.build(500, "fail", null); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation("出库") |
| | |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.MessageSource; |
| | | import org.springframework.context.i18n.LocaleContextHolder; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | @Autowired |
| | | DamageService damageService; |
| | | |
| | | // 国际语言库 |
| | | @Resource |
| | | private MessageSource messageSource; |
| | | |
| | | @ApiOperation("开始/暂停任务/传递工程号和状态,开始是1 暂停是0") |
| | | @PostMapping("/pauseTask") //暂停上片任务 |
| | |
| | | boolean work = engineeringService.pauseTask(engineering.getEngineerId(),engineering.getState()); |
| | | // List<UpPattenUsage> glass = upPattenUsageService.prioritylist();String message; |
| | | if(work){ |
| | | return Result.build(200, "成功", null); |
| | | return Result.build(200, "success", null); |
| | | }else { |
| | | return Result.build(100, "失敗", null); |
| | | return Result.build(500, "fail", null); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | List<UpPattenUsageVO> pattenUsageList = upPattenUsageMapper.queryRawGlassByEngineeringId(engineering.getEngineerId()); |
| | | log.info("按照当前获取到正在需要上片的原片信息有:{}", pattenUsageList); |
| | | log.info("获取正在需要上片的原片信息有:{}", pattenUsageList); |
| | | if (CollectionUtils.isEmpty(pattenUsageList)) { |
| | | log.info("当前工程需要上片的原片信息为空,任务已结束"); |
| | | return; |
| | | } |
| | | // 有无正在执行的任务 |
| | | UpPattenUsage runningTask = upPattenUsageMapper.selectOne( |
| | | new LambdaQueryWrapper<UpPattenUsage>() |
| | | .eq(UpPattenUsage::getEngineeringId, engineering.getEngineerId()) |
| | | .eq(UpPattenUsage::getState, 101) |
| | | .last("limit 1") // 只取一条 |
| | | ); |
| | | if (runningTask != null) { |
| | | log.info("当前工程存在正在执行的上片任务,跳过本次处理"); |
| | | return; |
| | | } |
| | | |
| | | Map<String, List<UpPattenUsageVO>> upListMap = pattenUsageList.stream() |
| | | .collect(Collectors.groupingBy(UpPattenUsageVO::getGroupNumber)); |
| | | log.info("获取当前需要上片的原片数据"); |
| | |
| | | task.setTaskRunning(1); |
| | | task.setRawGlassWidth((int) usageVOS.get(0).getWidth()); |
| | | task.setRawGlassHeight((int) usageVOS.get(0).getHeight()); |
| | | task.setSlot(loadStation.get(0)); |
| | | task.setSlot(1); |
| | | task.setRawGlassFilmsId(usageVOS.get(0).getFilmsId()); |
| | | task.setEngineeringId(usageVOS.get(0).getEngineeringId()); |
| | | saveHistoryTask(task, deviceId); |
| | |
| | | s7DataSPWrite.setMesSend(1); |
| | | s7DataSPWrite.setRawGlassWidth((int) usageVOS.get(0).getWidth()); |
| | | s7DataSPWrite.setRawGlassHeight((int) usageVOS.get(0).getHeight()); |
| | | s7DataSPWrite.setSlot(loadStation.get(1)); |
| | | s7DataSPWrite.setSlot(1); |
| | | if (LOAD_GLASS_ONE_DEVICE.equals(deviceId)) { |
| | | s7SerializerSPOne.write(s7DataSPWrite); |
| | | } else { |
| | |
| | | task.setRawGlassWidth((int) usageVOS.get(0).getWidth()); |
| | | task.setRawGlassHeight((int) usageVOS.get(0).getHeight()); |
| | | task.setRawGlassThickness((int) usageVOS.get(0).getThickness()); |
| | | task.setSlot(loadStation.get(0)); |
| | | task.setSlot(1); |
| | | task.setRawGlassFilmsId(usageVOS.get(0).getFilmsId()); |
| | | task.setEngineeringId(usageVOS.get(0).getEngineeringId()); |
| | | saveHistoryTask(task, deviceId); |
| | |
| | | s7DataSPWrite.setMesSend(1); |
| | | s7DataSPWrite.setRawGlassWidth((int) usageVOS.get(0).getWidth()); |
| | | s7DataSPWrite.setRawGlassHeight((int) usageVOS.get(0).getHeight()); |
| | | s7DataSPWrite.setSlot(loadStation.get(0)); |
| | | s7DataSPWrite.setSlot(1); |
| | | if (LOAD_GLASS_ONE_DEVICE.equals(deviceId)) { |
| | | s7SerializerSPOne.write(s7DataSPWrite); |
| | | } else { |
| | |
| | | unconfirmedTask.setTaskState(Const.RAW_GLASS_TASK_SUCCESS); |
| | | unconfirmedTask.setFinishCount(unconfirmedTask.getFinishCount() + 1); |
| | | log.info("{}上片线,任务汇报成功,更新上片记录[{}]为成功", deviceId, upUsageId); |
| | | |
| | | // PLC确认字1 |
| | | s7DataSP.setMesConfirm(1); |
| | | s7SerializerSPOne.write(s7DataSP); |
| | | } else if (s7DataSP.getPlcReport() == 2) { |
| | | // 汇报失败 |
| | | unconfirmedTask.setTaskState(2); |
| | | // unconfirmedTask.setDamageCount(unconfirmedTask.getDamageCount() + 1); |
| | | log.warn("{}上片线,任务汇报失败,上片记录[{}]标记为失败", deviceId, upUsageId); |
| | | |
| | | // PLC确认字2 |
| | | s7DataSP.setMesConfirm(2); |
| | | s7SerializerSPOne.write(s7DataSP); |
| | | }else if (s7DataSP.getPlcReport() == 3) { |
| | | // 汇报破损 |
| | | unconfirmedTask.setTaskState(200); |
| | | unconfirmedTask.setTaskState(3); |
| | | unconfirmedTask.setDamageCount(unconfirmedTask.getDamageCount() + 1); |
| | | log.warn("{}上片线,任务汇报破损,上片记录[{}]标记为破损", deviceId, upUsageId); |
| | | |
| | | // PLC确认字3 |
| | | s7DataSP.setMesConfirm(3); |
| | | s7SerializerSPOne.write(s7DataSP); |
| | | } |
| | | unconfirmedTask.setUpdateTime(new Date()); |
| | | loadGlassDeviceTaskHistoryService.updateById(unconfirmedTask); |
| | |
| | | rawGlassStorageDetailsService.update(new UpdateWrapper<RawGlassStorageDetails>() |
| | | .inSql("slot", "select slot from raw_glass_storage_station where enable_state = 1") |
| | | // .eq("slot", task.getSlot()) |
| | | .eq("slot", unconfirmedTask.getSlot()) |
| | | .eq("slot", 101) |
| | | .eq("state", Const.RAW_GLASS_STATE_IN) |
| | | .setSql("remain_quantity = GREATEST(remain_quantity - 1, 0)")); |
| | | //汇报字给1 |
| | | S7DataSP s7DataSPWrite = new S7DataSP(); |
| | | s7DataSPWrite.setMesConfirm(1); |
| | | s7SerializerSPOne.write(s7DataSPWrite); |
| | | } |
| | | |
| | | private boolean saveHistoryTask(LoadGlassDeviceTaskHistory task, Integer deviceId) { |
| | |
| | | loadGlassChild("loadGlassRequestOne", 5, LOAD_GLASS_DEVICE_ONE_TASK, "loadGlassOne"); |
| | | } |
| | | |
| | | @Scheduled(fixedDelay = 10000) |
| | | // @Scheduled(fixedDelay = 10000) |
| | | public void loadTwoGlass() { |
| | | loadGlassChild("loadGlassRequestTwo", 6, LOAD_GLASS_DEVICE_TWO_TASK, "loadGlassTwo"); |
| | | } |
| | |
| | | import com.mes.opctask.entity.LoadGlassDeviceTaskHistory; |
| | | import com.mes.opctask.entity.request.LoadGlassDeviceTaskHistoryRequest; |
| | | import com.mes.opctask.service.LoadGlassDeviceTaskHistoryService; |
| | | import com.mes.pp.service.OptimizeProjectService; |
| | | import com.mes.uppattenusage.entity.UpPattenUsage; |
| | | import com.mes.utils.Result; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.MessageSource; |
| | | import org.springframework.context.i18n.LocaleContextHolder; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | import javax.annotation.Resource; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | @Autowired |
| | | private LoadGlassDeviceTaskHistoryService loadGlassDeviceTaskHistoryService; |
| | | |
| | | // 国际语言库 |
| | | @Resource |
| | | private MessageSource messageSource; |
| | | |
| | | @ApiOperation("按照查询条件查询上片历史任务") |
| | | @PostMapping("/queryLoadGlassHistoryTask") //查询现在上片机的玻璃信息 |
| | | public Result<Page<LoadGlassDeviceTaskHistory>> queryBigStorageCageHistoryTask(@RequestBody @Validated LoadGlassDeviceTaskHistoryRequest request) { |
| | | return Result.build(200, "查询成功", loadGlassDeviceTaskHistoryService.queryLoadGlassHistoryTask(request)); |
| | | Page<LoadGlassDeviceTaskHistory> result = loadGlassDeviceTaskHistoryService.queryLoadGlassHistoryTask(request); |
| | | if (result != null) { |
| | | String successMsg = messageSource.getMessage( |
| | | "rawglass.query.success", |
| | | null, |
| | | LocaleContextHolder.getLocale() |
| | | ); |
| | | return Result.build(200, successMsg, result); |
| | | }else { |
| | | return Result.build(500, "fail", result); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.MessageSource; |
| | | import org.springframework.context.i18n.LocaleContextHolder; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 前端控制器 |
| | | * 前端控制器 |
| | | * </p> |
| | | * |
| | | * @author zhoush |
| | |
| | | private EngineeringService engineeringService; |
| | | @Autowired |
| | | private OptimizeProjectService optimizeProjectService; |
| | | |
| | | // 国际语言库 |
| | | @Resource |
| | | private MessageSource messageSource; |
| | | |
| | | |
| | | @ApiOperation("显示选择的工程信息") |
| | |
| | | @ApiOperation("添加任务") |
| | | @PostMapping("/insertTask") |
| | | public Result insertTask(Integer quantity, Integer slot) { |
| | | return Result.build(200, "添加成功", upPattenUsageService.insertTask(quantity, slot)); |
| | | Boolean result = upPattenUsageService.insertTask(quantity, slot); |
| | | String successMsg = messageSource.getMessage( |
| | | "rawglass.success", |
| | | null, |
| | | LocaleContextHolder.getLocale() |
| | | ); |
| | | if (result) { |
| | | return Result.build(200, successMsg, true); |
| | | } else { |
| | | return Result.build(500, "fail", false); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation("删除任务") |
| | | @PostMapping("/deleteTask") |
| | | public Result deleteUpPattenTask(String id) { |
| | | return Result.build(200, "删除成功", upPattenUsageService.deleteUpPattenTask(id)); |
| | | Boolean result = upPattenUsageService.deleteUpPattenTask(id); |
| | | String successMsg = messageSource.getMessage( |
| | | "rawglass.delete.success", |
| | | null, |
| | | LocaleContextHolder.getLocale() |
| | | ); |
| | | if (result) { |
| | | return Result.build(200, successMsg, true); |
| | | } else { |
| | | return Result.build(500, "fail", false); |
| | | } |
| | | } |
| | | } |
| | | |