hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json
@@ -1,6 +1,6 @@ { "plcAddressBegin":"DB.0", "plcAddressLenght":"72", "plcAddressBegin":"DB14.0", "plcAddressLenght":"84", "dataType":"word", "parameteInfor":[ { @@ -19,7 +19,7 @@ }, { "codeId": "D04Request", "addressIndex":"8", "addressIndex":"34", "addressLenght":"2", "ratio":"1", "unit":"" @@ -27,28 +27,62 @@ { "codeId": "D04ID1", "addressIndex":"10", "addressLenght":"6", "addressLenght":"36", "ratio":"1", "unit":"" }, { "codeId": "D02Go", "addressIndex":"20", "codeId": "E01Status", "addressIndex":"2", "addressLenght":"68", "ratio":"1", "unit":"" }, { "codeId": "E02Status", "addressIndex":"2", "addressLenght":"70", "ratio":"1", "unit":"" }, { "codeId": "MaxTaskNo", "addressIndex":"2", "addressLenght":"72", "ratio":"1", "unit":"" }, { "codeId": "D02MaxWidth", "addressIndex":"2", "addressLenght":"74", "ratio":"1", "unit":"" }, { "codeId": "D05MaxWidth", "addressIndex":"2", "addressLenght":"76", "ratio":"1", "unit":"" }, { "codeId": "GlassGap", "addressIndex":"2", "addressLenght":"78", "ratio":"1", "unit":"" }, { "codeId": "D02SitState", "addressIndex":"80", "addressLenght":"2", "ratio":"1", "unit":"" }, { "codeId": "D05Go", "addressIndex":"22", "addressLenght":"2", "ratio":"1", "unit":"" } , { "codeId": "DeviceStatus", "addressIndex":"70", "codeId": "D05SitState", "addressIndex":"82", "addressLenght":"2", "ratio":"1", "unit":"" hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java
New file @@ -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; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -18,8 +18,8 @@ * 磨边清洗前 */ /** * A09出片目标位置2001 * A10出片目标位置2002 * A09出片目标位置 d02卧转立 钢化出片 2001 * A10出片目标位置 d05卧转立 人工出片 2002 */ public static final Integer A09_OUT_TARGET_POSITION = 2001; public static final Integer A10_OUT_TARGET_POSITION = 2002; @@ -73,8 +73,8 @@ * 0 大理片笼无请求 * 1 大理片笼进片请求 */ public static final Integer BIG_STORAGE_REQUEST = 0; public static final Integer BIG_STORAGE_REQUEST_IN = 1; public static final String BIG_STORAGE_REQUEST = "0"; public static final String BIG_STORAGE_REQUEST_IN = "1"; /** * 大理片笼详情状态 @@ -101,6 +101,7 @@ public static final Integer BIG_STORAGE_IN_UP = 2; public static final Integer BIG_STORAGE_IN_CAR = 3; public static final Integer BIG_STORAGE_IN_SLOT = 4; public static final List<Integer> BIG_STORAGE_IN_UP_ALL = Arrays.asList(1, 2); /** * 卧转立出片请求 * 1 任务生成 @@ -118,12 +119,6 @@ */ public static final Integer BIG_STORAGE_IN_WAIT = 1; 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; /** * 钢化小片表 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
@@ -2,16 +2,15 @@ import com.github.yulichang.base.MPJBaseMapper; import com.mes.glassinfo.entity.GlassInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * Mapper 接口 * Mapper 接口 * </p> * * @author wu * @since 2024-04-29 */ public interface GlassInfoMapper extends BaseMapper<GlassInfo>, MPJBaseMapper<GlassInfo> { public interface GlassInfoMapper extends MPJBaseMapper<GlassInfo> { } hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
@@ -2,6 +2,9 @@ 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; import lombok.EqualsAndHashCode; @@ -13,88 +16,92 @@ * </p> * * @author zhoush * @since 2024-04-07 * @since 2024-03-27 */ @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; /** * 钢化小片信息表id */ @ApiModelProperty(value = "钢化小片信息表id", position = 2) @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 流程卡 */ private String flowcardId; @ApiModelProperty(value = "流程卡", position = 4) private String flowCardId; /** * 流程卡玻璃类型 */ @ApiModelProperty(value = "流程卡玻璃类型", position = 5) private Integer glassType; /** * 宽 */ private Double width; /** * 高 */ @ApiModelProperty(value = "高", position = 7) private Double height; /** * 厚度 */ @ApiModelProperty(value = "厚度", position = 8) private Double thickness; /** * 膜系 */ private Integer filmsid; @ApiModelProperty(value = "膜系", position = 9) private String filmsid; /** * 钢化是否接受横放 */ @ApiModelProperty(value = "钢化是否接受横放", position = 10) private Integer ishorizontal; /** * 钢化版图id */ @ApiModelProperty(value = "钢化版图id", position = 11) private Integer temperingLayoutId; /** * 钢化版图片序 */ @ApiModelProperty(value = "钢化版图片序", position = 12) private Integer temperingFeedSequence; /** * x坐标 */ @ApiModelProperty(value = "x坐标", position = 13) private Integer xCoordinate; /** * y坐标 */ @ApiModelProperty(value = "y坐标", position = 14) private Integer yCoordinate; /** * 旋转角度(逆时针) */ @ApiModelProperty(value = "旋转角度(逆时针)", position = 15) private Integer angle; /** * 状态 */ @ApiModelProperty(value = "状态", position = 16) private Integer state; /** * 格子号 */ private Integer slot; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
@@ -3,6 +3,9 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.github.yulichang.base.MPJBaseMapper; import com.mes.temperingglass.entity.TemperingGlassInfo; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -15,4 +18,6 @@ @DS("salve_hangzhoumes") public interface TemperingGlassInfoMapper extends MPJBaseMapper<TemperingGlassInfo> { boolean saveBatch(@Param(value = "list") List<TemperingGlassInfo> list); } hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml
New file @@ -0,0 +1,16 @@ <?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.temperingglass.mapper.TemperingGlassInfoMapper"> <insert id="saveBatch"> 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.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> </mapper> 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; /** * 大理片笼详情表id */ @ApiModelProperty(value = "大理片笼详情表id", position = 2) @TableId(value = "id", type = IdType.AUTO) @ApiModelProperty(value = "大理片笼详情表id", 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; /** * 高 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java
@@ -9,6 +9,17 @@ */ @Data public class BigStorageDTO { /** * 格子号 */ private Integer slot; /** * 剩余宽度 */ private Integer width; /** * 玻璃数量 */ private Integer glassCount; } 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; } @@ -210,21 +221,25 @@ public BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) { BigStorageDTO bigStorageDTO = null; MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class) .selectAsClass(BigStorageCage.class, BigStorageDTO.class) .selectAll(BigStorageCage.class) .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot) .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId()) .gt(BigStorageCage::getRemainWidth, glassInfo.getWidth()) .last("limit 1"); if (glassInfo.getTemperingLayoutId() == 0) { wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight()); } else { wrapper.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1); } bigStorageDTO = bigStorageCageService.selectJoinOne(BigStorageDTO.class, wrapper); if (null != bigStorageDTO) { BigStorageCage bigStorageCage = bigStorageCageService.selectJoinOne(BigStorageCage.class, wrapper); if (null != bigStorageCage) { bigStorageDTO = new BigStorageDTO(); bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); bigStorageDTO.setSlot(bigStorageCage.getSlot()); return bigStorageDTO; } BigStorageCage bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() .eq(BigStorageCage::getRemainWidth, Const.BIG_STORAGE_WIDTH) bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() .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")); @@ -235,15 +250,13 @@ 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(); bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); bigStorageDTO.setSlot(bigStorageCage.getSlot()); return bigStorageDTO; } @Override hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
@@ -27,7 +27,7 @@ public BigStorageCageOutTask() { } public BigStorageCageOutTask(String glassId, Integer startSlot, Integer endSlot, Integer trainNumber, Integer serialNumber, Integer taskState) { public BigStorageCageOutTask(String glassId, Integer startSlot, Integer endSlot, Integer width, Integer trainNumber, Integer serialNumber, Integer taskState) { this.glassId = glassId; this.startSlot = startSlot; this.endSlot = endSlot; hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java
@@ -2,8 +2,10 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.bigstorage.entity.BigStorageDTO; import com.github.yulichang.base.MPJBaseMapper; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -18,5 +20,7 @@ @DS("salve_hangzhoumes") public interface BigStorageCageFeedTaskMapper extends MPJBaseMapper<BigStorageCageFeedTask> { List<String> querySitToUpGlass(); List<Integer> querySitToUpGlass(); BigStorageDTO querySitToUpRemainWidth(@Param(value = "line") Integer line); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java
@@ -1,9 +1,11 @@ package com.mes.bigstoragetask.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.github.yulichang.base.MPJBaseMapper; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -14,6 +16,7 @@ * @since 2024-04-16 */ @DS("salve_hangzhoumes") public interface BigStorageCageOutTaskMapper extends MPJBaseMapper<BigStorageCageOutTask> { public interface BigStorageCageOutTaskMapper extends BaseMapper<BigStorageCageOutTask> { boolean saveBatch(@Param(value = "list") List<BigStorageCageOutTask> list); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageFeedTaskService.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.github.yulichang.base.MPJBaseService; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.entity.BigStorageDTO; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import java.util.List; @@ -24,5 +25,10 @@ /** * 查询卧转立玻璃是否进片完成 */ List<String> querySitToUpGlass(); BigStorageDTO querySitToUpRemainWidth(Integer line); /** * 查询卧转立玻璃是否进片完成 */ List<Integer> querySitToUpGlass(); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java
@@ -1,7 +1,7 @@ package com.mes.bigstoragetask.service; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.baomidou.mybatisplus.extension.service.IService; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import java.util.List; @@ -19,5 +19,7 @@ void updateOutTask(); boolean saveBatch(List<BigStorageCageOutTask> list); void deleteOutTask(String glassId); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageFeedTaskServiceImpl.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.entity.BigStorageDTO; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper; import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService; @@ -39,7 +40,12 @@ } @Override public List<String> querySitToUpGlass() { public BigStorageDTO querySitToUpRemainWidth(Integer line) { return baseMapper.querySitToUpRemainWidth(line); } @Override public List<Integer> querySitToUpGlass() { return baseMapper.querySitToUpGlass(); } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java
@@ -1,13 +1,12 @@ package com.mes.bigstoragetask.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper; import com.mes.bigstoragetask.service.BigStorageCageOutTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.mapper.TemperingGlassInfoMapper; import lombok.extern.slf4j.Slf4j; @@ -35,14 +34,19 @@ @Resource BigStorageCageDetailsMapper bigStorageCageDetailsMapper; @Override public boolean saveBatch(List<BigStorageCageOutTask> list) { return baseMapper.saveBatch(list); } /** * 查询任务信息 */ @Override public List<BigStorageCageOutTask> querybigStorageCageOutTask(int taskState){ log.info("根据传入的任务状态查询任务信息:"+taskState); LambdaQueryWrapper<BigStorageCageOutTask> getOutTaskWrapper=new LambdaQueryWrapper<>(); getOutTaskWrapper.eq(BigStorageCageOutTask::getTaskState,taskState); public List<BigStorageCageOutTask> querybigStorageCageOutTask(int taskState) { log.info("根据传入的任务状态查询任务信息:" + taskState); LambdaQueryWrapper<BigStorageCageOutTask> getOutTaskWrapper = new LambdaQueryWrapper<>(); getOutTaskWrapper.eq(BigStorageCageOutTask::getTaskState, taskState); return baseMapper.selectList(getOutTaskWrapper); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java
File was deleted hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
File was deleted hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
File was deleted hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
File was deleted hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -2,13 +2,18 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.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; import com.mes.bigstorage.entity.dto.SlotSequenceDTO; import com.mes.bigstorage.entity.dto.TemperingLayoutDTO; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService; @@ -30,10 +35,7 @@ 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; /** @@ -43,6 +45,8 @@ @Slf4j public class PlcStorageCageTask { @Resource private BigStorageCageService bigStorageCageService; @Resource private BigStorageCageDetailsService bigStorageCageDetailsService; @Resource @@ -61,29 +65,45 @@ @Value("${mes.sequence.order}") private boolean sequenceOrder; @Value("${mes.carWidth}") private Integer carWidth; @Value("${mes.slotWidth}") private Integer slotWidth; @Value("${mes.carMaxSize}") private Integer carMaxSize; @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为:{},获取到的扫描ID为:{};获取到的请求字d04为:{},获取到的扫描ID为:{};", d01Request, d01Id, d04Request, d04Id); if (!REQUEST_WORD.equals(d01Request) && !REQUEST_WORD.equals(d04Request)) { log.info("两条线未收到进片任务,结束本次扫描进卧转立任务"); return; } if (REQUEST_WORD.equals(d02SitState) && REQUEST_WORD.equals(d05SitState)) { log.info("两条线卧转立均在执行任务,结束本次扫描进卧转立任务"); return; } Boolean flag01 = Boolean.FALSE; Boolean flag04 = Boolean.FALSE; //按照线路及玻璃id获取相邻两块玻璃 卧转立上的玻璃 if (REQUEST_WORD.equals(d01Request)) { if (REQUEST_WORD.equals(d01Request) && !REQUEST_WORD.equals(d02SitState)) { flag01 = judgeGlassTypeStatus(d01Id, Const.A09_OUT_TARGET_POSITION); } if (REQUEST_WORD.equals(d04Request)) { if (REQUEST_WORD.equals(d04Request) && !REQUEST_WORD.equals(d05SitState)) { flag04 = judgeGlassTypeStatus(d04Id, Const.A10_OUT_TARGET_POSITION); } if (flag01 && flag04) { @@ -103,9 +123,9 @@ @Scheduled(fixedDelay = 5000) public void plcToHomeEdgFreeCarTask() { PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; String freeCar = plcParameterObject.getPlcParameter("freeCar").getValue(); if (REQUEST_WORD.equals(freeCar)) { log.info("大车非空闲"); String e01Status = plcParameterObject.getPlcParameter("E01Status").getValue(); if (REQUEST_WORD.equals(e01Status)) { log.info("进片大车非空闲"); return; } String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue(); @@ -116,23 +136,23 @@ d01Request, d01Id, d04Request, d04Id); //两条线都有进卧转立任务,直接结束 if (Const.BIG_STORAGE_REQUEST_IN.equals(d01Request) && Const.BIG_STORAGE_REQUEST_IN.equals(d04Request) && StringUtils.isNotBlank(d01Id) && StringUtils.isNotBlank(d04Id)) { && Const.BIG_STORAGE_REQUEST_IN.equals(d04Request)) { log.info("两条线都存在进片任务,结束任务"); return; } //获取两条线卧转立是否有玻璃,且任务状态都为2 List<String> lineList = bigStorageCageFeedTaskService.querySitToUpGlass(); List<Integer> lineList = bigStorageCageFeedTaskService.querySitToUpGlass(); if (CollectionUtils.isEmpty(lineList)) { log.info("两条线卧转立为空或者有进片任务未完成,结束任务"); return; } String line1 = lineList.get(0); String flagLine = line1.equals(Const.A09_OUT_TARGET_POSITION) ? d01Id : d04Id; Integer lineFirst = lineList.get(0); String lineGlassId = lineFirst.equals(Const.A09_OUT_TARGET_POSITION) ? d01Id : d04Id; if (lineList.size() == 1) { //计算任务表进片格子 发送进片任务 computeTargetByLine(Integer.parseInt(flagLine)); if (StringUtils.isEmpty(lineGlassId)) { computeTargetByLine(lineFirst); } return; } if (StringUtils.isBlank(d01Id) && StringUtils.isBlank(d04Id)) { @@ -149,70 +169,44 @@ @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, 0, 0, 1)); } bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); computeOutGlassInfo(temperingGlassInfoList); return; } //todo:是否有人工下片任务 有直接出 //笼内是否有人工下片玻璃 无 结束 //是否有人工下片任务 有直接出 List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth)); if (CollectionUtils.isEmpty(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(), 0, 0, 0, 1)); remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP; } bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); if (CollectionUtils.isNotEmpty(artificialList)) { computeOutGlassInfo(temperingGlassInfoList); return; } //钢化优先:获取理片笼 玻璃小片 破损表 数量 判断笼内版图是否到齐 TemperingLayoutDTO temperingLayoutDTO = bigStorageCageDetailsService.temperingIsAll(); if (null != temperingLayoutDTO) { //玻璃到齐 //到齐,将玻璃小片数据存入钢化小片表,逻辑生成出片任务 结束 List<BigStorageCageDetails> bigStorageCageDetails = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() .eq(BigStorageCageDetails::getTemperingLayoutId, temperingLayoutDTO.getTemperingLayoutId()) .eq(BigStorageCageDetails::getEngineerId, temperingLayoutDTO.getEngineerId())); List<TemperingGlassInfo> temperingGlassInfos = bigStorageCageDetails.stream().map(e -> { TemperingGlassInfo info = new TemperingGlassInfo(); BeanUtils.copyProperties(e, info); return info; }).collect(Collectors.toList()); 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 : 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, 0, 0, 1)); } bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); computeOutGlassInfo(temperingGlassInfoList); return; } //未到齐 执行内部调度任务 @@ -222,12 +216,13 @@ for (int i = 0; i < slotSequenceList.size() - 1; i++) { SlotSequenceDTO first = slotSequenceList.get(i); SlotSequenceDTO second = slotSequenceList.get(i + 1); int slotWidth = carWidth - first.getRemainWidth() - galssGap; if (first.getMinSequence() == second.getMaxSequence() + 1 && second.getRemainWidth() > Const.BIG_STORAGE_WIDTH - first.getRemainWidth() - Const.BIG_STORAGE_GAP) { && second.getRemainWidth() > slotWidth) { List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)); List<BigStorageCageOutTask> outTasks = list.stream().map(e -> new BigStorageCageOutTask(e.getGlassId(), first.getSlot(), second.getSlot(), 0, 0, 1)).collect(Collectors.toList()); slotWidth, 0, 0, 1)).collect(Collectors.toList()); bigStorageCageOutTaskService.saveBatch(outTasks); return; } @@ -247,25 +242,41 @@ .orderByAsc(EdgGlassTaskInfo::getTime)); Assert.isFalse(CollectionUtils.isEmpty(edgGlassTaskInfoList), "识别玻璃信息未出现在尺寸表中,获取相邻两块玻璃失败"); //2、获取卧转立剩余宽度 Map<String, Object> map = bigStorageCageFeedTaskService.getMap(new QueryWrapper<BigStorageCageFeedTask>() .select("cast(" + Const.BIG_STORAGE_WIDTH + " - sum(width + " + Const.BIG_STORAGE_GAP + ") as INT) as remainWidth") .eq("line", line).eq("task_state", Const.BIG_STORAGE_IN_UP)); Integer remainWidth = null == map ? Const.BIG_STORAGE_WIDTH : Integer.parseInt(map.get("remainWidth") + ""); BigStorageDTO sitToUpRemainWidth = bigStorageCageFeedTaskService.querySitToUpRemainWidth(line); Integer remainWidth; Integer glassCount; if (0 == sitToUpRemainWidth.getGlassCount()) { remainWidth = carWidth; glassCount = 0; } else { remainWidth = sitToUpRemainWidth.getWidth(); glassCount = sitToUpRemainWidth.getGlassCount(); } //2、获取卧转立 Integer widthFirst = edgGlassTaskInfoList.get(0).getWidth(); if (edgGlassTaskInfoList.size() == 1) { if (remainWidth >= widthFirst) { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst); return Boolean.FALSE; if (glassCount <= 5) { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst); return Boolean.FALSE; } else { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst); return Boolean.TRUE; } } } else { Integer widthSecond = edgGlassTaskInfoList.get(1).getWidth(); if (remainWidth >= widthFirst) { if (remainWidth - widthFirst - Const.BIG_STORAGE_GAP >= widthSecond) { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthSecond); return Boolean.FALSE; if (remainWidth - widthFirst - galssGap >= widthSecond) { if (glassCount <= carMaxSize - 1) { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst); return Boolean.FALSE; } else { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst); return Boolean.TRUE; } } else { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthSecond); addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst); } } } @@ -279,7 +290,7 @@ private Boolean addFeedTask(String glassId, Integer line, Integer taskType, Integer width) { BigStorageCageFeedTask bigStorageCageFeedTask = new BigStorageCageFeedTask(); bigStorageCageFeedTask.setGlassId(glassId); bigStorageCageFeedTask.setTaskState(Const.BIG_STORAGE_REQUEST_IN); bigStorageCageFeedTask.setTaskState(Const.BIG_STORAGE_IN_NEW); bigStorageCageFeedTask.setLine(line); bigStorageCageFeedTask.setTaskType(taskType); bigStorageCageFeedTask.setWidth(width); @@ -313,20 +324,12 @@ //1、获取任务表中的所有玻璃(指定线路且已经进卧转立完成) List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>() .eq(BigStorageCageFeedTask::getLine, line) .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP) .in(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP_ALL) .orderByAsc(BigStorageCageFeedTask::getId)); //2、去笼子内查找是否可以继续存放的笼子 List<String> glassIds = taskList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList()); List<GlassInfo> glassInfos = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIds)); List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>(); List<BigStorageCageDetails> temperingList = computeIsTemperingTargetByLine(glassInfos, taskList, Boolean.TRUE); List<BigStorageCageDetails> noTemperingList = computeIsTemperingTargetByLine(glassInfos, taskList, Boolean.FALSE); bigStorageCageDetailsList.addAll(temperingList); bigStorageCageDetailsList.addAll(noTemperingList); //4、在详情表中加入进片玻璃信息 bigStorageCageDetailsService.saveBatch(bigStorageCageDetailsList); return Boolean.TRUE; return computeIsTemperingTargetByLine(glassInfos, taskList, Boolean.TRUE) && computeIsTemperingTargetByLine(glassInfos, taskList, Boolean.FALSE); } /** @@ -336,22 +339,10 @@ * @param taskList 当条线卧转立所有任务 * @param isTempering true 钢化 false 不钢化 */ private List<BigStorageCageDetails> computeIsTemperingTargetByLine(List<GlassInfo> glassInfos, List<BigStorageCageFeedTask> taskList, Boolean isTempering) { Map<String, GlassInfo> glassInfoMap; if (isTempering) { glassInfoMap = glassInfos.stream().filter(e -> e.getTemperingLayoutId() != 0) .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p)); } else { glassInfoMap = glassInfos.stream().filter(e -> e.getTemperingLayoutId() == 0) .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p)); } //设置临时变量接受版图id,版序、格子号及剩余宽度 Integer temperingLayoutIdTemp = 0; Integer temperingFeedSequenceTemp = 0; BigStorageDTO bigStorageDTO = new BigStorageDTO(); List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>(); private boolean computeIsTemperingTargetByLine(List<GlassInfo> glassInfos, List<BigStorageCageFeedTask> taskList, Boolean isTempering) { //1、将玻璃信息集合转为glassid为key的map Map<String, GlassInfo> glassInfoMap = glassInfos.stream() .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p)); for (BigStorageCageFeedTask e : taskList) { GlassInfo info = glassInfoMap.get(e.getGlassId()); if (info == null) { @@ -359,26 +350,77 @@ } BigStorageCageDetails cageDetails = new BigStorageCageDetails(); BeanUtils.copyProperties(info, cageDetails); if (temperingLayoutIdTemp.equals(info.getTemperingLayoutId()) && temperingFeedSequenceTemp.equals(info.getTemperingFeedSequence() + 1) && info.getWidth() <= bigStorageDTO.getWidth()) { bigStorageDTO.setWidth(bigStorageDTO.getWidth() - info.getWidth().intValue() - Const.BIG_STORAGE_GAP); } else { bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info); } cageDetails.setSlot(bigStorageDTO.getSlot()); cageDetails.setState(Const.GLASS_STATE_IN); //2、获取目标格子信息 BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info); //3、更新大理片笼表剩余宽度 bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth()) .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot())); //4、更新进片任务表,目标格子及状态(状态改为2 电气扫到自行处理) 遇到问题:无法批量更新,批量更新无法走指定从库 e.setTargetSlot(bigStorageDTO.getSlot()); e.setTaskType(Const.BIG_STORAGE_IN_RUN); temperingLayoutIdTemp = info.getTemperingLayoutId(); temperingFeedSequenceTemp = info.getTemperingFeedSequence(); //3、更新进片任务表 遇到问题:无法批量更新,批量更新无法走指定从库 bigStorageCageFeedTaskService.updateById(e); bigStorageCageDetailsList.add(cageDetails); //5、将进片信息存入大理片笼详情表 cageDetails.setSlot(bigStorageDTO.getSlot()); cageDetails.setState(Const.GLASS_STATE_IN); bigStorageCageDetailsService.save(cageDetails); } return bigStorageCageDetailsList; 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)); } } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
File was deleted hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
File was deleted 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,9 +13,11 @@ * @author zhoush * @since 2024-03-27 */ public interface TemperingGlassInfoService extends IService<TemperingGlassInfo> { public interface TemperingGlassInfoService extends MPJBaseService<TemperingGlassInfo> { public void addOutTask(List<TemperingGlassInfo> temperingGlassInfoList); boolean saveBatch(List<TemperingGlassInfo> list); void schedulingTask(); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; @@ -11,7 +10,6 @@ import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper; import com.mes.bigstorage.mapper.BigStorageCageMapper; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.mapper.TemperingGlassInfoMapper; import com.mes.temperingglass.service.TemperingGlassInfoService; @@ -53,23 +51,28 @@ temperingGlassInfo.setState(-1); baseMapper.updateById(temperingGlassInfo); log.info("3、修改钢化小片表任务状态"); BigStorageCageOutTask bigStorageCageOutTask =new BigStorageCageOutTask(); BigStorageCageOutTask bigStorageCageOutTask = new BigStorageCageOutTask(); bigStorageCageOutTask.setId(temperingGlassInfo.getId()); }else{ } else { break; } } } @Override public boolean saveBatch(List<TemperingGlassInfo> list) { return baseMapper.saveBatch(list); } //调度 @Override public void schedulingTask(){ public void schedulingTask() { QueryWrapper<BigStorageCageDetails> detailsWrapper1 = Wrappers.query(); detailsWrapper1.select("tempering_layout_id", "count(distinct slot)") .groupBy("tempering_layout_id"); List<Map<String, Object>> temperingLayoutIdList = bigStorageCageDetailsMapper.selectMaps(detailsWrapper1); boolean key=false; boolean key = false; for (Map<String, Object> row : temperingLayoutIdList) { for (Map.Entry<String, Object> entry : row.entrySet()) { String temperingId = entry.getKey(); hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json
@@ -1,6 +1,6 @@ { "plcAddressBegin":"DB14.0", "plcAddressLenght":"72", "plcAddressLenght":"84", "dataType":"word", "parameteInfor":[ { @@ -74,43 +74,15 @@ "unit":"" }, { "codeId": "D02Go", "codeId": "D02SitState", "addressIndex":"80", "addressLenght":"2", "ratio":"1", "unit":"" }, { "codeId": "D05Go", "codeId": "D05SitState", "addressIndex":"82", "addressLenght":"2", "ratio":"1", "unit":"" }, { "codeId": "D02Route", "addressIndex":"84", "addressLenght":"2", "ratio":"1", "unit":"" }, { "codeId": "D05Route", "addressIndex":"86", "addressLenght":"2", "ratio":"1", "unit":"" }, { "codeId": "F02Route", "addressIndex":"88", "addressLenght":"2", "ratio":"1", "unit":"" }, { "codeId": "F07Route", "addressIndex":"890", "addressLenght":"2", "ratio":"1", "unit":"" hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -14,4 +14,7 @@ sequence: order: false minCount: 5 slotWidth: 5000 carWidth: 5000 #大车宽度 slotWidth: 5000 #大车宽度 carMaxSize: 6 #大车最大存放玻璃数量 galssGap: 20 #玻璃间距 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -19,30 +19,28 @@ </resultMap> <select id="temperingIsAll" resultMap="temperingLayoutDTO"> SELECT T.ENGINEER_ID, T.TEMPERING_LAYOUT_ID, COUNT(T.TEMPERING_FEED_SEQUENCE) AS COUNT FROM GLASS_INFO T LEFT JOIN DAMAGE T1 ON T.ENGINEER_ID = T1.ENGINEER_ID AND T.GLASS_ID = T1.GLASS_ID LEFT JOIN BIG_STORAGE_CAGE_DETAILS T2 ON T.ENGINEER_ID = T2.ENGINEER_ID AND T.GLASS_ID = T2.GLASS_ID WHERE T1.GLASS_ID IS NULL AND T2.GLASS_ID IS NULL AND ( T.ENGINEER_ID , T.TEMPERING_LAYOUT_ID ) IN ( SELECT DISTINCT ENGINEER_ID , TEMPERING_LAYOUT_ID FROM BIG_STORAGE_CAGE_DETAILS WHERE STATE = 100 ) GROUP BY T.ENGINEER_ID, T.TEMPERING_LAYOUT_ID HAVING COUNT = 0 ORDER BY T.TEMPERING_LAYOUT_ID LIMIT 1 SELECT T2.* FROM ( SELECT T.ENGINEER_ID, T.TEMPERING_LAYOUT_ID, COUNT(T.TEMPERING_FEED_SEQUENCE) AS COUNT FROM GLASS_INFO T LEFT JOIN DAMAGE T1 ON T.ENGINEER_ID = T1.ENGINEER_ID AND T.GLASS_ID = T1.GLASS_ID WHERE T1.GLASS_ID IS NULL GROUP BY T.ENGINEER_ID, T.TEMPERING_LAYOUT_ID ) T2 INNER JOIN (SELECT ENGINEER_ID, TEMPERING_LAYOUT_ID, COUNT(TEMPERING_FEED_SEQUENCE) AS COUNT FROM BIG_STORAGE_CAGE_DETAILS WHERE STATE = 100 GROUP BY ENGINEER_ID, TEMPERING_LAYOUT_ID) T3 ON T2.ENGINEER_ID = T3.ENGINEER_ID AND T2.TEMPERING_LAYOUT_ID = T3.TEMPERING_LAYOUT_ID AND T2.COUNT = T3.COUNT LIMIT 1 </select> <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO"> hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
@@ -2,7 +2,12 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper"> <select id="querySitToUpGlass" resultType="java.lang.String"> <resultMap id="bigStorageDTO" type="com.mes.bigstorage.entity.BigStorageDTO"> <result column="REMAIN_WIDTH" property="width"/> <result column="GLASS_COUNT" property="glassCount"/> </resultMap> <select id="querySitToUpGlass" resultType="java.lang.Integer"> select t.line from ( select line, @@ -10,9 +15,17 @@ SUM(case task_state when 2 then 1 else 0 end) as real_count from big_storage_cage_feed_task where task_state in (1, 2) and target_slot is null group by line ) t where t.total_count = t.real_count </select> <select id="querySitToUpRemainWidth" resultMap="bigStorageDTO"> SELECT cast(5000 - sum(width + 20) as INT) as REMAIN_WIDTH, count(glass_id) as GLASS_COUNT FROM big_storage_cage_feed_task WHERE line = #{line} AND task_state in (1, 2) </select> </mapper> hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml
New file @@ -0,0 +1,14 @@ <?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.bigstoragetask.mapper.BigStorageCageOutTaskMapper"> <insert id="saveBatch"> INSERT INTO big_storage_cage_out_task ( glass_id, start_slot, end_slot, train_number, serial_number, task_state ) values <foreach collection="list" item="item" separator=","> (#{item.glassId}, #{item.startSlot}, #{item.endSlot}, #{item.trainNumber}, #{item.serialNumber}, #{item.taskState}) </foreach> </insert> </mapper> hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
@@ -38,27 +38,39 @@ } @Test public void plcToHomeEdgOutTask() { plcStorageCageTask.plcToHomeEdgOutTask(); } @Test public void plcToHomeEdgFreeCarTask() { plcStorageCageTask.plcToHomeEdgFreeCarTask(); } @Test public void plcStorageCageTask() { 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()); } hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
@@ -19,7 +19,6 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** @@ -67,7 +66,7 @@ List<OptimizeUpPattenUsage> upPattenUsageList = null; if (engineeringId != null) { upPattenUsageList = optimizeProjectMapper.selectJoinList(OptimizeUpPattenUsage.class, new MPJQueryWrapper<OptimizeProject>() .select("t.project_no,t.glass_type,b.realwidth as width,b.realheight as height ,REGEXP_REPLACE(t.glass_thickness,'\\D','')as glass_thickness,b.stock_id") .select("t.project_no,t.glass_type,b.o_width as width,b.o_height as height ,REGEXP_REPLACE(t.glass_thickness,'\\D','')as glass_thickness,b.stock_id") .leftJoin("optimize_layout b on t.project_no=b.project_no") .eq("b.project_no", engineeringId)); }