From e555f50e1bb0cb6b8facca208c70df4dcce06b80 Mon Sep 17 00:00:00 2001 From: zhoushihao <zsh19950802@163.com> Date: 星期五, 21 六月 2024 14:45:57 +0800 Subject: [PATCH] 大理片笼进出片任务bug修复完毕,自测已完成,待联调 --- hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml | 11 + hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java | 4 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java | 58 +++------ hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java | 21 ++ hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java | 177 +++++++++++++++++------------ hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java | 32 +++++ hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml | 5 hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java | 22 --- hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java | 6 - hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java | 24 --- 10 files changed, 193 insertions(+), 167 deletions(-) diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java new file mode 100644 index 0000000..c427061 --- /dev/null +++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java @@ -0,0 +1,32 @@ +package com.mes.base.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author : zhoush + * @Date: 2024/6/21 9:40 + * @Description: + */ +@Data +public class BigStorageCageBaseInfo { + + /** + * 鐜荤拑id + */ + @ApiModelProperty(value = "鐜荤拑id") + private String glassId; + + /** + * 瀹� + */ + @ApiModelProperty(value = "瀹�") + private Double width; + + /** + * 鏍煎瓙鍙� + */ + @ApiModelProperty(value = "鐜荤拑id") + private Integer slot; + +} 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 87c8225..b18d95d 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 @@ -121,12 +121,6 @@ public static final Integer BIG_STORAGE_IN_RUN = 2; /** - * 澶х悊鐗囩瀹藉害 鍙� 鐜荤拑闂磋窛 - */ - public static final Integer BIG_STORAGE_WIDTH = 5000; - public static final Integer BIG_STORAGE_GAP = 20; - - /** * 閽㈠寲灏忕墖琛� * -1 鐢熸垚浠诲姟 * 0 鍑虹墖瀹屾垚 diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java index 02e9750..2ebf5a8 100644 --- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java +++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.mes.base.entity.BigStorageCageBaseInfo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -20,7 +21,7 @@ @ApiModel(description = "<p> 閽㈠寲灏忕墖淇℃伅琛� </p>") @Data @EqualsAndHashCode(callSuper = false) -public class TemperingGlassInfo implements Serializable { +public class TemperingGlassInfo extends BigStorageCageBaseInfo implements Serializable { private static final long serialVersionUID = 1L; @@ -30,12 +31,6 @@ @ApiModelProperty(value = "閽㈠寲灏忕墖淇℃伅琛╥d", position = 2) @TableId(value = "id", type = IdType.AUTO) private Long id; - - /** - * 鐜荤拑id - */ - @ApiModelProperty(value = "鐜荤拑id", position = 3) - private String glassId; /** * 娴佺▼鍗� @@ -48,12 +43,6 @@ */ @ApiModelProperty(value = "娴佺▼鍗$幓鐠冪被鍨�", position = 5) private Integer glassType; - - /** - * 瀹� - */ - @ApiModelProperty(value = "瀹�", position = 6) - private Double width; /** * 楂� @@ -71,7 +60,7 @@ * 鑶滅郴 */ @ApiModelProperty(value = "鑶滅郴", position = 9) - private Integer filmsid; + private String filmsid; /** * 閽㈠寲鏄惁鎺ュ彈妯斁 @@ -114,10 +103,5 @@ */ @ApiModelProperty(value = "鐘舵��", position = 16) private Integer state; - /** - * 鏍煎瓙鍙� - */ - private Integer slot; - } diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml index 73f527f..c85d6d5 100644 --- a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml +++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml @@ -2,11 +2,14 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mes.temperingglass.mapper.TemperingGlassInfoMapper"> <insert id="saveBatch"> - INSERT INTO tempering_glass_info ( glass_id, width, height, thickness, tempering_layout_id, - tempering_feed_sequence, "state" ) VALUES + INSERT INTO tempering_glass_info (glass_id, flow_card_id, glass_type, width, height, thickness, filmsid, + ishorizontal, tempering_layout_id, + tempering_feed_sequence, x_coordinate, y_coordinate, angle, state, slot ) VALUES <foreach collection="list" item="item" separator=","> - (#{item.glassId}, #{item.width}, #{item.height}, #{item.thickness}, #{item.temperingLayoutId}, - #{item.temperingFeedSequence}, #{item.state}) + (#{item.glassId}, #{item.flowCardId}, #{item.glassType}, #{item.width}, #{item.height}, #{item.thickness}, + #{item.filmsid},#{item.ishorizontal}, + #{item.temperingLayoutId}, #{item.temperingFeedSequence}, #{item.xCoordinate}, #{item.yCoordinate}, + #{item.angle}, #{item.state}, #{item.slot}) </foreach> </insert> diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java index 490bbbf..635f2df 100644 --- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java +++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.mes.base.entity.BigStorageCageBaseInfo; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import io.swagger.annotations.Api; @@ -23,15 +24,15 @@ @Api(description = "澶х悊鐗囩璇︽儏") @Data @EqualsAndHashCode(callSuper = false) -public class BigStorageCageDetails implements Serializable { +public class BigStorageCageDetails extends BigStorageCageBaseInfo implements Serializable { private static final long serialVersionUID = 1L; /** * 澶х悊鐗囩璇︽儏琛╥d */ - @ApiModelProperty(value = "澶х悊鐗囩璇︽儏琛╥d", position = 2) - @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty(value = "澶х悊鐗囩璇︽儏琛╥d", position = 2) + @TableId(value = "id", type = IdType.AUTO) private Long id; /** @@ -40,17 +41,6 @@ @ApiModelProperty(value = "璁惧id", position = 3) private Integer deviceId; - /** - * 鏍呮牸鍙� - */ - @ApiModelProperty(value = "鏍呮牸鍙�", position = 4) - private Integer slot; - - /** - * 鐜荤拑id - */ - @ApiModelProperty(value = "鐜荤拑id", position = 5) - private String glassId; /** * 灏忕墖鍦ㄦ牸鍐呯殑椤哄簭 @@ -69,12 +59,6 @@ */ @ApiModelProperty(value = "鐜荤拑绫诲瀷", position = 8) private Integer glassType; - - /** - * 瀹� - */ - @ApiModelProperty(value = "瀹�", position = 9) - private Double width; /** * 楂� diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java index bce5186..c3a9c9c 100644 --- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java +++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java @@ -26,7 +26,6 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -55,6 +54,18 @@ @Value("${mes.minCount}") private int minCount; + + @Value("${mes.carWidth}") + private Integer carWidth; + + @Value("${mes.slotWidth}") + private Integer slotWidth; + + @Value("${mes.carMaxSize}") + private Integer carMaxSize; + + @Value("${mes.galssGap}") + private Integer galssGap; /** * 鏌ヨ杩�/鍑虹墖浠诲姟 @@ -125,7 +136,7 @@ for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList ) { if (bigStorageCageDetails.getBigStorageCageFeedTask().getTaskState() == 0) { - carWidth -= Integer.parseInt(bigStorageCageDetails.getWidth().toString()) + bigStorageCageDetails.getGap(); + carWidth -= Integer.parseInt(bigStorageCageDetails.getWidth().toString()) + galssGap; } } return carWidth; @@ -175,7 +186,7 @@ BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails(); BeanUtils.copyProperties(glassInfo, bigStorageCageDetails); bigStorageCageDetails.setState(0); - bigStorageCageDetails.setGap(Const.BIG_STORAGE_GAP); + bigStorageCageDetails.setGap(galssGap); return bigStorageCageDetails; } @@ -228,7 +239,7 @@ return bigStorageDTO; } bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() - .eq(BigStorageCage::getRemainWidth, Const.BIG_STORAGE_WIDTH) + .eq(BigStorageCage::getRemainWidth, slotWidth) .inSql(BigStorageCage::getDeviceId, "select distinct device_id from big_storage_cage_details where tempering_layout_id = " + glassInfo.getTemperingLayoutId()) .last("limit 1")); @@ -239,7 +250,7 @@ return bigStorageDTO; } bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() - .eq(BigStorageCage::getRemainWidth, Const.BIG_STORAGE_WIDTH) + .eq(BigStorageCage::getRemainWidth, slotWidth) .last("limit 1")); Assert.isTrue(null != bigStorageCage, "娌℃湁绌轰綑鐨勭瀛愬瓨鏀剧幓鐠�"); bigStorageDTO = new BigStorageDTO(); diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java index 01aa22e..aebf46d 100644 --- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java +++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.mes.base.entity.BigStorageCageBaseInfo; import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.entity.BigStorageDTO; @@ -16,7 +18,9 @@ import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService; import com.mes.bigstoragetask.service.BigStorageCageOutTaskService; +import com.mes.common.S7object; import com.mes.common.config.Const; +import com.mes.device.PlcParameterObject; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import com.mes.glassinfo.entity.GlassInfo; @@ -27,13 +31,11 @@ import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; 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; /** @@ -63,26 +65,28 @@ @Value("${mes.sequence.order}") private boolean sequenceOrder; + @Value("${mes.carWidth}") + private Integer carWidth; + @Value("${mes.slotWidth}") private Integer slotWidth; - // @Scheduled(fixedDelay = 5000) - public void plcToHomeEdgScan(String d01Id) { -// PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; -// String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue(); -// String d01Id = plcParameterObject.getPlcParameter("D01ID1").getValue(); -// String d02SitState = plcParameterObject.getPlcParameter("D02SitState").getValue(); -// String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue(); -// String d04Id = plcParameterObject.getPlcParameter("D04ID1").getValue(); -// String d05SitState = plcParameterObject.getPlcParameter("D05SitState").getValue(); + @Value("${mes.carMaxSize}") + private Integer carMaxSize; - String d01Request = "1"; - String d02SitState = "0"; -// String d01Id = "P24060403|3|6"; - String d04Request = "0"; - String d05SitState = "0"; -// String d04Id = "P24060403|4|3"; - String d04Id = "P24060403|5|4"; + @Value("${mes.galssGap}") + private Integer galssGap; + + @Scheduled(fixedDelay = 5000) + public void plcToHomeEdgScan() { + PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; + String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue(); + String d01Id = plcParameterObject.getPlcParameter("D01ID1").getValue(); + String d02SitState = plcParameterObject.getPlcParameter("D02SitState").getValue(); + String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue(); + String d04Id = plcParameterObject.getPlcParameter("D04ID1").getValue(); + String d05SitState = plcParameterObject.getPlcParameter("D05SitState").getValue(); + log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧d01涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};鑾峰彇鍒扮殑璇锋眰瀛梔04涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};", d01Request, d01Id, d04Request, d04Id); if (!REQUEST_WORD.equals(d01Request) && !REQUEST_WORD.equals(d04Request)) { @@ -116,23 +120,18 @@ } } - // @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 5000) public void plcToHomeEdgFreeCarTask() { -// PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; -// String e01Status = plcParameterObject.getPlcParameter("E01Status").getValue(); - String e01Status = "0"; + PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; + String e01Status = plcParameterObject.getPlcParameter("E01Status").getValue(); if (REQUEST_WORD.equals(e01Status)) { log.info("杩涚墖澶ц溅闈炵┖闂�"); return; } -// String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue(); -// String d01Id = plcParameterObject.getPlcParameter("D01ID1").getValue(); -// String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue(); -// String d04Id = plcParameterObject.getPlcParameter("D04ID1").getValue(); - String d01Request = ""; - String d01Id = ""; - String d04Request = "1"; - String d04Id = ""; + String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue(); + String d01Id = plcParameterObject.getPlcParameter("D01ID1").getValue(); + String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue(); + String d04Id = plcParameterObject.getPlcParameter("D04ID1").getValue(); log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧d01涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};鑾峰彇鍒扮殑璇锋眰瀛梔04涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};", d01Request, d01Id, d04Request, d04Id); //涓ゆ潯绾块兘鏈夎繘鍗ц浆绔嬩换鍔★紝鐩存帴缁撴潫 @@ -168,43 +167,29 @@ computeTargetByLine(outLine); } - // @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 5000) public void plcToHomeEdgOutTask() { - //浠诲姟鏁版嵁 鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲� 鐜荤拑闂撮殧 - List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>(); + + List<BigStorageCageOutTask> outingList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW)); + Assert.isTrue(CollectionUtils.isEmpty(outingList), "鏈夋鍦ㄦ墽琛屽嚭鐗囩殑浠诲姟锛岀粨鏉熷綋鍓嶅嚭鐗囩嚎绋�"); + //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑 - List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>() + List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.selectJoinList(TemperingGlassInfo.class, new MPJLambdaWrapper<TemperingGlassInfo>() + .selectAll(TemperingGlassInfo.class) + .leftJoin(BigStorageCageOutTask.class, BigStorageCageOutTask::getGlassId, TemperingGlassInfo::getGlassId) .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW) + .isNull(BigStorageCageOutTask::getGlassId) .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence)); if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) { log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟"); - //鎵撹溅鍓╀綑灏哄 - Integer remainWidth = Const.BIG_STORAGE_WIDTH; - for (TemperingGlassInfo e : temperingGlassInfoList) { - if (bigStorageCageOutTaskList.size() > 5 || e.getWidth() > remainWidth) { - break; - } - remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP; - bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getState(), Const.A09_OUT_TARGET_POSITION, - e.getWidth().intValue(), 0, 0, 1)); - } - bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); + computeOutGlassInfo(temperingGlassInfoList); return; } //鏄惁鏈変汉宸ヤ笅鐗囦换鍔� 鏈夌洿鎺ュ嚭 List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth)); if (CollectionUtils.isNotEmpty(artificialList)) { - Integer remainWidth = Const.BIG_STORAGE_WIDTH; - for (BigStorageCageDetails e : artificialList) { - if (remainWidth < e.getWidth().intValue()) { - break; - } - bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.A10_OUT_TARGET_POSITION, - e.getWidth().intValue(), 0, 0, 1)); - remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP; - } - bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); + computeOutGlassInfo(temperingGlassInfoList); return; } //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩 鐜荤拑灏忕墖 鐮存崯琛� 鏁伴噺 鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈 @@ -214,24 +199,14 @@ //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟 缁撴潫 List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class) .selectAll(GlassInfo.class) + .select("-1 as state") .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot) .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId) .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) .eq(GlassInfo::getTemperingLayoutId, temperingLayoutDTO.getTemperingLayoutId()) .eq(GlassInfo::getEngineerId, temperingLayoutDTO.getEngineerId())); temperingGlassInfoService.saveBatch(temperingGlassInfos); - - //澶ц溅鍓╀綑灏哄 - Integer remainWidth = Const.BIG_STORAGE_WIDTH; - for (TemperingGlassInfo e : temperingGlassInfos) { - if (bigStorageCageOutTaskList.size() > 5 || e.getWidth() > remainWidth) { - break; - } - remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP; - bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getState(), Const.A09_OUT_TARGET_POSITION, - e.getWidth().intValue(), 0, 0, 1)); - } - bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); + computeOutGlassInfo(temperingGlassInfoList); return; } //鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟 @@ -241,7 +216,7 @@ for (int i = 0; i < slotSequenceList.size() - 1; i++) { SlotSequenceDTO first = slotSequenceList.get(i); SlotSequenceDTO second = slotSequenceList.get(i + 1); - int slotWidth = Const.BIG_STORAGE_WIDTH - first.getRemainWidth() - Const.BIG_STORAGE_GAP; + int slotWidth = carWidth - first.getRemainWidth() - galssGap; if (first.getMinSequence() == second.getMaxSequence() + 1 && second.getRemainWidth() > slotWidth) { List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() @@ -271,7 +246,7 @@ Integer remainWidth; Integer glassCount; if (0 == sitToUpRemainWidth.getGlassCount()) { - remainWidth = Const.BIG_STORAGE_WIDTH; + remainWidth = carWidth; glassCount = 0; } else { remainWidth = sitToUpRemainWidth.getWidth(); @@ -292,8 +267,8 @@ } else { Integer widthSecond = edgGlassTaskInfoList.get(1).getWidth(); if (remainWidth >= widthFirst) { - if (remainWidth - widthFirst - Const.BIG_STORAGE_GAP >= widthSecond) { - if (glassCount <= 5) { + if (remainWidth - widthFirst - galssGap >= widthSecond) { + if (glassCount <= carMaxSize - 1) { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst); return Boolean.FALSE; } else { @@ -392,4 +367,60 @@ } return Boolean.TRUE; } + + private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list) { + //浠诲姟鏁版嵁 鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲� 鐜荤拑闂撮殧 + List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>(); + //鎵撹溅鍓╀綑灏哄 + Integer remainWidth = carWidth; + for (T e : list) { + if (bigStorageCageOutTaskList.size() > carMaxSize || e.getWidth() > remainWidth) { + break; + } + remainWidth = remainWidth - e.getWidth().intValue() - galssGap; + bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.A09_OUT_TARGET_POSITION, + e.getWidth().intValue(), 0, 0, 1)); + } + Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟"); + log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size()); + bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); + List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList()); + log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds); + bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() + .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT) + .in(BigStorageCageDetails::getGlassId, glassIds)); + //鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄 + updateSlotRemain(list, glassIds); + return Boolean.TRUE; + } + + /** + * 鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄 + * + * @param list + * @param taskGlassIds + * @param <T> + */ + public <T extends BigStorageCageBaseInfo> void updateSlotRemain(List<T> list, List<String> taskGlassIds) { + //鑾峰彇闇�瑕佸嚭鍘伙紙鍖呮嫭寰呭嚭鍘荤殑锛夌殑鎵�鏈夌幓鐠冩牸瀛愬彿 + List<Integer> slotList = list.stream().map(T::getSlot).distinct().collect(Collectors.toList()); + //鑾峰彇寰呭嚭鍘荤殑鐜荤拑淇℃伅锛堢瓑涓嬭溅鍑哄幓鐨勭幓鐠冿級 + Map<Integer, Double> slotRemainMap = list.stream().filter(e -> !taskGlassIds.contains(e.getGlassId())) + .collect(Collectors.groupingBy(T::getSlot, Collectors.summingDouble(item -> item.getWidth() + galssGap))); + if (CollectionUtils.isNotEmpty(slotRemainMap)) { + //鎸夌収鏍煎瓙鍙锋洿鏂板墿浣欏昂瀵� + slotRemainMap.forEach((e, v) -> { + bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth - v) + .eq(BigStorageCage::getSlot, e)); + }); + } + 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)); + } + + + } } \ No newline at end of file diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java index 72a7f0f..ab5372d 100644 --- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java +++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java @@ -1,6 +1,6 @@ package com.mes.temperingglass.service; -import com.baomidou.mybatisplus.extension.service.IService; +import com.github.yulichang.base.MPJBaseService; import com.mes.temperingglass.entity.TemperingGlassInfo; import java.util.List; @@ -13,7 +13,7 @@ * @author zhoush * @since 2024-03-27 */ -public interface TemperingGlassInfoService extends IService<TemperingGlassInfo> { +public interface TemperingGlassInfoService extends MPJBaseService<TemperingGlassInfo> { public void addOutTask(List<TemperingGlassInfo> temperingGlassInfoList); diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml index 2a8d5ea..7f3890a 100644 --- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml +++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml @@ -14,4 +14,7 @@ sequence: order: false minCount: 5 - slotWidth: 5000 \ No newline at end of file + carWidth: 5000 #澶ц溅瀹藉害 + slotWidth: 5000 #澶ц溅瀹藉害 + carMaxSize: 6 #澶ц溅鏈�澶у瓨鏀剧幓鐠冩暟閲� + galssGap: 20 #鐜荤拑闂磋窛 \ No newline at end of file diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java index 23badef..46bade9 100644 --- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java +++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java @@ -1,5 +1,6 @@ package com.mes; +import com.mes.base.entity.BigStorageCageBaseInfo; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.common.config.Const; import com.mes.job.PlcStorageCageTask; @@ -40,74 +41,57 @@ } @Test + public void updateSlotRemain() { + List<String> taskGlassIds = Arrays.asList( +// "P24060403|1|1", +// "P24060403|1|2", +// "P24060403|1|3", +// "P24060403|1|4", + "P24060403|1|5"); + List<BigStorageCageBaseInfo> list = new ArrayList<>(); + list.add(new BigStorageCageBaseInfo("P24060403|1|1", 1080.0, 4)); + list.add(new BigStorageCageBaseInfo("P24060403|1|2", 1080.0, 1)); + list.add(new BigStorageCageBaseInfo("P24060403|1|3", 1080.0, 1)); + list.add(new BigStorageCageBaseInfo("P24060403|1|4", 1080.0, 16)); + list.add(new BigStorageCageBaseInfo("P24060403|1|5", 1080.0, 15)); + + plcStorageCageTask.updateSlotRemain(list, taskGlassIds); + } + + @Test public void plcToHomeEdgOutTask() { -// log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}",bigStorageCageService.querybigStorageCageDetail()); plcStorageCageTask.plcToHomeEdgOutTask(); } @Test public void plcToHomeEdgFreeCarTask() { -// log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}",bigStorageCageService.querybigStorageCageDetail()); plcStorageCageTask.plcToHomeEdgFreeCarTask(); } @Test public void plcStorageCageTask() { -// log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}",bigStorageCageService.querybigStorageCageDetail()); - List<String> list = new ArrayList<>(); - //2002 -// list.add("P24060403|4|3"); -// list.add("P24060403|5|4"); -// list.add("P24060403|2|1"); -// list.add("P24060403|3|2"); -// list.add("P24060403|1|3"); -// list.add("P24060403|3|1"); -// list.add("P24060403|2|3"); -// list.add("P24060403|1|1"); -// list.add("P24060403|8|6"); -// list.add("P24060403|7|2"); - //2001 -// list.add("P24060403|3|6"); -// list.add("P24060403|5|2"); -// list.add("P24060403|4|4"); -// list.add("P24060403|3|5"); -// list.add("P24060403|5|3"); -// list.add("P24060403|1|2"); -// list.add("P24060403|2|2"); -// list.add("P24060403|5|1"); - list.add("P24060403|2|4"); - list.add("P24060403|1|5"); - list.add("P24060403|4|2"); - list.add("P24060403|1|4"); - list.add("P24060403|4|1"); - list.add("P24060403|8|7"); - for (String e : list) { - plcStorageCageTask.plcToHomeEdgScan(e); - } + plcStorageCageTask.plcToHomeEdgScan(); + } @Test public void computeTargetByLine() { -// log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}",bigStorageCageService.querybigStorageCageDetail()); plcStorageCageTask.computeTargetByLine(2001); } @Test public void judgeGlassTypeStatus() { -// log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}",bigStorageCageService.querybigStorageCageDetail()); plcStorageCageTask.judgeGlassTypeStatus("P24060403|6|7", Const.A09_OUT_TARGET_POSITION); } @Test public void getStartLine() { -// log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}",bigStorageCageService.querybigStorageCageDetail()); Integer startLine = plcStorageCageTask.getStartLine(); log.info("---------{}", startLine); } @Test public void selectBigStorageCageUsage() { -// bigStorageCageService.querybigStorageCageDetail(1); log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}", bigStorageCageService.selectBigStorageCageUsage()); } -- Gitblit v1.8.0