From 6acde3b011f5f1b843c6f097baf64fbd9b574b23 Mon Sep 17 00:00:00 2001 From: zhoushihao <zsh19950802@163.com> Date: 星期一, 24 六月 2024 21:38:00 +0800 Subject: [PATCH] 下片任务进片逻辑已完成,待测试优化 --- hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java | 12 + hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java | 17 +- hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java | 32 ++++ hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java | 226 ++++++++++++++++++++++++++++ hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java | 7 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java | 12 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java | 48 +++-- hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java | 5 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml | 69 ++++++++ hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java | 11 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java | 8 + hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java | 1 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java | 24 ++ hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java | 1 14 files changed, 423 insertions(+), 50 deletions(-) diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java index b18d95d..936d473 100644 --- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java +++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java @@ -42,7 +42,6 @@ * 鍗у紡鐞嗙墖绗艰鎯呰〃鐜荤拑鐘舵�� * 杩涚墖浠诲姟1 * 鍑虹墖浠诲姟2 - * 鍑虹墖浠诲姟2 */ public static final Integer GLASS_CACHE_TYPE_IN = 1; public static final Integer GLASS_CACHE_TYPE_OUT = 2; diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java index 81047b7..f52662f 100644 --- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java +++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java @@ -19,6 +19,7 @@ /** * 鏌ヨ绗煎唴绂绘寚瀹氭牸瀛愭渶杩戠┖鏍� + * flag :鏄惁涓虹洿閫� * * @return */ diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java index a63c890..656024e 100644 --- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java +++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java @@ -182,8 +182,8 @@ * @return */ public GlassInfo queryAndChangeGlass(String glassId) { - GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId) - .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")); + GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); +// .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")); Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�"); //鎸夌収鐜荤拑灏哄 LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>() @@ -277,8 +277,8 @@ List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper); if (CollectionUtil.isEmpty(list)) { MPJQueryWrapper<GlassInfo> queryWrapper = new MPJQueryWrapper<GlassInfo>() - .selectAll(GlassInfo.class).eq("t.glass_id", glassId) - .inSql("t.engineer_id", "select engineer_id from engineering where state = 1"); + .selectAll(GlassInfo.class).eq("t.glass_id", glassId); +// .inSql("t.engineer_id", "select engineer_id from engineering where state = 1"); if (endcell == Const.A10_OUT_TARGET_POSITION) { queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " + "case when width < height then width else height end as second_length from glass_info) t1 " + @@ -347,8 +347,8 @@ //todo: 鑾峰彇姝e湪鎵ц鐨勫伐绋嬩俊鎭� if (StringUtils.isNotBlank(glassId)) { GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() - .eq(GlassInfo::getGlassId, glassId) - .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")); + .eq(GlassInfo::getGlassId, glassId)); +// .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")); EdgStorageCageDetails resultDetails = new EdgStorageCageDetails(); BeanUtils.copyProperties(one, resultDetails); glassList.add(resultDetails); @@ -401,7 +401,7 @@ } GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() .eq(GlassInfo::getGlassId, glassId) - .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1") +// .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1") ); EdgStorageCageDetails resultDetails = new EdgStorageCageDetails(); BeanUtils.copyProperties(one, resultDetails); @@ -451,7 +451,8 @@ return null; } return edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()) - .inSql(EdgStorageCageDetails::getEngineerId, "select engineer_id from engineering where state = 1").last(" limit 1 ")); +// .inSql(EdgStorageCageDetails::getEngineerId, "select engineer_id from engineering where state = 1") + .last(" limit 1 ")); } /** diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java index 5543ab5..8f0cea5 100644 --- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java @@ -2,9 +2,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; -import org.springframework.data.annotation.Id; import org.springframework.stereotype.Component; - import java.io.Serializable; @@ -35,6 +33,11 @@ private String flowCardId; /** + * 灞傚彿 + */ + private Integer layer; + + /** * 椤哄簭 */ private Integer sequence; diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java index 13fbc8a..9c8a82c 100644 --- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java @@ -28,6 +28,12 @@ private Long id; /** + * 鐜荤拑id + */ + private String glassId; + + + /** * 璧峰 */ private String startCell; @@ -71,11 +77,6 @@ * 浠诲姟鐘舵�� 0 鏈紑濮� 1姝e湪杩涜 2瀹屾垚 */ private Integer taskStauts; - - /** - * 鐜荤拑id - */ - private String glassId; /** * 鍒涘缓鏃堕棿 diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java index 8ba6c01..01af6af 100644 --- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java @@ -1,14 +1,20 @@ package com.mes.downglassinfo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.github.yulichang.base.MPJBaseMapper; import com.mes.downglassinfo.entity.DownGlassInfo; -import com.mes.glassinfo.entity.GlassInfo; +import com.mes.downworkstation.entity.dto.DownGlassInfoDTO; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface DownGlassInfoMapper extends BaseMapper<DownGlassInfo>, MPJBaseMapper<DownGlassInfo> { +public interface DownGlassInfoMapper extends BaseMapper<DownGlassInfo> { + DownGlassInfoDTO queryDownGlassMaxLayer(@Param(value = "flowCardId") String flowCardId); + Integer queryMaxSequence(@Param(value = "flowCardId") String flowCardId, @Param(value = "layer") int layer); + + List<DownGlassInfoDTO> queryWorkStationNotIn(); } diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java index 2feead5..cea55e5 100644 --- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java @@ -2,6 +2,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.mes.downglassinfo.entity.DownGlassInfo; +import com.mes.downworkstation.entity.dto.DownGlassInfoDTO; + +import java.util.List; public interface DownGlassInfoService extends IService<DownGlassInfo> { @@ -18,4 +21,9 @@ void insertDownGlassInfo(DownGlassInfo downGlassInfo); + DownGlassInfoDTO queryDownGlassMaxLayer(String flowCardId); + + Integer queryMaxSequence(String flowCardId, int layer); + + List<DownGlassInfoDTO> queryWorkStationNotIn(); } diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java index e5bf336..89770f5 100644 --- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java @@ -6,12 +6,17 @@ import com.mes.downglassinfo.entity.DownGlassInfo; import com.mes.downglassinfo.mapper.DownGlassInfoMapper; import com.mes.downglassinfo.service.DownGlassInfoService; +import com.mes.downworkstation.entity.dto.DownGlassInfoDTO; import org.springframework.stereotype.Service; + +import java.util.List; @Service public class DownGlassInfoServiceImpl extends ServiceImpl<DownGlassInfoMapper, DownGlassInfo> implements DownGlassInfoService { - // 鏍规嵁娴佺▼鍗″彿鏌ヨ鏈�澶у簭鍙� + /** + * 鏍规嵁娴佺▼鍗″彿鏌ヨ鏈�澶у簭鍙� + */ @Override public Integer getMaxSequenceByFlowCardId(String flowCardId) { LambdaQueryWrapper<DownGlassInfo> lambdaQueryWrapper = Wrappers.lambdaQuery(); @@ -24,14 +29,23 @@ return downGlassInfo != null ? downGlassInfo.getSequence() : 0; } - @Override public void insertDownGlassInfo(DownGlassInfo downGlassInfo) { - - - baseMapper.insert(downGlassInfo); } + @Override + public DownGlassInfoDTO queryDownGlassMaxLayer(String flowCardId) { + return baseMapper.queryDownGlassMaxLayer(flowCardId); + } + @Override + public Integer queryMaxSequence(String flowCardId, int layer) { + return baseMapper.queryMaxSequence(flowCardId, layer); + } + + @Override + public List<DownGlassInfoDTO> queryWorkStationNotIn() { + return baseMapper.queryWorkStationNotIn(); + } } diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java index f5d4ad5..272fb03 100644 --- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java @@ -1,6 +1,5 @@ package com.mes.downstorage.service; -import com.baomidou.mybatisplus.extension.service.IService; import com.github.yulichang.base.MPJBaseService; import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downstorage.entity.DownStorageCage; @@ -21,17 +20,20 @@ public interface DownStorageCageService extends MPJBaseService<DownStorageCage> { DownGlassTask createDownGlassTask(GlassInfo glassInfo, String startCell, String endCell, String taskType); + DownGlassTask createDownGlassTask(DownStorageCageDetails glassInfo, String startCell, String endCell, String taskType); // List<Map<String, Object>> selectCacheLeisure(); - - - /** * @return 鎵惧埌绌烘牸瀛� */ - List<DownStorageCageDetails> selectCacheEmpty() ; + DownStorageCage selectCacheEmpty(int currentSlot, boolean flag); + + /** + * @return 鎵惧埌绌烘牸瀛� + */ + List<DownStorageCageDetails> selectCacheEmpty(); /** * @param downStorageCage diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java index 3643a74..4e6fe11 100644 --- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java @@ -1,17 +1,13 @@ package com.mes.downstorage.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; - -//import com.mes.device.PlcParameterObject; -import com.google.common.base.Functions; import com.mes.common.config.Const; import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downglassinfo.service.DownGlassTaskService; import com.mes.downstorage.entity.DownStorageCage; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.mapper.DownStorageCageDetailsMapper; import com.mes.downstorage.mapper.DownStorageCageMapper; @@ -19,9 +15,7 @@ import com.mes.downstorage.service.DownStorageCageService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; -import com.mes.pp.entity.OptimizeDetail; import lombok.extern.slf4j.Slf4j; -import net.sf.jsqlparser.statement.select.SelectItem; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -77,22 +71,40 @@ } - - //鎵惧埌绌烘牸瀛� @Override public List<DownStorageCageDetails> selectCacheEmpty() { - return baseMapper.selectJoinList(DownStorageCageDetails.class, + return this.selectJoinList(DownStorageCageDetails.class, JoinWrappers.lambda(DownStorageCage.class) .selectAll(DownStorageCage.class) - .select(DownStorageCageDetails::getWidth, DownStorageCageDetails::getHeight, DownStorageCageDetails::getGlassId) .leftJoin(DownStorageCageDetails.class, on -> on .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId) .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot) - .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN) - ) + .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN)) .isNull(DownStorageCageDetails::getSlot) ); + } + + //鎵惧埌绌烘牸瀛� + @Override + public DownStorageCage selectCacheEmpty(int currentSlot, boolean flag) { + List<DownStorageCage> emptyList = this.selectJoinList(DownStorageCage.class, + JoinWrappers.lambda(DownStorageCage.class) + .selectAll(DownStorageCage.class) + .leftJoin(DownStorageCageDetails.class, on -> on + .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId) + .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot) + .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN)) + .isNull(DownStorageCageDetails::getSlot) + .last("order by abs(t.slot - " + currentSlot + ") asc limit 2") + ); + if (flag && CollectionUtil.isNotEmpty(emptyList)) { + return emptyList.get(0); + } + if (CollectionUtil.isEmpty(emptyList) || emptyList.size() == 1) { + return null; + } + return emptyList.get(0); } @Override @@ -104,7 +116,7 @@ .leftJoin(DownStorageCageDetails.class, on -> on .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId) .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot) - .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN)) + .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN)) .isNull(DownStorageCageDetails::getSlot) .eq(DownStorageCage::getEnableState, 1) .groupBy(DownStorageCageDetails::getFlowCardId) // 鏍规嵁 flowCardId 鍒嗙粍 @@ -113,12 +125,6 @@ ); } - - - - - - @Override diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java index d242127..7afc44a 100644 --- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java @@ -53,6 +53,11 @@ */ private Integer workState; + /** + * 灞傛暟 + */ + private Integer layer; + /** * 鎬绘暟閲� diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java new file mode 100644 index 0000000..dc3fe51 --- /dev/null +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/dto/DownGlassInfoDTO.java @@ -0,0 +1,32 @@ +package com.mes.downworkstation.entity.dto; + +import com.mes.glassinfo.entity.GlassInfo; +import lombok.Data; + +import java.util.List; + +/** + * @Author : zhoush + * @Date: 2024/6/21 16:06 + * @Description: + */ +@Data +public class DownGlassInfoDTO { + /** + * 娴佺▼鍗″彿 + */ + private String flowCardId; + /** + * 灞傛暟 + */ + private Integer layer; + /** + * 钀芥灦鏁伴噺 + */ + private Integer count; + + /** + * 娴佺▼鍗℃湭杩涚墖鐨勭幓鐠冧俊鎭� + */ + private List<GlassInfo> glassInfoList; +} diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java new file mode 100644 index 0000000..01ed3ee --- /dev/null +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java @@ -0,0 +1,226 @@ +package com.mes.job; + +import cn.hutool.core.lang.Assert; +import cn.smallbun.screw.core.util.CollectionUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.mes.common.S7object; +import com.mes.common.config.Const; +import com.mes.device.PlcParameterObject; +import com.mes.downglassinfo.entity.DownGlassInfo; +import com.mes.downglassinfo.entity.DownGlassTask; +import com.mes.downglassinfo.service.DownGlassInfoService; +import com.mes.downglassinfo.service.DownGlassTaskService; +import com.mes.downstorage.entity.DownStorageCage; +import com.mes.downstorage.service.DownStorageCageDetailsService; +import com.mes.downstorage.service.DownStorageCageService; +import com.mes.downworkstation.entity.DownWorkstation; +import com.mes.downworkstation.entity.dto.DownGlassInfoDTO; +import com.mes.downworkstation.service.DownWorkstationService; +import com.mes.downworkstation.service.DownWorkstationTaskService; +import com.mes.glassinfo.entity.GlassInfo; +import com.mes.glassinfo.service.GlassInfoService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.List; + +/** + * @Author : zhoush + * @Date: 2024/5/8 8:17 + * @Description: + */ +@Component +@Slf4j +public class DownLoadCacheGlassTask { + + @Autowired + DownGlassTaskService downGlassTaskService; + @Autowired + GlassInfoService glassInfoService; + @Autowired + DownStorageCageDetailsService downStorageCageDetailsService; + @Autowired + DownStorageCageService downStorageCageService; + @Autowired + DownWorkstationService downWorkstationService; + @Autowired + DownGlassInfoService downGlassInfoService; + @Autowired + private DownWorkstationTaskService downWorkstationTaskService; + + + @Scheduled(fixedDelay = 1000) + public void plcHomeEdgTask() { + PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; + String taskRequestTypeValue = plcParameterObject.getPlcParameter("RequestWord").getValue(); + String glassIdeValue = plcParameterObject.getPlcParameter("G04ID").getValue(); + String confirmationWrodValue = plcParameterObject.getPlcParameter("MES_confirmation_word").getValue(); + //A08 A09琛ㄧず绾胯矾鐩稿悓 鍙仛绛変环 鏃犳暟鎹浆int寮傚父 + String out08Glassstate = plcParameterObject.getPlcParameter("A08_glass_status").getValue(); + String out10Glassstate = plcParameterObject.getPlcParameter("A10_glass_status").getValue(); + String confirmationWrodAddress = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress(); + String currentSlot = plcParameterObject.getPlcParameter("Current_slot").getValue(); + + log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{}锛岃幏鍙栧埌鐨勭‘璁ゅ瓧涓猴細{}锛岃幏鍙栧埌鐨勫嚭鐗囩姸鎬佸垎鍒负锛欰09:{}銆丄10:{},褰撳墠鏍煎瓙鍙蜂负锛歿}", + taskRequestTypeValue, glassIdeValue, confirmationWrodValue, out08Glassstate, out10Glassstate, currentSlot); + + if ("0".equals(taskRequestTypeValue)) { + if ("0".equals(confirmationWrodValue)) { + log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屼笖纭瀛椾负0锛屼笉鎵ц浠诲姟"); + return; + } + log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓�0锛屽皢纭瀛楁敼涓�0"); + S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, (short) 0); + return; + } + if (!"0".equals(confirmationWrodValue)) { + log.info("2銆佽幏鍙栧埌鐨勮姹傚瓧涓嶄负0锛屽皢纭瀛椾笉涓�0锛岀洿鎺ョ粨鏉�"); + return; + } + if ("1".equals(taskRequestTypeValue)) { + log.info("2銆佽繘鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�"); + inTo(glassIdeValue, confirmationWrodAddress, currentSlot); + } else if ("2".equals(taskRequestTypeValue)) { + //09绌洪棽 锛�1 10绌洪棽 锛�2 閮界┖闂诧細3 鍏朵粬0 + log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�"); +// outTo(Integer.parseInt(out08Glassstate), +// Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", 0); + } else if ("3".equals(taskRequestTypeValue)) { + log.info("2銆佽繘鐗囧拰鍑虹墖閮界┖闂诧紝鎵ц鍑虹墖浠诲姟"); + //鍔犵瀛愰噷闈㈡槸鍚︽湁鐜荤拑锛屾湁鍏堝嚭锛屾棤鐜荤拑鍏堣繘 +// boolean outFlase = outTo(Integer.parseInt(out08Glassstate), +// Integer.parseInt(out10Glassstate), confirmationWrodAddress, glassIdeValue, Integer.parseInt(currentSlot)); +// log.info("鍑虹墖浠诲姟鏄惁瀹屾垚锛歿},澶辫触涓旂幓鐠僫d:{}涓嶄负绌哄垯鎵ц杩涚墖浠诲姟", outFlase, glassIdeValue); +// if (!outFlase && StringUtils.isNotBlank(glassIdeValue)) { +// inTo(glassIdeValue, confirmationWrodAddress, currentSlot); +// } + } + } + + private void inTo(String glassId, String confirmationWrodAddress, String currentSlot) { + log.info("1銆佹寜鐓х幓鐠僫d:{}鑾峰彇鐜荤拑灏忕墖淇℃伅,褰撳墠鏍煎瓙涓�:{}", glassId, currentSlot); + //娣诲姞杩涚墖浠诲姟 鏌ユ壘绌烘牸 + DownStorageCage nearestEmpty = downStorageCageService.selectCacheEmpty(Integer.parseInt(currentSlot), Boolean.FALSE); + Assert.isTrue(null != nearestEmpty, "鏍煎瓙宸叉弧"); + log.info("2銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty); + GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); + Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�"); + //鑾峰彇璇ョ幓鐠冪殑娴佺▼鍗℃槸鍚﹀凡缁戝畾鏋跺瓙 + DownWorkstation one = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>() + .eq(DownWorkstation::getLayer, glassInfo.getLayer()) + .eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId())); + Boolean checkFlag = Boolean.TRUE; + GlassInfo tempGlassInfo = null; + if (null != one) { + log.info("璇ユ祦绋嬪崱宸茬粦瀹氭灦瀛�"); + checkFlag = multilayerCheck(glassInfo); + } else { + log.info("璇ョ幓鐠冪殑娴佺▼鍗℃湭缁戝畾鏋跺瓙锛岃幏鍙栨槸鍚︽湁绌烘灦瀛�"); + List<DownWorkstation> list = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>().isNull(DownWorkstation::getFlowCardId)); + if (CollectionUtils.isNotEmpty(list)) { + log.info("鏈夌┖鏋跺瓙,灏嗘祦绋嬪崱涓庢灦瀛愬ソ缁戝畾锛屾墽琛岃繘鐗囦换鍔� 缁撴潫"); + checkFlag = Boolean.TRUE; + } else { + log.info("鏃犵┖鏋跺瓙,鑾峰彇宸茬粦瀹氭灦瀛愮殑娴佺▼鍗′俊鎭�,鏌ョ湅鐜荤拑淇℃伅鏄惁鍙瀵硅皟"); + List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationNotIn(); + log.info("鑾峰彇鏋跺瓙涓婂凡缁戝畾娴佺▼鍗¤惤鏋剁殑鏁伴噺鍙婃湭钀芥灦鐨勭幓鐠冩暟鎹細{}", downGlassInfoDTOList); + Assert.isTrue(CollectionUtils.isNotEmpty(downGlassInfoDTOList), "宸茬粦瀹氭祦绋嬪崱鍧囨棤鏈惤鏋剁幓鐠冿紝璇峰強鏃跺鐞嗘灦瀛愪笂鐨勭幓鐠冿紝娓呴櫎娴佺▼鍗�"); + endLoop: + for (DownGlassInfoDTO e : downGlassInfoDTOList) { + List<GlassInfo> glassInfoList = e.getGlassInfoList(); + for (GlassInfo item : glassInfoList) { + if (item.getWidth().equals(glassInfo.getWidth()) && item.getHeight().equals(glassInfo.getHeight()) + && item.getThickness().equals(glassInfo.getThickness()) && item.getFilmsid().equals(glassInfo.getFilmsid())) { + //todo:鐜荤拑鏄惁涓哄灞� + checkFlag = multilayerCheck(item); + if (checkFlag) { + //鐜荤拑鏇挎崲 浠呮浛鎹㈡祦绋嬪崱id鍙婂眰鏁� + String tempFlowCardId = item.getFlowCardId(); + Integer tempLayer = item.getLayer(); + String flowCardId = glassInfo.getFlowCardId(); + Integer layer = glassInfo.getLayer(); + log.info("鏇挎崲娴佺▼鍗′俊鎭�,褰撳墠鐜荤拑淇℃伅:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗},鏇挎崲鍚庣幓鐠冧俊鎭�:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗}", + tempGlassInfo, glassInfo, flowCardId, layer, tempFlowCardId, tempLayer); + glassInfo.setFlowCardId(tempFlowCardId); + glassInfo.setLayer(tempLayer); + glassInfoService.updateById(glassInfo); + item.setFlowCardId(flowCardId); + item.setLayer(layer); + glassInfoService.updateById(item); + break endLoop; + } + } + } + } + + } + if (checkFlag) { + //鐢熸垚杩涚墖浠诲姟 鎵ц杩涚墖鎿嶄綔 + initDownGlassTask(glassInfo, nearestEmpty.getSlot() + "", null, Const.GLASS_CACHE_TYPE_IN); + } + } + + +// log.info("3銆佸皢鐜荤拑淇℃伅鎻掑叆鍗у紡鐞嗙墖绗�,褰撳墠鐜荤拑淇℃伅:{}", glassInfo); +// EdgStorageCageDetails details = new EdgStorageCageDetails(); +// BeanUtils.copyProperties(glassInfo, details); +// details.setState(Const.GLASS_STATE_IN); +// details.setSlot(nearestEmpty.getSlot()); +// details.setDeviceId(nearestEmpty.getDeviceId()); +// edgStorageCageDetailsService.save(details); +// log.info("4銆佺幓鐠冧俊鎭凡瀛樺叆鐞嗙墖绗艰鎯呰〃锛岀幓鐠冧俊鎭负{}", details); +// //娣诲姞杩涚墖浠诲姟 +// boolean taskCache = saveTaskCache(details.getGlassId(), 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN); +// log.info("5銆佺敓鎴愯繘鐗囦换鍔′俊鎭瓨鍏ヤ换鍔¤〃鏄惁瀹屾垚锛歿}", taskCache); +// +// S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, (short) 1); +// log.info("6銆佸彂閫佺‘璁ゅ瓧瀹屾垚"); + } + + private Boolean multilayerCheck(GlassInfo glassInfo) { + //鏌ヨ璇ユ祦绋嬪崱鏄惁涓哄灞� + if (glassInfo.getTotalLayer() > 1) { + log.info("鎸夌収娴佺▼鍗¤幏鍙栧綋鍓嶆祦绋嬪崱鍚勫眰宸茶惤鏋舵暟閲�"); + DownGlassInfoDTO downGlassInfoDTO = downGlassInfoService.queryDownGlassMaxLayer(glassInfo.getFlowCardId()); + if (null == downGlassInfoDTO) { + log.info("鏋跺瓙宸茬粡鍗犳弧锛屽灞傜幓鐠冩棤娉曟壘鍒板搴旂殑鏍煎瓙锛岄渶鎵ц鏇挎崲鐜荤拑鐨勬搷浣�"); + return Boolean.FALSE; + } + if (downGlassInfoDTO.getLayer().equals(glassInfo.getLayer())) { + log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶� 鐩存帴杩涚墖"); + return Boolean.TRUE; + } + Integer sequence = downGlassInfoService.queryMaxSequence(glassInfo.getFlowCardId(), glassInfo.getLayer()); + log.info("鑾峰彇褰撳墠鐜荤拑闇�瑕佹斁鐨勬搴忥細绗煎唴鍚屾祦绋� 鍚屽眰鏁扮殑閫氳揪娆″簭+1:{}", sequence); + DownGlassInfo downGlassInfo = downGlassInfoService.getOne(new LambdaQueryWrapper<DownGlassInfo>() + .eq(DownGlassInfo::getFlowCardId, downGlassInfoDTO.getFlowCardId()) + .eq(DownGlassInfo::getLayer, downGlassInfoDTO.getLayer()).eq(DownGlassInfo::getSequence, sequence)); + log.info("鎷垮綋鍓嶇増搴忚幏鍙栫幓鐠冧俊鎭瘂}锛屾寜鐓ф搴忓垽鏂綋鍓嶇幓鐠冩槸鍚﹀昂瀵稿搴旂殑涓婏紙涓庢暟閲忔渶澶氱殑娆″簭姣旇緝锛夈��", downGlassInfo); + if (null != downGlassInfoDTO && downGlassInfo.getWidth().equals(glassInfo.getWidth()) && downGlassInfo.getHeight().equals(glassInfo.getHeight())) { + log.info("鐩稿悓娆″簭鐜荤拑瀵瑰簲涓婏紝鍙墽琛岃繘鐗囦换鍔�"); + return Boolean.TRUE; + } else { + log.info("鍚屾搴忕幓鐠冨搴斾笉涓婏紝闇�鎵ц鏇挎崲鐜荤拑鐨勬搷浣�"); + return Boolean.FALSE; + } + } else { + log.info("闈炲灞傜幓鐠冿紝鐩存帴杩涚墖"); + return Boolean.TRUE; + } + } + + private Boolean initDownGlassTask(GlassInfo glassInfo, String startCell, String endCell, Integer taskType) { + DownGlassTask downGlassTask = new DownGlassTask(); + BeanUtils.copyProperties(glassInfo, downGlassTask); + downGlassTask.setStartCell(startCell); + downGlassTask.setEndCell(endCell); + downGlassTask.setTaskType(taskType + ""); + downGlassTask.setTaskStauts(0); + downGlassTask.setCreateTime(new Date()); + return downGlassTaskService.save(downGlassTask); + } +} diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml new file mode 100644 index 0000000..967696b --- /dev/null +++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml @@ -0,0 +1,69 @@ +<?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.downglassinfo.mapper.DownGlassInfoMapper"> + + <resultMap id="downGlassInfoDTO" type="com.mes.downworkstation.entity.dto.DownGlassInfoDTO"> + <result column="flow_card_id" property="flowCardId"/> + <result column="layer" property="layer"/> + <result column="count" property="count"/> + </resultMap> + <resultMap id="downGlassInfo" type="com.mes.downworkstation.entity.dto.DownGlassInfoDTO"> + <result column="flow_card_id" property="flowCardId"/> + <result column="layer" property="layer"/> + <result column="count" property="count"/> + <collection property="glassInfoList" ofType="com.mes.glassinfo.entity.GlassInfo"> + <id column="id" property="id"/> + <result column="flow_card_id" property="flowCardId"/> + <result column="glass_type" property="glassType"/> + <result column="width" property="width"/> + <result column="height" property="height"/> + <result column="thickness" property="thickness"/> + <result column="filmsid" property="filmsid"/> + <result column="total_layer" property="totalLayer"/> + <result column="layer" property="layer"/> + </collection> + </resultMap> + + <select id="queryDownGlassMaxLayer" resultMap="downGlassInfoDTO"> + SELECT flow_card_id, + layer, + COUNT(layer) AS count + FROM + down_glass_info + WHERE + flow_card_id = #{flowCardId} + GROUP BY + flow_card_id, + layer + order by count desc limit 1 + </select> + <select id="queryMaxSequence" resultType="java.lang.Integer"> + SELECT max(sequence) + 1 as sequence + FROM down_glass_info + WHERE flow_card_id = #{flowCardId} + AND layer = #{layer} + </select> + + <select id="queryWorkStationNotIn" resultMap="downGlassInfo"> + SELECT T.*, + T1.* + FROM ( + SELECT T.FLOW_CARD_ID, + T.LAYER, + COUNT(T.LAYER) AS COUNT + FROM + DOWN_GLASS_INFO T + INNER JOIN DOWN_WORKSTATION T1 + ON T.FLOW_CARD_ID = T1.FLOW_CARD_ID + AND T.LAYER = T1.LAYER + GROUP BY + T.FLOW_CARD_ID, + T.LAYER + ) T + INNER JOIN GLASS_INFO T1 ON T.FLOW_CARD_ID = T1.FLOW_CARD_ID + AND T.LAYER = T1.LAYER + LEFT JOIN DOWN_GLASS_INFO T2 ON T1.GLASS_ID = T2.GLASS_ID + WHERE T2.GLASS_ID IS NULL + order by t.count desc + </select> +</mapper> \ No newline at end of file -- Gitblit v1.8.0