1、大理片笼历史任务功能开发
2、大理片笼任务表4张、历史任务表一张脚本
3、大理片笼进片任务功能开发
4、解决卧理生产中遇到的bug
11个文件已修改
1 文件已重命名
7个文件已添加
3个文件已删除
| | |
| | | public static final Integer EDG_GLASS_SUCCESS = 2; |
| | | |
| | | /** |
| | | * 磨边任务玻璃状态 |
| | | * 大理片笼状态 |
| | | * 1单机自动状态 |
| | | * 2联机自动状态 |
| | | * 3手动状态 |
| | |
| | | public static final Integer BIG_STORAGE_MT = 3; |
| | | |
| | | /** |
| | | * 大理片笼任务类型 |
| | | * 1、钢化前进片 |
| | | * 2、钢化前出片 |
| | | * 3、钢化后进片 |
| | | * 4、钢化后出片 |
| | | */ |
| | | public static final Integer BIG_STORAGE_BEFORE_IN = 1; |
| | | public static final Integer BIG_STORAGE_BEFORE_OUT = 2; |
| | | public static final Integer BIG_STORAGE_AFTER_IN = 3; |
| | | public static final Integer BIG_STORAGE_AFTER_OUT = 4; |
| | | |
| | | /** |
| | | * 大理片笼请求 |
| | | * 0 大理片笼无请求 |
| | | * 1 大理片笼进片请求 |
| | |
| | | */ |
| | | public interface EdgStorageCageDetailsMapper extends MPJBaseMapper<EdgStorageCageDetails> { |
| | | |
| | | EdgStorageCageDetails queryEdgStorageDetailsBySize(double width, double height); |
| | | EdgStorageCageDetails queryEdgStorageDetailsBySize(int deviceId, int currentSlot, double width, double height); |
| | | } |
| | |
| | | |
| | | /** |
| | | * <p> |
| | | * 服务类 |
| | | * 服务类 |
| | | * </p> |
| | | * |
| | | * @author zhoush |
| | |
| | | |
| | | /** |
| | | * 获取 切割当前版图 |
| | | * |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> selectCutTerritory(); |
| | | |
| | | /** |
| | | * 获取 工程下的当前版图 |
| | | * |
| | | * @param current |
| | | * @return |
| | | */ |
| | | List<List<Map<String, Object>>> selectCurrentCutTerritory(String current); |
| | | |
| | | /** |
| | | * 获取 工程下的钢化版图 |
| | | * |
| | | * @param current |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 查询笼内版图差值范围内的 此尺寸玻璃 如无则按照 钢化版图序号 以及玻璃序号 |
| | | * |
| | | * @param glassId |
| | | * @param threshold |
| | | * @return |
| | |
| | | /** |
| | | * 按照尺寸 |
| | | * |
| | | * @param deviceId |
| | | * @param width |
| | | * @param height |
| | | * @return |
| | | */ |
| | | EdgStorageCageDetails queryEdgStorageDetailsBySize(double width, double height); |
| | | EdgStorageCageDetails queryEdgStorageDetailsBySize(int deviceId, int currentSlot, double width, double height); |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public EdgStorageCageDetails queryEdgStorageDetailsBySize(double width, double height) { |
| | | return baseMapper.queryEdgStorageDetailsBySize(width, height); |
| | | public EdgStorageCageDetails queryEdgStorageDetailsBySize(int deviceId, int currentSlot, double width, double height) { |
| | | return baseMapper.queryEdgStorageDetailsBySize(deviceId, currentSlot, width, height); |
| | | } |
| | | } |
| | |
| | | |
| | | @Scheduled(fixedDelay = Long.MAX_VALUE) |
| | | public void startTwoOpcTask() throws Exception { |
| | | miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL2.edg_storage_device_two_task[1].task_state"), cacheGlassStartCallback); |
| | | miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL2.edg_storage_device_two_task[1].task_state", "PLC.WL2.plc_task_tate"), cacheGlassStartCallback); |
| | | } |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | |
| | | } |
| | | String toEndingId = glassInfo.getTemperingLayoutId() + "" + glassInfo.getTemperingFeedSequence(); |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | list.add(generateReadWriteEntity("PLC.MB" + cell + ".mesControl", true)); |
| | | // list.add(generateReadWriteEntity("PLC.MB" + cell + ".mesControl", true)); |
| | | list.add(generateReadWriteEntity("PLC.MB" + cell + ".glassId", Integer.parseInt(toEndingId))); |
| | | list.add(generateReadWriteEntity("PLC.MB" + cell + ".toEdingId", Integer.parseInt(toEndingId))); |
| | | list.add(generateReadWriteEntity("PLC.MB" + cell + ".width", (int) Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10))); |
| | |
| | | @Value("${mes.cellLength}") |
| | | private int cellLength; |
| | | |
| | | private Date startDate; |
| | | |
| | | @Override |
| | | public void onSubscribe(String identifier, Object value) { |
| | | if (identifier.equals("PLC.WL2.plc_task_tate")) { |
| | | startDate = new Date(); |
| | | log.info("本次任务获取plc的值为{},时间:{},共耗时:{}ms", value, startDate); |
| | | return; |
| | | } |
| | | if (!identifier.equals("PLC.WL2.plc_task_tate")) { |
| | | Date endDate = new Date(); |
| | | log.info("本次任务link后的值为{},时间:{},共耗时:{}ms", value, endDate, endDate.getTime() - startDate.getTime()); |
| | | startDate = null; |
| | | } |
| | | log.info("当前正在执行的任务为{}", value); |
| | | String tableName = identifier.contains("edg_storage_device_one_task") ? EDG_STORAGE_DEVICE_ONE_TASK : EDG_STORAGE_DEVICE_TWO_TASK; |
| | | int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2; |
| | | EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName); |
| | | try { |
| | | if (task == null) { |
| | |
| | | } else if (request == 1) { |
| | | //进片任务 |
| | | log.info("进片任务:进片玻璃id为:{}", task.getGlassIdIn()); |
| | | intoTask(task, tableName); |
| | | intoTask(task, tableName, device); |
| | | } else if (request == 2) { |
| | | //出片任务 |
| | | outTask(task, tableName); |
| | | outTask(task, tableName, device); |
| | | } else if (request == 3) { |
| | | //直通任务 |
| | | if (!outTask(task, tableName)) { |
| | | intoTask(task, tableName); |
| | | if (!outTask(task, tableName, device)) { |
| | | intoTask(task, tableName, device); |
| | | } |
| | | } else if (request == 4) { |
| | | log.info("将启动子改为0"); |
| | |
| | | } |
| | | } |
| | | |
| | | private boolean intoTask(EdgStorageDeviceTask task, String tableName) { |
| | | private boolean intoTask(EdgStorageDeviceTask task, String tableName, int deviceId) { |
| | | //获取玻璃的基本信息 |
| | | GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn())); |
| | | if (null == glassInfo) { |
| | |
| | | return Boolean.FALSE; |
| | | } |
| | | //获取当前进片玻璃id和进片格子 相同尺寸可以放下的格子 |
| | | EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(1, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell()); |
| | | EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(deviceId, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell()); |
| | | if (edgStorageCage == null) { |
| | | log.info("相同尺寸可以放下的格子未找到,格子id:{}", task.getCurrentCell()); |
| | | // SELECT * from edg_storage_cage where device_id = 1 and remain_width > 1000 order by abs(slot - 10) |
| | | List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>().eq(EdgStorageCage::getDeviceId, 1) |
| | | List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>() |
| | | .eq(EdgStorageCage::getDeviceId, deviceId) |
| | | .eq(EdgStorageCage::getEnableState, Const.SLOT_ON) |
| | | .ge(EdgStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())).last("order by abs(slot - " + task.getCurrentCell() + ")")); |
| | | // //直通任务 |
| | |
| | | return Boolean.TRUE; |
| | | } |
| | | |
| | | private boolean outTask(EdgStorageDeviceTask task, String tableName) { |
| | | private boolean outTask(EdgStorageDeviceTask task, String tableName, int deviceId) { |
| | | EdgStorageCageDetails edgStorageCageDetails = null; |
| | | //笼内是版图相差是否超过阈值 |
| | | boolean flag = queryMaxMinDiff(threshold); |
| | |
| | | EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() |
| | | .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON) |
| | | .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .eq(EdgStorageCageDetails::getDeviceId, deviceId) |
| | | .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId) |
| | | .orderBy(Boolean.TRUE, Boolean.TRUE, EdgStorageCageDetails::getTemperingFeedSequence) |
| | | .last("limit 1")); |
| | |
| | | edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() |
| | | .eq(EdgStorageCageDetails::getWidth, minEdgDetails.getWidth()) |
| | | .eq(EdgStorageCageDetails::getHeight, minEdgDetails.getHeight()) |
| | | .eq(EdgStorageCageDetails::getDeviceId, deviceId) |
| | | .inSql(EdgStorageCageDetails::getId, "select min(id) from edg_storage_cage_details where state = 100 group by slot ") |
| | | .last("order by abs(slot - " + task.getCurrentCell() + ") asc limit 1") |
| | | ); |
| | |
| | | if (null == edgStorageCageDetails) { |
| | | edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() |
| | | .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .eq(EdgStorageCageDetails::getDeviceId, deviceId) |
| | | .eq(EdgStorageCageDetails::getSlot, minEdgDetails.getSlot()) |
| | | .orderByAsc(EdgStorageCageDetails::getId) |
| | | .last("limit 1") |
| | |
| | | if (null != edgeData) { |
| | | GlassInfo glassOutInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut())); |
| | | //笼内的玻璃的尺寸是否和上一次任务一致 |
| | | edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(glassOutInfo.getWidth(), glassOutInfo.getHeight()); |
| | | edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), glassOutInfo.getWidth(), glassOutInfo.getHeight()); |
| | | if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) { |
| | | GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() |
| | | .eq(GlassInfo::getGlassId, task.getGlassIdIn()) |
| | |
| | | } |
| | | } |
| | | if (null == edgStorageCageDetails) { |
| | | edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(0, 0); |
| | | edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0); |
| | | } |
| | | if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) { |
| | | //和上次任务不存在相同尺寸 |
| | |
| | | int taskType = Const.GLASS_CACHE_TYPE_OUT; |
| | | String glassId = edgStorageCageDetails.getGlassId(); |
| | | if (glassId.equals(task.getGlassIdIn())) { |
| | | if (3 != task.getTaskState()) { |
| | | return Boolean.FALSE; |
| | | } |
| | | log.info("5、直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", edgStorageCageDetails); |
| | | //玻璃信息替换 |
| | | String glassIdChange = queryAndChangeGlass(glassId); |
| | |
| | | GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); |
| | | BeanUtils.copyProperties(one, edgStorageCageDetails); |
| | | } |
| | | EdgStorageCage storageCage = edgStorageCageService.getOne(new LambdaQueryWrapper<EdgStorageCage>().eq(EdgStorageCage::getDeviceId, 1) |
| | | EdgStorageCage storageCage = edgStorageCageService.getOne(new LambdaQueryWrapper<EdgStorageCage>() |
| | | .eq(EdgStorageCage::getDeviceId, deviceId) |
| | | .eq(EdgStorageCage::getEnableState, Const.SLOT_ON) |
| | | .ge(EdgStorageCage::getRemainWidth, cellLength).last("order by abs(slot - " + task.getCurrentCell() + ")") |
| | | .last("limit 1")); |
| | | .ge(EdgStorageCage::getRemainWidth, cellLength) |
| | | .last("order by abs(slot - " + task.getCurrentCell() + ") limit 1")); |
| | | Assert.isTrue(null != storageCage, "格子已满,无法执行直通任务"); |
| | | log.info("3、查询卧式理片笼里面的空格:{}", storageCage); |
| | | edgStorageCageDetails.setSlot(storageCage.getSlot()); |
| | | edgStorageCageDetails.setDeviceId(storageCage.getDeviceId()); |
| | | edgStorageCageDetails.setState(Const.GLASS_STATE_OUT); |
| | | edgStorageCageDetailsService.save(edgStorageCageDetails); |
| | | taskType = Const.GLASS_CACHE_TYPE_THROUGH; |
| | |
| | | if (!edgStorageCageDetails.getSlot().equals(task.getCurrentCell())) { |
| | | EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() |
| | | .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .eq(EdgStorageCageDetails::getDeviceId, deviceId) |
| | | .eq(EdgStorageCageDetails::getSlot, task.getCurrentCell()).eq(EdgStorageCageDetails::getWidth, edgStorageCageDetails.getWidth()) |
| | | .eq(EdgStorageCageDetails::getHeight, edgStorageCageDetails.getHeight()).eq(EdgStorageCageDetails::getThickness, edgStorageCageDetails.getThickness()) |
| | | .orderByAsc(EdgStorageCageDetails::getId).last("limit 1") |
| | |
| | | select slot, min(id) as id, count(*) as glass_count |
| | | from edg_storage_cage_details |
| | | where state = 100 |
| | | and device_id = #{deviceId} |
| | | group by slot |
| | | ), |
| | | size_max_temp as ( |
| | |
| | | and t.height = #{height} |
| | | </if> |
| | | </where> |
| | | order by total_count desc, glass_count, abs(t.slot - 10) |
| | | order by total_count desc, glass_count, abs(t.slot - #{currentSlot}) |
| | | ) |
| | | select * |
| | | from slot_temp limit 1 |
New file |
| | |
| | | package com.mes.bigstoragecagetask.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * (BigStorageCageHistoryTask)表实体类 |
| | | * |
| | | * @author makejava |
| | | * @since 2024-11-13 22:46:49 |
| | | */ |
| | | @Data |
| | | public class BigStorageCageHistoryTask { |
| | | |
| | | private Integer id; |
| | | /** |
| | | * 玻璃id |
| | | */ |
| | | private String glassId; |
| | | /** |
| | | * 起始格子 |
| | | */ |
| | | private Integer startSlot; |
| | | /** |
| | | * 目标格子 |
| | | */ |
| | | private Integer targetSlot; |
| | | /** |
| | | * 任务状态 |
| | | */ |
| | | private Integer taskState; |
| | | /** |
| | | * 玻璃数量 |
| | | */ |
| | | private Integer glassCount; |
| | | /** |
| | | * 任务类型 |
| | | */ |
| | | private Integer taskType; |
| | | /** |
| | | * 创建时间 |
| | | */ |
| | | private Date createTime; |
| | | /** |
| | | * 更新时间 |
| | | */ |
| | | private Date updateTime; |
| | | |
| | | |
| | | } |
| | | |
File was renamed from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecageIntask/entity/BigStorageCageInTask.java |
| | |
| | | package com.mes.bigstoragecageIntask.entity; |
| | | package com.mes.bigstoragecagetask.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | |
| | | * @since 2024-11-08 21:40:17 |
| | | */ |
| | | @Data |
| | | public class BigStorageCageInTask { |
| | | /** |
| | | * 任务请求 0无任务 1启动任务 2 确认完成 |
| | | */ |
| | | private Integer taskRunning; |
| | | public class BigStorageCageTask { |
| | | /** |
| | | * 玻璃id |
| | | */ |
New file |
| | |
| | | package com.mes.bigstoragecagetask.mapper; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.mes.bigstoragecagetask.entity.BigStorageCageHistoryTask; |
| | | |
| | | /** |
| | | * (BigStorageCageHistoryTask)表数据库访问层 |
| | | * |
| | | * @author makejava |
| | | * @since 2024-11-13 22:46:47 |
| | | */ |
| | | public interface BigStorageCageHistoryTaskMapper extends BaseMapper<BigStorageCageHistoryTask> { |
| | | |
| | | } |
| | | |
New file |
| | |
| | | package com.mes.bigstoragecagetask.mapper; |
| | | |
| | | import com.mes.bigstoragecagetask.entity.BigStorageCageTask; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * (BigStorageCageInOneTask)表数据库访问层 |
| | | * |
| | | * @author makejava |
| | | * @since 2024-11-08 21:40:15 |
| | | */ |
| | | public interface BigStorageCageTaskMapper { |
| | | |
| | | List<BigStorageCageTask> queryTaskMessage(String tableName); |
| | | |
| | | boolean updateTaskMessage(@Param("tableName") String tableName, @Param("task") BigStorageCageTask bigStorageCageInTask); |
| | | |
| | | } |
| | | |
New file |
| | |
| | | package com.mes.bigstoragecagetask.service; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.mes.bigstoragecagetask.entity.BigStorageCageHistoryTask; |
| | | |
| | | /** |
| | | * (BigStorageCageHistoryTask)表服务接口 |
| | | * |
| | | * @author makejava |
| | | * @since 2024-11-13 22:46:53 |
| | | */ |
| | | public interface BigStorageCageHistoryTaskService extends IService<BigStorageCageHistoryTask> { |
| | | |
| | | } |
| | | |
New file |
| | |
| | | package com.mes.bigstoragecagetask.service; |
| | | |
| | | import com.mes.bigstoragecagetask.entity.BigStorageCageTask; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * (BigStorageCageInOneTask)表服务接口 |
| | | * |
| | | * @author makejava |
| | | * @since 2024-11-08 21:40:20 |
| | | */ |
| | | public interface BigStorageCageTaskService { |
| | | |
| | | |
| | | List<BigStorageCageTask> queryTaskMessage(String tableName); |
| | | |
| | | boolean updateTaskMessage(@Param("tableName") String tableName, @Param("task") BigStorageCageTask bigStorageCageInTask); |
| | | } |
| | | |
New file |
| | |
| | | package com.mes.bigstoragecagetask.service.impl; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.mes.bigstoragecagetask.entity.BigStorageCageHistoryTask; |
| | | import com.mes.bigstoragecagetask.mapper.BigStorageCageHistoryTaskMapper; |
| | | import com.mes.bigstoragecagetask.service.BigStorageCageHistoryTaskService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * (BigStorageCageHistoryTask)表服务实现类 |
| | | * |
| | | * @author makejava |
| | | * @since 2024-11-13 22:46:56 |
| | | */ |
| | | @Service |
| | | public class BigStorageCageHistoryTaskServiceImpl extends ServiceImpl<BigStorageCageHistoryTaskMapper, BigStorageCageHistoryTask> implements BigStorageCageHistoryTaskService { |
| | | |
| | | } |
| | | |
New file |
| | |
| | | package com.mes.bigstoragecagetask.service.impl; |
| | | |
| | | import com.mes.bigstoragecagetask.entity.BigStorageCageTask; |
| | | import com.mes.bigstoragecagetask.mapper.BigStorageCageTaskMapper; |
| | | import com.mes.bigstoragecagetask.service.BigStorageCageTaskService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * (BigStorageCageInOneTask)表服务实现类 |
| | | * |
| | | * @author makejava |
| | | * @since 2024-11-08 21:40:23 |
| | | */ |
| | | @Service |
| | | public class BigStorageCageTaskServiceImpl implements BigStorageCageTaskService { |
| | | |
| | | @Resource |
| | | BigStorageCageTaskMapper bigStorageCageInTaskMapper; |
| | | |
| | | @Override |
| | | public List<BigStorageCageTask> queryTaskMessage(String tableName) { |
| | | return bigStorageCageInTaskMapper.queryTaskMessage(tableName); |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateTaskMessage(String tableName, BigStorageCageTask bigStorageCageTask) { |
| | | return bigStorageCageInTaskMapper.updateTaskMessage(tableName, bigStorageCageTask); |
| | | } |
| | | } |
| | | |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
| | | import com.kangaroohy.milo.model.ReadWriteEntity; |
| | | import com.kangaroohy.milo.service.MiloService; |
| | | import com.mes.bigstorage.entity.BigStorageCage; |
| | | import com.mes.bigstorage.entity.BigStorageCageDetails; |
| | | import com.mes.bigstorage.entity.BigStorageDTO; |
| | | import com.mes.bigstorage.service.BigStorageCageDetailsService; |
| | | import com.mes.bigstorage.service.BigStorageCageService; |
| | | import com.mes.bigstoragecageIntask.entity.BigStorageCageInTask; |
| | | import com.mes.bigstoragecageIntask.service.BigStorageCageInTaskService; |
| | | import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; |
| | | import com.mes.bigstoragetask.entity.BigStorageCageOutTask; |
| | | import com.mes.bigstoragecagetask.entity.BigStorageCageHistoryTask; |
| | | import com.mes.bigstoragecagetask.entity.BigStorageCageTask; |
| | | import com.mes.bigstoragecagetask.service.BigStorageCageHistoryTaskService; |
| | | import com.mes.bigstoragecagetask.service.BigStorageCageTaskService; |
| | | import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO; |
| | | import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService; |
| | | import com.mes.bigstoragetask.service.BigStorageCageOutTaskService; |
| | | import com.mes.common.config.Const; |
| | | import com.mes.damage.entity.Damage; |
| | | import com.mes.damage.service.DamageService; |
| | | import com.mes.glassinfo.entity.GlassInfo; |
| | | import com.mes.glassinfo.service.GlassInfoService; |
| | | import com.mes.temperingglass.entity.TemperingGlassInfo; |
| | | import com.mes.temperingglass.service.TemperingGlassInfoService; |
| | | import com.mes.tools.service.BigStorageBaseService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | @Resource |
| | | private BigStorageCageDetailsService bigStorageCageDetailsService; |
| | | @Resource |
| | | private BigStorageCageFeedTaskService bigStorageCageFeedTaskService; |
| | | @Resource |
| | | private BigStorageCageOutTaskService bigStorageCageOutTaskService; |
| | | @Resource |
| | | private TemperingGlassInfoService temperingGlassInfoService; |
| | | @Resource |
| | | private DamageService damageService; |
| | |
| | | private GlassInfoService glassInfoService; |
| | | @Resource |
| | | private BigStorageCageService bigStorageCageService; |
| | | @Resource |
| | | private BigStorageCageHistoryTaskService bigStorageCageHistoryTaskService; |
| | | @Resource |
| | | private BigStorageCageTaskService bigStorageCageTaskService; |
| | | |
| | | @Resource |
| | | private BigStorageBaseService baseService; |
| | | @Resource |
| | | private BigStorageCageInTaskService bigStorageBaseInTaskService; |
| | | @Autowired(required = false) |
| | | MiloService miloService; |
| | | |
| | | @Value("${mes.slotWidth}") |
| | | private Integer slotWidth; |
| | | |
| | | @Value("${mes.glassGap}") |
| | | private Integer glassGap; |
| | | |
| | | // @Resource |
| | | // private BigStorageCage bigStorageBaseInTaskService; |
| | | |
| | | // @Autowired(required = false) |
| | | // MiloService miloService; |
| | | // |
| | | // @Resource(name = "bigStorageStartCallback") |
| | | // SubscriptionCallback bigStorageStartCallback; |
| | | |
| | | |
| | | // @Scheduled(fixedDelay = Long.MAX_VALUE) |
| | | // public void startOpcTask() throws Exception { |
| | | // //设备一二的进片请求 |
| | | // miloService.subscriptionFromOpcUa(Arrays.asList("my.device01.x1", "my.device02.x1"), bigStorageStartCallback); |
| | | // } |
| | | |
| | | // @Scheduled(fixedDelay = Long.MAX_VALUE) |
| | | // public void outOpcTask() throws Exception { |
| | | // //设备1的出片请求 |
| | | // miloService.subscriptionFromOpcUa(Arrays.asList("my.device03.x1"), bigStorageStartCallback); |
| | | // } |
| | | |
| | | |
| | | @Scheduled(fixedDelay = 200) |
| | | public void inBigStorageTask() { |
| | | //todo:获取进片任务表 |
| | | List<BigStorageCageInTask> inTaskList = bigStorageBaseInTaskService.queryTaskMessage("big_storage_cage_in_one_task"); |
| | | if (CollectionUtils.isEmpty(inTaskList)) { |
| | | log.info("当前大车无进片任务,结束本地定时任务"); |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void inBigStorageTask() throws Exception { |
| | | ReadWriteEntity inkageEntity = miloService.readFromOpcUa("PLC.DPL1.inkageState"); |
| | | if (!"1".equals(inkageEntity.getValue())) { |
| | | log.info("当前为非联机状态,结束进片任务"); |
| | | return; |
| | | } |
| | | List<String> glassIdList = inTaskList.stream().map(BigStorageCageInTask::getGlassId).collect(Collectors.toList()); |
| | | Map<String, List<BigStorageCageInTask>> taskMap = inTaskList.stream().collect(Collectors.groupingBy(BigStorageCageInTask::getGlassId)); |
| | | ReadWriteEntity requestEntity = miloService.readFromOpcUa("PLC.DPL1.plcInGlassRequest"); |
| | | if (!"1".equals(requestEntity.getValue())) { |
| | | log.info("当前未收到进片请求,结束进片任务"); |
| | | return; |
| | | } |
| | | //获取进片任务表 |
| | | List<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); |
| | | if (CollectionUtils.isEmpty(inTaskList)) { |
| | | log.info("当前大车无进片玻璃,结束进片任务"); |
| | | } |
| | | List<String> glassIdList = inTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); |
| | | log.info("获取任务的玻璃id:{}", glassIdList); |
| | | Map<String, List<BigStorageCageTask>> taskMap = inTaskList.stream().collect(Collectors.groupingBy(BigStorageCageTask::getGlassId)); |
| | | List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIdList)); |
| | | //todo:计算目标格子 |
| | | //计算目标格子 |
| | | List<BigStorageCageHistoryTask> historyTasks = new ArrayList<>(); |
| | | for (GlassInfo info : glassInfoList) { |
| | | //获取目标格子信息 |
| | | BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info); |
| | |
| | | bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>() |
| | | .set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap) |
| | | .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot())); |
| | | BigStorageCageInTask task = taskMap.get(info.getGlassId()).get(0); |
| | | BigStorageCageTask task = taskMap.get(info.getGlassId()).get(0); |
| | | task.setTargetSlot(bigStorageDTO.getSlot()); |
| | | task.setGlassId(info.getGlassId()); |
| | | task.setTaskRunning(Const.BIG_STORAGE_TASK_RUNNING); |
| | | bigStorageBaseInTaskService.updateTaskMessage("", task); |
| | | //todo:存放历史任务 |
| | | } |
| | | bigStorageCageTaskService.updateTaskMessage("big_storage_cage_in_one_task", task); |
| | | //存放历史任务 |
| | | BigStorageCageHistoryTask historyTask = new BigStorageCageHistoryTask(); |
| | | BeanUtils.copyProperties(task, historyTask); |
| | | historyTask.setTaskType(Const.BIG_STORAGE_BEFORE_IN); |
| | | historyTask.setGlassCount(glassInfoList.size()); |
| | | historyTask.setTaskState(Const.ENGINEERING_NEW); |
| | | |
| | | BigStorageCageDetails cageDetails = new BigStorageCageDetails(); |
| | | BeanUtils.copyProperties(info, cageDetails); |
| | | cageDetails.setSlot(bigStorageDTO.getSlot()); |
| | | cageDetails.setState(Const.GLASS_STATE_NEW); |
| | | cageDetails.setDeviceId(bigStorageDTO.getDeviceId()); |
| | | cageDetails.setGap(glassGap); |
| | | bigStorageCageDetailsService.save(cageDetails); |
| | | } |
| | | //历史数据入库 |
| | | bigStorageCageHistoryTaskService.saveBatch(historyTasks); |
| | | //向opc发送启动信号 |
| | | miloService.writeToOpcWord(generateReadWriteEntity("PLC.DPL1.taskRunning", 1)); |
| | | } |
| | | |
| | | |
| | | @Scheduled(fixedDelay = 300) |
| | | public void updateInGlassStateTask() { |
| | | Date startDate = new Date(); |
| | | log.info("1、大理片笼进片完成后更新大理片笼数据任务开始执行时间:{}", startDate); |
| | | //因为大理片笼和出片任务是两个库的数据,所以要分开查找 |
| | | List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW)); |
| | | if (CollectionUtils.isNotEmpty(list)) { |
| | | log.info("2、获取所有正在进片的玻璃信息id:{}", list); |
| | | List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList()); |
| | | List<BigStorageCageFeedTask> inSuccessGlass = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>() |
| | | .in(BigStorageCageFeedTask::getGlassId, glassIds) |
| | | .in(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)); |
| | | if (CollectionUtils.isNotEmpty(inSuccessGlass)) { |
| | | log.info("3、获取进片已完成的玻璃信息id:{}", inSuccessGlass); |
| | | List<Integer> inSuccessGlassSlot = inSuccessGlass.stream().map(BigStorageCageFeedTask::getTargetSlot).collect(Collectors.toList()); |
| | | List<UpdateBigStorageCageDTO> storageCageDTOList = inSuccessGlass.stream().map(e -> { |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void finishBigStorageTask() throws Exception { |
| | | ReadWriteEntity inkageEntity = miloService.readFromOpcUa("PLC.DPL1.inkageState"); |
| | | if (!"1".equals(inkageEntity.getValue())) { |
| | | log.info("当前为非联机状态,结束完成进片任务"); |
| | | return; |
| | | } |
| | | //获取进片任务表 |
| | | List<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); |
| | | if (CollectionUtils.isEmpty(inTaskList)) { |
| | | log.info("当前大车无进片玻璃,结束完成进片任务"); |
| | | } |
| | | List<BigStorageCageTask> unFinishTaskList = inTaskList.stream().filter(e -> e.getTaskState() <= 1).collect(Collectors.toList()); |
| | | if (CollectionUtils.isNotEmpty(unFinishTaskList)) { |
| | | log.info("存在未完成的玻璃信息,玻璃:{}", unFinishTaskList); |
| | | return; |
| | | } |
| | | Map<Integer, List<BigStorageCageTask>> taskMap = inTaskList.stream().collect(Collectors.groupingBy(BigStorageCageTask::getTaskState)); |
| | | //按照任务状态修改大理片笼内的玻璃数据 |
| | | taskMap.forEach((e1, v) -> { |
| | | List<String> glassList = v.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); |
| | | if (e1 == 2) { |
| | | //进片完成 |
| | | log.info("3、获取进片已完成的玻璃信息id:{}", v); |
| | | List<Integer> inSuccessGlassSlot = v.stream().map(BigStorageCageTask::getTargetSlot).collect(Collectors.toList()); |
| | | List<UpdateBigStorageCageDTO> storageCageDTOList = v.stream().map(e -> { |
| | | UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); |
| | | BeanUtils.copyProperties(e, storageCageDTO); |
| | | return storageCageDTO; |
| | | }).collect(Collectors.toList()); |
| | | bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN); |
| | | log.info("4、大理片笼进片状态已完成已完成的玻璃信息id:{}", inSuccessGlass); |
| | | //更新理片笼玻璃尺寸 |
| | | baseService.updateSlotRemainBySlots(inSuccessGlassSlot); |
| | | log.info("5、大理片笼进片目标格子尺寸更新完成"); |
| | | log.info("4、大理片笼进片状态已完成已完成的玻璃信息id:{}", v); |
| | | updateSlotRemainBySlots(inSuccessGlassSlot); |
| | | } else if (e1 == 3) { |
| | | //破损处理 |
| | | } else { |
| | | //清空理片笼空数据 |
| | | } |
| | | |
| | | } |
| | | Date endDate = new Date(); |
| | | log.info("end:大理片笼进片完成后更新大理片笼数据任务结束时间:{},共耗时:{}ms,结束任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | | }); |
| | | //todo:按照任务状态修改大理片笼内的玻璃数据 |
| | | //todo:重新计算大理片笼内的剩余尺寸 |
| | | //todo:更新历史任务表中的任务状态 |
| | | //todo:清空任务表数据 |
| | | //todo:清空启动状态 |
| | | |
| | | } |
| | | |
| | | @Scheduled(fixedDelay = 300) |
| | | public void updateOutGlassStateTask() { |
| | | Date startDate = new Date(); |
| | | log.info("1、大理片笼出片完成后更新大理片笼数据任务开始执行时间:{}", startDate); |
| | | //因为大理片笼和出片任务是两个库的数据,所以要分开查找 |
| | | List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)); |
| | | if (CollectionUtils.isNotEmpty(list)) { |
| | | log.info("2、获取所有正在出片的玻璃信息id:{}", list); |
| | | List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList()); |
| | | List<BigStorageCageOutTask> outSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>() |
| | | .in(BigStorageCageOutTask::getGlassId, glassIds).in(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_ALL)); |
| | | if (CollectionUtils.isNotEmpty(outSuccessGlass)) { |
| | | for (BigStorageCageOutTask bigStorageCageOutTask : outSuccessGlass |
| | | ) { |
| | | if (bigStorageCageOutTask.getEndSlot().equals(Const.ARTIFICIAL_OUT_TARGET_POSITION)) { |
| | | temperingGlassInfoService.update( |
| | | new LambdaUpdateWrapper<TemperingGlassInfo>() |
| | | .set(TemperingGlassInfo::getState, Const.TEMPERING_END) |
| | | .eq(TemperingGlassInfo::getGlassId, bigStorageCageOutTask.getGlassId()) |
| | | ); |
| | | } |
| | | } |
| | | log.info("3、获取出片已完成的玻璃信息id:{}", outSuccessGlass); |
| | | List<UpdateBigStorageCageDTO> storageCageDTOList = outSuccessGlass.stream().map(e -> { |
| | | UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); |
| | | storageCageDTO.setGlassId(e.getGlassId()); |
| | | storageCageDTO.setTargetSlot(e.getStartSlot()); |
| | | return storageCageDTO; |
| | | }).collect(Collectors.toList()); |
| | | bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT); |
| | | List<Integer> outSuccessSlotList = outSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).collect(Collectors.toList()); |
| | | log.info("4、大理片笼出片状态已完成已完成的玻璃信息id:{}", outSuccessGlass); |
| | | //更新理片笼玻璃尺寸 |
| | | baseService.updateSlotRemainBySlots(outSuccessSlotList); |
| | | log.info("5、大理片笼进片目标格子尺寸更新完成"); |
| | | } |
| | | } |
| | | Date endDate = new Date(); |
| | | log.info("end:大理片笼出片完成后更新大理片笼数据任务结束时间:{},共耗时:{}ms,结束任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | | // |
| | | // @Scheduled(fixedDelay = 300) |
| | | // public void updateOutGlassStateTask() { |
| | | // Date startDate = new Date(); |
| | | // log.info("1、大理片笼出片完成后更新大理片笼数据任务开始执行时间:{}", startDate); |
| | | // //因为大理片笼和出片任务是两个库的数据,所以要分开查找 |
| | | // List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)); |
| | | // if (CollectionUtils.isNotEmpty(list)) { |
| | | // log.info("2、获取所有正在出片的玻璃信息id:{}", list); |
| | | // List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList()); |
| | | // List<BigStorageCageOutTask> outSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>() |
| | | // .in(BigStorageCageOutTask::getGlassId, glassIds).in(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_ALL)); |
| | | // if (CollectionUtils.isNotEmpty(outSuccessGlass)) { |
| | | // for (BigStorageCageOutTask bigStorageCageOutTask : outSuccessGlass |
| | | // ) { |
| | | // if (bigStorageCageOutTask.getEndSlot().equals(Const.ARTIFICIAL_OUT_TARGET_POSITION)) { |
| | | // temperingGlassInfoService.update( |
| | | // new LambdaUpdateWrapper<TemperingGlassInfo>() |
| | | // .set(TemperingGlassInfo::getState, Const.TEMPERING_END) |
| | | // .eq(TemperingGlassInfo::getGlassId, bigStorageCageOutTask.getGlassId()) |
| | | // ); |
| | | // } |
| | | // } |
| | | // log.info("3、获取出片已完成的玻璃信息id:{}", outSuccessGlass); |
| | | // List<UpdateBigStorageCageDTO> storageCageDTOList = outSuccessGlass.stream().map(e -> { |
| | | // UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); |
| | | // storageCageDTO.setGlassId(e.getGlassId()); |
| | | // storageCageDTO.setTargetSlot(e.getStartSlot()); |
| | | // return storageCageDTO; |
| | | // }).collect(Collectors.toList()); |
| | | // bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT); |
| | | // List<Integer> outSuccessSlotList = outSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).collect(Collectors.toList()); |
| | | // log.info("4、大理片笼出片状态已完成已完成的玻璃信息id:{}", outSuccessGlass); |
| | | // //更新理片笼玻璃尺寸 |
| | | // baseService.updateSlotRemainBySlots(outSuccessSlotList); |
| | | // log.info("5、大理片笼进片目标格子尺寸更新完成"); |
| | | // } |
| | | // } |
| | | // Date endDate = new Date(); |
| | | // log.info("end:大理片笼出片完成后更新大理片笼数据任务结束时间:{},共耗时:{}ms,结束任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | // return; |
| | | // |
| | | // } |
| | | // |
| | | // @Scheduled(fixedDelay = 300) |
| | | // public void updateScheduleGlassStateTask() { |
| | | // Date startDate = new Date(); |
| | | // log.info("1、大理片笼调度完成后更新大理片笼数据任务开始执行时间:{}", startDate); |
| | | // //因为大理片笼和调度任务是两个库的数据,所以要分开查找 |
| | | // List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING)); |
| | | // if (CollectionUtils.isNotEmpty(list)) { |
| | | // log.info("2、获取所有正在出片的玻璃信息id:{}", list); |
| | | // List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList()); |
| | | // List<BigStorageCageOutTask> scheduleSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>() |
| | | // .in(BigStorageCageOutTask::getGlassId, glassIds).eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS) |
| | | // .notIn(BigStorageCageOutTask::getEndSlot, Const.TEMPERING_OUT_TARGET_POSITION, Const.ARTIFICIAL_OUT_TARGET_POSITION)); |
| | | // if (CollectionUtils.isNotEmpty(scheduleSuccessGlass)) { |
| | | // log.info("3、获取调度已完成的玻璃信息id:{}", scheduleSuccessGlass); |
| | | // List<UpdateBigStorageCageDTO> storageCageDTOList = scheduleSuccessGlass.stream().map(e -> { |
| | | // UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); |
| | | // storageCageDTO.setGlassId(e.getGlassId()); |
| | | // storageCageDTO.setTargetSlot(e.getEndSlot()); |
| | | // return storageCageDTO; |
| | | // }).collect(Collectors.toList()); |
| | | // bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN); |
| | | // List<String> scheduleSuccessGlassIds = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList()); |
| | | // log.info("4、大理片笼出片状态已完成已完成的玻璃信息id:{}", scheduleSuccessGlassIds); |
| | | // //更新理片笼玻璃尺寸 |
| | | // List<Integer> slotList = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).distinct().collect(Collectors.toList()); |
| | | // slotList.addAll(scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getEndSlot).distinct().collect(Collectors.toList())); |
| | | // baseService.updateSlotRemainBySlots(slotList); |
| | | // log.info("5、大理片笼进片目标格子尺寸更新完成"); |
| | | // } |
| | | // } |
| | | // Date endDate = new Date(); |
| | | // log.info("end:大理片笼出片完成后更新大理片笼数据任务结束时间:{},共耗时:{}ms,结束任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | // return; |
| | | // |
| | | // } |
| | | // |
| | | // /** |
| | | // * 处理破损表任务 |
| | | // */ |
| | | // @Scheduled(fixedDelay = 300) |
| | | // public void dealDamageTask() { |
| | | // Date startDate = new Date(); |
| | | // log.info("大理片笼破损玻璃清除任务开始执行时间:{}", startDate); |
| | | // //获取进片任务表中状态为破损的数据 |
| | | // List<BigStorageCageFeedTask> inDamageTaskInfoList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>() |
| | | // .in(BigStorageCageFeedTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); |
| | | // if (CollectionUtils.isNotEmpty(inDamageTaskInfoList)) { |
| | | // log.info("获取进片任务表中破损的玻璃信息{}", inDamageTaskInfoList); |
| | | // bigStorageCageFeedTaskService.remove(new LambdaQueryWrapper<BigStorageCageFeedTask>().in(BigStorageCageFeedTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); |
| | | // //理片笼详情表数据状态更新 |
| | | // bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW).in(BigStorageCageDetails::getGlassId, inDamageTaskInfoList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList()))); |
| | | // //将破损信息新增入破损表 |
| | | // List<Integer> slotList = new ArrayList<>(); |
| | | // for (BigStorageCageFeedTask bigStorageCageFeedTask : inDamageTaskInfoList) { |
| | | // Damage damage = new Damage(); |
| | | // damage.setGlassId(bigStorageCageFeedTask.getGlassId()); |
| | | // damage.setLine(bigStorageCageFeedTask.getLine()); |
| | | // damage.setWorkingProcedure("磨边"); |
| | | // damage.setRemark("进笼前卧转立"); |
| | | // damage.setStatus(1); |
| | | // damage.setType(bigStorageCageFeedTask.getTaskState()); |
| | | // damageService.insertDamage(damage); |
| | | // slotList.add(bigStorageCageFeedTask.getTargetSlot()); |
| | | // } |
| | | // //更新格子剩余宽度 |
| | | // baseService.updateSlotRemainBySlots(slotList); |
| | | // log.info("进片任务执行完成"); |
| | | // } |
| | | // //获取出片任务表中状态为破损的数据 |
| | | // List<BigStorageCageOutTask> outDamageTaskInfoList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>() |
| | | // .in(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); |
| | | // if (CollectionUtils.isNotEmpty(outDamageTaskInfoList)) { |
| | | // log.info("获取出片任务表中破损的玻璃信息{}", outDamageTaskInfoList); |
| | | // bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().in(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); |
| | | // List<String> glassIdList = outDamageTaskInfoList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList()); |
| | | // //移除钢化下片表数据 |
| | | // temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getGlassId, glassIdList)); |
| | | // //理片笼详情表数据状态删除 |
| | | // bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, glassIdList)); |
| | | // //将破损信息新增入破损表 |
| | | // List<Integer> slotList = new ArrayList<>(); |
| | | // for (BigStorageCageOutTask bigStorageCageOutTask : outDamageTaskInfoList) { |
| | | // Damage damage = new Damage(); |
| | | // damage.setGlassId(bigStorageCageOutTask.getGlassId()); |
| | | // damage.setLine(bigStorageCageOutTask.getEndSlot()); |
| | | // damage.setWorkingProcedure("钢化"); |
| | | // damage.setRemark("出片后卧转立"); |
| | | // damage.setStatus(1); |
| | | // damage.setType(bigStorageCageOutTask.getTaskState()); |
| | | // damageService.insertDamage(damage); |
| | | // slotList.add(bigStorageCageOutTask.getStartSlot()); |
| | | // } |
| | | // //更新格子剩余宽度 |
| | | // baseService.updateSlotRemainBySlots(slotList); |
| | | // log.info("出片任务执行完成"); |
| | | // } |
| | | // Date endDate = new Date(); |
| | | // log.info("大理片笼破损玻璃清除任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | // return; |
| | | // } |
| | | |
| | | public void updateSlotRemainBySlots(List<Integer> slotList) { |
| | | //获取格子内所有的玻璃信息 |
| | | List<BigStorageCageDetails> inSlotGlassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .in(BigStorageCageDetails::getSlot, slotList).in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); |
| | | Map<Integer, Double> slotRemainMap = new HashMap<>(); |
| | | //是否存在有格子非空的玻璃 |
| | | if (CollectionUtils.isNotEmpty(inSlotGlassList)) { |
| | | //存在 将格子内的玻璃分别进行更新 |
| | | slotRemainMap = inSlotGlassList.stream() |
| | | .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> Math.max(item.getWidth(), item.getHeight()) + glassGap))); |
| | | slotRemainMap.forEach((e, v) -> { |
| | | double remainWidth = slotWidth - v >= 0 ? slotWidth - v : 0; |
| | | bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, remainWidth) |
| | | .eq(BigStorageCage::getSlot, e)); |
| | | }); |
| | | } |
| | | //过滤不存在玻璃的格子 将宽度重置为原始宽度5000 |
| | | Set<Integer> remainSlotList = slotRemainMap.keySet(); |
| | | slotList.removeAll(remainSlotList); |
| | | if (CollectionUtils.isNotEmpty(slotList)) { |
| | | bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth) |
| | | .in(BigStorageCage::getSlot, slotList)); |
| | | } |
| | | } |
| | | |
| | | @Scheduled(fixedDelay = 300) |
| | | public void updateScheduleGlassStateTask() { |
| | | Date startDate = new Date(); |
| | | log.info("1、大理片笼调度完成后更新大理片笼数据任务开始执行时间:{}", startDate); |
| | | //因为大理片笼和调度任务是两个库的数据,所以要分开查找 |
| | | List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING)); |
| | | if (CollectionUtils.isNotEmpty(list)) { |
| | | log.info("2、获取所有正在出片的玻璃信息id:{}", list); |
| | | List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList()); |
| | | List<BigStorageCageOutTask> scheduleSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>() |
| | | .in(BigStorageCageOutTask::getGlassId, glassIds).eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS) |
| | | .notIn(BigStorageCageOutTask::getEndSlot, Const.TEMPERING_OUT_TARGET_POSITION, Const.ARTIFICIAL_OUT_TARGET_POSITION)); |
| | | if (CollectionUtils.isNotEmpty(scheduleSuccessGlass)) { |
| | | log.info("3、获取调度已完成的玻璃信息id:{}", scheduleSuccessGlass); |
| | | List<UpdateBigStorageCageDTO> storageCageDTOList = scheduleSuccessGlass.stream().map(e -> { |
| | | UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); |
| | | storageCageDTO.setGlassId(e.getGlassId()); |
| | | storageCageDTO.setTargetSlot(e.getEndSlot()); |
| | | return storageCageDTO; |
| | | }).collect(Collectors.toList()); |
| | | bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN); |
| | | List<String> scheduleSuccessGlassIds = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList()); |
| | | log.info("4、大理片笼出片状态已完成已完成的玻璃信息id:{}", scheduleSuccessGlassIds); |
| | | //更新理片笼玻璃尺寸 |
| | | List<Integer> slotList = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).distinct().collect(Collectors.toList()); |
| | | slotList.addAll(scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getEndSlot).distinct().collect(Collectors.toList())); |
| | | baseService.updateSlotRemainBySlots(slotList); |
| | | log.info("5、大理片笼进片目标格子尺寸更新完成"); |
| | | } |
| | | } |
| | | Date endDate = new Date(); |
| | | log.info("end:大理片笼出片完成后更新大理片笼数据任务结束时间:{},共耗时:{}ms,结束任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | | |
| | | private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) { |
| | | return ReadWriteEntity.builder() |
| | | .identifier(identifier) |
| | | //Kep中是Long类型,即:Int32,Java中的int类型 |
| | | .value(value) |
| | | .build(); |
| | | } |
| | | |
| | | /** |
| | | * 处理破损表任务 |
| | | */ |
| | | @Scheduled(fixedDelay = 300) |
| | | public void dealDamageTask() { |
| | | Date startDate = new Date(); |
| | | log.info("大理片笼破损玻璃清除任务开始执行时间:{}", startDate); |
| | | //获取进片任务表中状态为破损的数据 |
| | | List<BigStorageCageFeedTask> inDamageTaskInfoList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>() |
| | | .in(BigStorageCageFeedTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); |
| | | if (CollectionUtils.isNotEmpty(inDamageTaskInfoList)) { |
| | | log.info("获取进片任务表中破损的玻璃信息{}", inDamageTaskInfoList); |
| | | bigStorageCageFeedTaskService.remove(new LambdaQueryWrapper<BigStorageCageFeedTask>().in(BigStorageCageFeedTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); |
| | | //理片笼详情表数据状态更新 |
| | | bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW).in(BigStorageCageDetails::getGlassId, inDamageTaskInfoList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList()))); |
| | | //将破损信息新增入破损表 |
| | | List<Integer> slotList = new ArrayList<>(); |
| | | for (BigStorageCageFeedTask bigStorageCageFeedTask : inDamageTaskInfoList) { |
| | | Damage damage = new Damage(); |
| | | damage.setGlassId(bigStorageCageFeedTask.getGlassId()); |
| | | damage.setLine(bigStorageCageFeedTask.getLine()); |
| | | damage.setWorkingProcedure("磨边"); |
| | | damage.setRemark("进笼前卧转立"); |
| | | damage.setStatus(1); |
| | | damage.setType(bigStorageCageFeedTask.getTaskState()); |
| | | damageService.insertDamage(damage); |
| | | slotList.add(bigStorageCageFeedTask.getTargetSlot()); |
| | | } |
| | | //更新格子剩余宽度 |
| | | baseService.updateSlotRemainBySlots(slotList); |
| | | log.info("进片任务执行完成"); |
| | | } |
| | | //获取出片任务表中状态为破损的数据 |
| | | List<BigStorageCageOutTask> outDamageTaskInfoList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>() |
| | | .in(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); |
| | | if (CollectionUtils.isNotEmpty(outDamageTaskInfoList)) { |
| | | log.info("获取出片任务表中破损的玻璃信息{}", outDamageTaskInfoList); |
| | | bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().in(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); |
| | | List<String> glassIdList = outDamageTaskInfoList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList()); |
| | | //移除钢化下片表数据 |
| | | temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getGlassId, glassIdList)); |
| | | //理片笼详情表数据状态删除 |
| | | bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, glassIdList)); |
| | | //将破损信息新增入破损表 |
| | | List<Integer> slotList = new ArrayList<>(); |
| | | for (BigStorageCageOutTask bigStorageCageOutTask : outDamageTaskInfoList) { |
| | | Damage damage = new Damage(); |
| | | damage.setGlassId(bigStorageCageOutTask.getGlassId()); |
| | | damage.setLine(bigStorageCageOutTask.getEndSlot()); |
| | | damage.setWorkingProcedure("钢化"); |
| | | damage.setRemark("出片后卧转立"); |
| | | damage.setStatus(1); |
| | | damage.setType(bigStorageCageOutTask.getTaskState()); |
| | | damageService.insertDamage(damage); |
| | | slotList.add(bigStorageCageOutTask.getStartSlot()); |
| | | } |
| | | //更新格子剩余宽度 |
| | | baseService.updateSlotRemainBySlots(slotList); |
| | | log.info("出片任务执行完成"); |
| | | } |
| | | Date endDate = new Date(); |
| | | log.info("大理片笼破损玻璃清除任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import com.mes.bigstorage.entity.BigStorageCage; |
| | | import com.mes.bigstorage.entity.BigStorageCageDetails; |
| | | import com.mes.bigstorage.entity.BigStorageDTO; |
| | |
| | | |
| | | @Override |
| | | public BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) { |
| | | BigStorageDTO bigStorageDTO = null; |
| | | MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class) |
| | | .selectAll(BigStorageCage.class) |
| | | .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot) |
| | | .eq(BigStorageCage::getEnableState, Const.SLOT_ON) |
| | | .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO) |
| | | .eq(BigStorageCageDetails::getEngineerId, glassInfo.getEngineerId()) |
| | | .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId()) |
| | | .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())) |
| | | .last("limit 1"); |
| | | if (glassInfo.getTemperingLayoutId() == 0) { |
| | | wrapper.eq(BigStorageCageDetails::getFlowCardId, glassInfo.getFlowCardId()) |
| | | .eq(BigStorageCageDetails::getLayer, glassInfo.getLayer()); |
| | | // wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight()); |
| | | } else { |
| | | wrapper.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1); |
| | | } |
| | | BigStorageCage bigStorageCage = bigStorageCageService.selectJoinOne(BigStorageCage.class, wrapper); |
| | | if (null != bigStorageCage) { |
| | | log.info("无钢化版图id或根据当前玻璃片序+1找到目标格子:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId()); |
| | | bigStorageDTO = new BigStorageDTO(); |
| | | bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); |
| | | bigStorageDTO.setSlot(bigStorageCage.getSlot()); |
| | | bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId()); |
| | | return bigStorageDTO; |
| | | } |
| | | bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getEnableState, Const.SLOT_ON) |
| | | .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | | // .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0") |
| | | .inSql(BigStorageCage::getDeviceId, |
| | | "select distinct device_id from big_storage_cage_details where engineer_id = '" + glassInfo.getEngineerId() + "' and tempering_layout_id = " + glassInfo.getTemperingLayoutId()) |
| | | .last("limit 1")); |
| | | if (null != bigStorageCage) { |
| | | log.info("根据版图id找到笼子内的目标格子:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId()); |
| | | bigStorageDTO = new BigStorageDTO(); |
| | | bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); |
| | | bigStorageDTO.setSlot(bigStorageCage.getSlot()); |
| | | bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId()); |
| | | return bigStorageDTO; |
| | | } |
| | | |
| | | //获取玻璃的厚度:重新选笼子需要按照笼子可放玻璃厚度进行选择 因为子查询排序对主sql无影响,所以先执行子查询获取顺序,然后一次去查询 |
| | | List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness()); |
| | | List<Integer> deviceUseds = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness()); |
| | | List<BigStorageCageDetails> engineerCount1 = baseMapper.selectList( |
| | | new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE) |
| | | .select(BigStorageCageDetails::getEngineerId) |
| | | .groupBy(BigStorageCageDetails::getEngineerId) |
| | | .between(BigStorageCageDetails::getDeviceId, 1, 5) |
| | | ); |
| | | List<BigStorageCageDetails> engineerCount2 = baseMapper.selectList( |
| | | new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE) |
| | | .select(BigStorageCageDetails::getEngineerId) |
| | | .groupBy(BigStorageCageDetails::getEngineerId) |
| | | .between(BigStorageCageDetails::getDeviceId, 6, 8) |
| | | ); |
| | | if (engineerCount1.size() > engineerCount2.size()) { |
| | | deviceUsedList.removeIf(device -> device < 6); |
| | | } else { |
| | | deviceUsedList.removeIf(device -> device > 5); |
| | | } |
| | | if (CollectionUtils.isEmpty(deviceUsedList)) { |
| | | deviceUsedList = deviceUseds; |
| | | } |
| | | for (Integer item : deviceUsedList) { |
| | | bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | | .eq(BigStorageCage::getEnableState, Const.SLOT_ON) |
| | | .eq(BigStorageCage::getDeviceId, item) |
| | | .last("limit 1")); |
| | | if (null != bigStorageCage) { |
| | | log.info("按照存笼玻璃格子数占用最少方式获取信息格子为:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId()); |
| | | bigStorageDTO = new BigStorageDTO(); |
| | | bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); |
| | | bigStorageDTO.setSlot(bigStorageCage.getSlot()); |
| | | bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId()); |
| | | return bigStorageDTO; |
| | | } |
| | | } |
| | | // BigStorageDTO bigStorageDTO = null; |
| | | // MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class) |
| | | // .selectAll(BigStorageCage.class) |
| | | // .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot) |
| | | // .eq(BigStorageCage::getEnableState, Const.SLOT_ON) |
| | | // .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO) |
| | | // .eq(BigStorageCageDetails::getEngineerId, glassInfo.getEngineerId()) |
| | | // .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId()) |
| | | // .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())) |
| | | // .last("limit 1"); |
| | | // if (glassInfo.getTemperingLayoutId() == 0) { |
| | | // wrapper.eq(BigStorageCageDetails::getFlowCardId, glassInfo.getFlowCardId()) |
| | | // .eq(BigStorageCageDetails::getLayer, glassInfo.getLayer()); |
| | | //// wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight()); |
| | | // } else { |
| | | // wrapper.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1); |
| | | // } |
| | | // BigStorageCage bigStorageCage = bigStorageCageService.selectJoinOne(BigStorageCage.class, wrapper); |
| | | // if (null != bigStorageCage) { |
| | | // log.info("无钢化版图id或根据当前玻璃片序+1找到目标格子:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId()); |
| | | // bigStorageDTO = new BigStorageDTO(); |
| | | // bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); |
| | | // bigStorageDTO.setSlot(bigStorageCage.getSlot()); |
| | | // bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId()); |
| | | // return bigStorageDTO; |
| | | // } |
| | | // bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | // .eq(BigStorageCage::getEnableState, Const.SLOT_ON) |
| | | // .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | | //// .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0") |
| | | // .inSql(BigStorageCage::getDeviceId, |
| | | // "select distinct device_id from big_storage_cage_details where engineer_id = '" + glassInfo.getEngineerId() + "' and tempering_layout_id = " + glassInfo.getTemperingLayoutId()) |
| | | // .last("limit 1")); |
| | | // if (null != bigStorageCage) { |
| | | // log.info("根据版图id找到笼子内的目标格子:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId()); |
| | | // bigStorageDTO = new BigStorageDTO(); |
| | | // bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); |
| | | // bigStorageDTO.setSlot(bigStorageCage.getSlot()); |
| | | // bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId()); |
| | | // return bigStorageDTO; |
| | | // } |
| | | // |
| | | // //获取玻璃的厚度:重新选笼子需要按照笼子可放玻璃厚度进行选择 因为子查询排序对主sql无影响,所以先执行子查询获取顺序,然后一次去查询 |
| | | // List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness()); |
| | | // List<Integer> deviceUseds = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness()); |
| | | // List<BigStorageCageDetails> engineerCount1 = baseMapper.selectList( |
| | | // new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE) |
| | | // .select(BigStorageCageDetails::getEngineerId) |
| | | // .groupBy(BigStorageCageDetails::getEngineerId) |
| | | // .between(BigStorageCageDetails::getDeviceId, 1, 5) |
| | | // ); |
| | | // List<BigStorageCageDetails> engineerCount2 = baseMapper.selectList( |
| | | // new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE) |
| | | // .select(BigStorageCageDetails::getEngineerId) |
| | | // .groupBy(BigStorageCageDetails::getEngineerId) |
| | | // .between(BigStorageCageDetails::getDeviceId, 6, 8) |
| | | // ); |
| | | // if (engineerCount1.size() > engineerCount2.size()) { |
| | | // deviceUsedList.removeIf(device -> device < 6); |
| | | // } else { |
| | | // deviceUsedList.removeIf(device -> device > 5); |
| | | // } |
| | | // if (CollectionUtils.isEmpty(deviceUsedList)) { |
| | | // deviceUsedList = deviceUseds; |
| | | // } |
| | | // for (Integer item : deviceUsedList) { |
| | | // bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | // .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | | // .eq(BigStorageCage::getEnableState, Const.SLOT_ON) |
| | | // .eq(BigStorageCage::getDeviceId, item) |
| | | // .last("limit 1")); |
| | | // if (null != bigStorageCage) { |
| | | // log.info("按照存笼玻璃格子数占用最少方式获取信息格子为:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId()); |
| | | // bigStorageDTO = new BigStorageDTO(); |
| | | // bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); |
| | | // bigStorageDTO.setSlot(bigStorageCage.getSlot()); |
| | | // bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId()); |
| | | // return bigStorageDTO; |
| | | // } |
| | | // } |
| | | |
| | | //获取玻璃的厚度:重新选笼子需要按照笼子可放玻璃厚度进行选择 |
| | | // List<Integer> deviceNotUsedList = bigStorageCageService.queryFreeDeviceByNotUsed(glassInfo.getThickness()); |
| | |
| | | // return bigStorageDTO; |
| | | // } |
| | | // } |
| | | Assert.isTrue(null != bigStorageCage, "没有空余的笼子存放玻璃"); |
| | | return bigStorageDTO; |
| | | // Assert.isTrue(null != bigStorageCage, "没有空余的笼子存放玻璃"); |
| | | // return bigStorageDTO; |
| | | return null; |
| | | } |
| | | |
| | | |
| | |
| | | <?xml version="1.0" encoding="UTF-8" ?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > |
| | | <mapper namespace="com.mes.bigstoragecageIntask.mapper.BigStorageCageInTaskMapper"> |
| | | <mapper namespace="com.mes.bigstoragecagetask.mapper.BigStorageCageTaskMapper"> |
| | | |
| | | <resultMap id="baseMap" type="com.mes.bigstoragecageIntask.entity.BigStorageCageInTask"> |
| | | <id column="task_running" property="taskRunning"/> |
| | | <resultMap id="baseMap" type="com.mes.bigstoragecagetask.entity.BigStorageCageTask"> |
| | | <result column="glass_id" property="glassId"/> |
| | | <result column="start_slot" property="startSlot"/> |
| | | <result column="target_slot" property="targetSlot"/> |
| | |
| | | or glass_id != '' |
| | | </select> |
| | | |
| | | |
| | | <update id="updateTaskMessage"> |
| | | UPDATE ${tableName} |
| | | SET task_running = #{task.taskRunning}, |
| | | glass_id = #{task.glassId}, |
| | | start_slot = #{task.startSlot}, |
| | | target_slot = #{task.targetSlot} |
| | | SET start_slot = #{task.startSlot} |
| | | where glass_id = #{task.glassId} |
| | | </update> |
| | | |
| | | |
| | |
| | | |
| | | -- changeset zsh:20241112001 |
| | | -- preconditions onFail:CONTINUE onError:CONTINUE |
| | | -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'big_storage_cage_in_history_task' and table_schema = 'hangzhoumes'; |
| | | CREATE TABLE big_storage_cage_in_history_task |
| | | -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'big_storage_cage_history_task' and table_schema = 'hangzhoumes'; |
| | | CREATE TABLE big_storage_cage_history_task |
| | | ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT '历史任务id', |
| | | task_running INT DEFAULT '0' COMMENT '任务请求 0无任务 1启动任务 2 确认完成', |
| | | glass_id VARCHAR(32) COMMENT '玻璃id', |
| | | start_slot INT DEFAULT '0' COMMENT '起始格子', |
| | | target_slot INT DEFAULT '0' COMMENT '目标格子', |
| | | task_state INT DEFAULT NULL COMMENT '任务状态 ', |
| | | create_time TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| | | task_type TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| | | update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| | | PRIMARY KEY (id) USING BTREE |
| | | id int NOT NULL AUTO_INCREMENT, |
| | | glass_id varchar(32) DEFAULT NULL COMMENT '玻璃id', |
| | | start_slot int DEFAULT '0' COMMENT '起始格子', |
| | | target_slot int DEFAULT '0' COMMENT '目标格子', |
| | | task_state int DEFAULT NULL COMMENT '任务状态 ', |
| | | glass_count int DEFAULT NULL COMMENT '玻璃数量', |
| | | task_type int DEFAULT NULL COMMENT '任务类型', |
| | | create_time timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
| | | update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| | | PRIMARY KEY (id) |
| | | ); |
| | | -- rollback DROP TABLE big_storage_cage_in_history_task; |
| | | -- rollback DROP TABLE big_storage_cage_history_task; |
| | | |
| | | -- changeset zsh:20241112002 |
| | | -- preconditions onFail:CONTINUE onError:CONTINUE |
| | | -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'big_storage_cage_in_one_task' and table_schema = 'hangzhoumes'; |
| | | CREATE TABLE big_storage_cage_in_one_task |
| | | ( |
| | | task_running INT DEFAULT '0' COMMENT '任务请求 0无任务 1启动任务 2 确认完成', |
| | | glass_id VARCHAR(32) COMMENT '玻璃id', |
| | | start_slot INT DEFAULT '0' COMMENT '起始格子', |
| | | target_slot INT DEFAULT '0' COMMENT '目标格子', |
| | | task_state INT DEFAULT NULL COMMENT '任务状态 ' |
| | | ); |
| | | glass_id varchar(32) DEFAULT NULL COMMENT '玻璃id', |
| | | start_slot int DEFAULT '0' COMMENT '起始格子', |
| | | target_slot int DEFAULT '0' COMMENT '目标格子', |
| | | task_state int DEFAULT NULL COMMENT '任务状态 ' |
| | | ) |
| | | -- rollback DROP TABLE big_storage_cage_in_one_task; |
| | | |
| | | -- changeset zsh:20241112003 |
| | | -- preconditions onFail:CONTINUE onError:CONTINUE |
| | | -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM big_storage_cage_in_one_task; |
| | | INSERT INTO big_storage_cage_in_one_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | |
| | | |
| | | -- changeset zsh:20241112004 |
| | |
| | | -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'big_storage_cage_in_two_task' and table_schema = 'hangzhoumes'; |
| | | CREATE TABLE big_storage_cage_in_two_task |
| | | ( |
| | | task_running INT DEFAULT '0' COMMENT '任务请求 0无任务 1启动任务 2 确认完成', |
| | | glass_id VARCHAR(32) COMMENT '玻璃id', |
| | | start_slot INT DEFAULT '0' COMMENT '起始格子', |
| | | target_slot INT DEFAULT '0' COMMENT '目标格子', |
| | | task_state INT DEFAULT NULL COMMENT '任务状态 ' |
| | | glass_id VARCHAR(32) COMMENT '玻璃id', |
| | | start_slot INT DEFAULT '0' COMMENT '起始格子', |
| | | target_slot INT DEFAULT '0' COMMENT '目标格子', |
| | | task_state INT DEFAULT NULL COMMENT '任务状态 ' |
| | | ); |
| | | -- rollback DROP TABLE big_storage_cage_in_two_task; |
| | | |
| | | -- changeset zsh:20241112005 |
| | | -- preconditions onFail:CONTINUE onError:CONTINUE |
| | | -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM big_storage_cage_in_two_task; |
| | | INSERT INTO big_storage_cage_in_two_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(task_running, glass_id, start_slot, target_slot, task_state) |
| | | VALUES (0, NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_in_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | |
| | | -- changeset zsh:20241113001 |
| | | -- preconditions onFail:CONTINUE onError:CONTINUE |
| | | -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'big_storage_cage_out_one_task' and table_schema = 'hangzhoumes'; |
| | | CREATE TABLE big_storage_cage_out_one_task |
| | | ( |
| | | glass_id varchar(32) DEFAULT NULL COMMENT '玻璃id', |
| | | start_slot int DEFAULT '0' COMMENT '起始格子', |
| | | target_slot int DEFAULT '0' COMMENT '目标格子', |
| | | task_state int DEFAULT NULL COMMENT '任务状态 ' |
| | | ) |
| | | -- rollback DROP TABLE big_storage_cage_out_one_task; |
| | | |
| | | -- changeset zsh:20241113002 |
| | | -- preconditions onFail:CONTINUE onError:CONTINUE |
| | | -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM big_storage_cage_out_one_task; |
| | | INSERT INTO big_storage_cage_out_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_out_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_out_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_out_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_out_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_out_one_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | |
| | | |
| | | -- changeset zsh:20241113003 |
| | | -- preconditions onFail:CONTINUE onError:CONTINUE |
| | | -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'big_storage_cage_out_two_task' and table_schema = 'hangzhoumes'; |
| | | CREATE TABLE big_storage_cage_out_two_task |
| | | ( |
| | | glass_id VARCHAR(32) COMMENT '玻璃id', |
| | | start_slot INT DEFAULT '0' COMMENT '起始格子', |
| | | target_slot INT DEFAULT '0' COMMENT '目标格子', |
| | | task_state INT DEFAULT NULL COMMENT '任务状态 ' |
| | | ); |
| | | -- rollback DROP TABLE big_storage_cage_out_two_task; |
| | | -- changeset zsh:20241113004 |
| | | -- preconditions onFail:CONTINUE onError:CONTINUE |
| | | -- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM big_storage_cage_out_two_task; |
| | | INSERT INTO big_storage_cage_out_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_out_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_out_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_out_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_out_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | INSERT INTO big_storage_cage_out_two_task(glass_id, start_slot, target_slot, task_state) |
| | | VALUES (NULL, 0, 0, 0); |
| | | |