hangzhoumesParent/common/servicebase/pom.xml
@@ -16,5 +16,12 @@ <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc4</artifactId> <version>4.0</version> </dependency> </dependencies> </project> hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -41,4 +41,13 @@ public static final Integer GLASS_CACHE_TYPE_IN = 1; public static final Integer GLASS_CACHE_TYPE_OUT = 2; /** * 磨边任务玻璃状态 * 进片任务1 * 出片任务2 */ public static final Integer EDG_GLASS_BEFORE = 0; public static final Integer EDG_GLASS_START = 1; public static final Integer EDG_GLASS_SUCCESS = 2; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/CacheGlassModuleApplication.java
@@ -23,9 +23,6 @@ public static void main(String[] args) { try { // SpringApplication springApplication = new SpringApplication(CacheGlassModuleApplication.class); // ConfigurableApplicationContext applicationContext = springApplication.run(args); // WebSocketServer.setApplicationContext(applicationContext); SpringApplication.run(CacheGlassModuleApplication.class, args); } catch (Exception e) { log.error(e.getMessage()); hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcHomeEdg.java
File was deleted hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/controller/EdgGlassTaskInfoController.java
New file @@ -0,0 +1,20 @@ package com.mes.edgglasstask.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * 前端控制器 * </p> * * @author wu * @since 2024-05-11 */ @RestController @RequestMapping("/edgGlassTaskInfo") public class EdgGlassTaskInfoController { } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
New file @@ -0,0 +1,37 @@ package com.mes.edgglasstask.entity; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; /** * <p> * * </p> * * @author wu * @since 2024-05-11 */ @Data @EqualsAndHashCode(callSuper = false) public class EdgGlassTaskInfo implements Serializable { private static final long serialVersionUID = 1L; private String glassId; private Integer width; private Integer height; private Integer thickness; private Integer glassType; private Integer status; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/mapper/EdgGlassTaskInfoMapper.java
New file @@ -0,0 +1,18 @@ package com.mes.edgglasstask.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; /** * <p> * Mapper 接口 * </p> * * @author wu * @since 2024-05-11 */ @DS("salve_hangzhoumes") public interface EdgGlassTaskInfoMapper extends BaseMapper<EdgGlassTaskInfo> { } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java
New file @@ -0,0 +1,16 @@ package com.mes.edgglasstask.service; import com.baomidou.mybatisplus.extension.service.IService; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; /** * <p> * 服务类 * </p> * * @author wu * @since 2024-05-11 */ public interface EdgGlassTaskInfoService extends IService<EdgGlassTaskInfo> { } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.mes.edgglasstask.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; import com.mes.edgglasstask.mapper.EdgGlassTaskInfoMapper; import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author wu * @since 2024-05-11 */ @Service public class EdgGlassTaskInfoServiceImpl extends ServiceImpl<EdgGlassTaskInfoMapper, EdgGlassTaskInfo> implements EdgGlassTaskInfoService { } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
@@ -20,7 +20,7 @@ /** * <p> * 服务实现类 * 服务实现类 * </p> * * @author zhoush @@ -37,44 +37,46 @@ @Override public EdgStorageCage selectNearestEmpty(int currentSlot) { return this.selectJoinOne(EdgStorageCage.class,new MPJLambdaWrapper<EdgStorageCage>() return this.selectJoinOne(EdgStorageCage.class, new MPJLambdaWrapper<EdgStorageCage>() .selectAll(EdgStorageCage.class) .leftJoin(EdgStorageCageDetails.class,on->on .eq(EdgStorageCageDetails::getSlot,EdgStorageCage::getSlot) .leftJoin(EdgStorageCageDetails.class, on -> on .eq(EdgStorageCageDetails::getSlot, EdgStorageCage::getSlot) .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)) .isNull(EdgStorageCageDetails::getSlot) .last("order by abs(slot - 4) asc limit 1") .last("order by abs(t.slot - " + currentSlot + ") asc limit 1") ); } /** * 查询笼内空格 * * @return */ @Override public List<EdgStorageCage> selectCacheEmpty(){ return baseMapper.selectJoinList(EdgStorageCage.class,new MPJLambdaWrapper<EdgStorageCage>() public List<EdgStorageCage> selectCacheEmpty() { return baseMapper.selectJoinList(EdgStorageCage.class, new MPJLambdaWrapper<EdgStorageCage>() .selectAll(EdgStorageCage.class) .leftJoin(EdgStorageCageDetails.class,on->on .eq(EdgStorageCageDetails::getSlot,EdgStorageCage::getSlot) .eq(EdgStorageCageDetails::getState,"100")) .leftJoin(EdgStorageCageDetails.class, on -> on .eq(EdgStorageCageDetails::getSlot, EdgStorageCage::getSlot) .eq(EdgStorageCageDetails::getState, "100")) .isNull(EdgStorageCageDetails::getSlot) .last("order by abs(slot - 4) asc") .last("order by abs(t.slot - 4) asc") ); } /** * 查询笼内出片任务 按钢化版图号+版图内序号 * * @return */ @Override public List<Map<String, Object>> selectCacheOut(){ public List<Map<String, Object>> selectCacheOut() { return upPattenUsageMapper.selectJoinMaps(JoinWrappers.lambda(UpPattenUsage.class).selectAll(UpPattenUsage.class) .select(EdgStorageCageDetails::getWidth, EdgStorageCageDetails::getHeight,EdgStorageCageDetails::getGlassId) .leftJoin(EdgStorageCageDetails.class,on->on .eq(EdgStorageCageDetails::getDeviceId,EdgStorageCage::getDeviceId) .eq(EdgStorageCageDetails::getSlot,EdgStorageCage::getSlot)) .select(EdgStorageCageDetails::getWidth, EdgStorageCageDetails::getHeight, EdgStorageCageDetails::getGlassId) .leftJoin(EdgStorageCageDetails.class, on -> on .eq(EdgStorageCageDetails::getDeviceId, EdgStorageCage::getDeviceId) .eq(EdgStorageCageDetails::getSlot, EdgStorageCage::getSlot)) .isNull(EdgStorageCageDetails::getSlot) ); // return upPattenUsageMapper.selectJoinMaps(new MPJQueryWrapper<UpPattenUsage>().selectAll(UpPattenUsage.class) @@ -87,17 +89,18 @@ /** * 理片缓存详情 * * @return */ @Override public List<Map<String, Object>> selectEdgStorageCages(){ public List<Map<String, Object>> selectEdgStorageCages() { return baseMapper.selectJoinMaps(JoinWrappers.lambda(EdgStorageCage.class) .selectAll(EdgStorageCage.class) .selectAs(EdgStorageCageDetails::getId,"esdId") .select(EdgStorageCageDetails::getGlassId,EdgStorageCageDetails::getWidth,EdgStorageCageDetails::getHeight,EdgStorageCageDetails::getId) .leftJoin(EdgStorageCageDetails.class,on->on .eq(EdgStorageCageDetails::getDeviceId,EdgStorageCage::getDeviceId) .eq(EdgStorageCageDetails::getSlot,EdgStorageCage::getSlot)) .selectAs(EdgStorageCageDetails::getId, "esdId") .select(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails::getWidth, EdgStorageCageDetails::getHeight, EdgStorageCageDetails::getId) .leftJoin(EdgStorageCageDetails.class, on -> on .eq(EdgStorageCageDetails::getDeviceId, EdgStorageCage::getDeviceId) .eq(EdgStorageCageDetails::getSlot, EdgStorageCage::getSlot)) ); // return baseMapper.selectJoinMaps(new MPJQueryWrapper<EdgStorageCage>().selectAll(EdgStorageCage.class) // .select("escd.glass_id","escd.flow_card_id","escd.width","escd.height") @@ -107,39 +110,41 @@ /** * 修改理片笼信息 功能:对笼内栅格玻璃 【启用/禁用】 * * @param edgStorageCage * @return */ @Override public boolean updateEdgStorageCage(EdgStorageCage edgStorageCage){ EdgStorageCage edgItem=baseMapper.selectById(edgStorageCage.getId()); public boolean updateEdgStorageCage(EdgStorageCage edgStorageCage) { EdgStorageCage edgItem = baseMapper.selectById(edgStorageCage.getId()); edgItem.setEnableState(edgStorageCage.getEnableState()); baseMapper.updateById(edgItem); return true; } /** *修改理片笼信息 功能:对笼内栅格玻璃 【添加/删除/更换】 * 修改理片笼信息 功能:对笼内栅格玻璃 【添加/删除/更换】 * * @param edgStorageCageId * @param edgStorageCageDetails * @return */ @Override public boolean updateEdgStorageCageDetails(int edgStorageCageId,EdgStorageCageDetails edgStorageCageDetails){ EdgStorageCage edgItem=baseMapper.selectById(edgStorageCageId); log.info("正常"+edgItem); EdgStorageCageDetails edgDItem=edgStorageCageDetailsMapper.selectById(edgStorageCageDetails.getId()); if (edgItem!=null){ public boolean updateEdgStorageCageDetails(int edgStorageCageId, EdgStorageCageDetails edgStorageCageDetails) { EdgStorageCage edgItem = baseMapper.selectById(edgStorageCageId); log.info("正常" + edgItem); EdgStorageCageDetails edgDItem = edgStorageCageDetailsMapper.selectById(edgStorageCageDetails.getId()); if (edgItem != null) { //移除 EdgStorageCageDetails result=edgStorageCageDetailsMapper.selectOne(new MPJLambdaWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot,edgStorageCageId)); if (result!=null){ EdgStorageCageDetails result = edgStorageCageDetailsMapper.selectOne(new MPJLambdaWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, edgStorageCageId)); if (result != null) { result.setSlot(0); edgStorageCageDetailsMapper.updateById(result); } //添加 if(edgDItem!=null){ if (edgDItem != null) { //只传格子 :移除玻璃 EdgStorageCageDetails newresult=edgStorageCageDetailsMapper.selectById(edgStorageCageDetails.getId()); EdgStorageCageDetails newresult = edgStorageCageDetailsMapper.selectById(edgStorageCageDetails.getId()); newresult.setSlot(edgItem.getSlot()); edgStorageCageDetailsMapper.updateById(newresult); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -9,6 +9,8 @@ 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.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; @@ -18,6 +20,7 @@ import com.mes.taskcache.entity.TaskCache; import com.mes.taskcache.service.TaskCacheService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -46,8 +49,14 @@ @Autowired EdgStorageCageDetailsService edgStorageCageDetailsService; @Autowired EdgGlassTaskInfoService edgGlassTaskInfoService; @Value("${mes.threshold}") private int threshold; @Value("${mes.ratio}") private int ratio; @Scheduled(fixedDelay = 1000) public void plcHomeEdgTask() { @@ -55,12 +64,23 @@ String taskRequestTypeValue = plcParameterObject.getPlcParameter("A06_request_word").getValue(); String glassIdeValue = plcParameterObject.getPlcParameter("A05_scanning_ID").getValue(); String confirmationWrodValue = plcParameterObject.getPlcParameter("MES_confirmation_word").getValue(); //A08 A09表示线路相同 可做等价 //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、获取到的请求字为:{},获取到的扫描ID为:{},获取到的确认字为:{},获取到的出片状态分别为:A09{}、A10{},当前格子号为:{}", // String taskRequestTypeValue = "2"; // String glassIdeValue = "2222222222"; // String confirmationWrodValue = "0"; // //A08 A09表示线路相同 可做等价 // Integer out08Glassstate = 1; // Integer out10Glassstate = 0; // String confirmationWrodAddress = "DB11.38"; // String currentSlot = "1"; log.info("1、获取到的请求字为:{},获取到的扫描ID为:{},获取到的确认字为:{},获取到的出片状态分别为:A09:{}、A10:{},当前格子号为:{}", taskRequestTypeValue, glassIdeValue, confirmationWrodValue, out08Glassstate, out10Glassstate, currentSlot); if ("0".equals(taskRequestTypeValue)) { @@ -77,22 +97,27 @@ S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 0); return; } if ("1".equals(taskRequestTypeValue)) { log.info("3、进片请求,且确认字为0,执行进片任务"); log.info("2、进片请求,且确认字为0,执行进片任务"); inTo(glassIdeValue, confirmationWrodAddress, currentSlot); } else if ("2".equals(taskRequestTypeValue)) { //09空闲 :1 10空闲 :2 都空闲:3 其他0 log.info("3、出片请求,且确认字为0,执行进片任务"); outTo(Integer.parseInt(out08Glassstate), confirmationWrodAddress); log.info("2、出片请求,且确认字为0,执行进片任务"); outTo(Integer.parseInt(out08Glassstate), Integer.parseInt(out10Glassstate), confirmationWrodAddress); } else if ("3".equals(taskRequestTypeValue)) { log.info("3、进片和出片都空闲,执行出片任务"); log.info("2、进片和出片都空闲,执行出片任务"); //加笼子里面是否有玻璃,有先出,无玻璃先进 int count = edgStorageCageDetailsService.count(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)); if ("0".equals(out08Glassstate) || count > 0) { if ("0".equals(out08Glassstate) && "0".equals(out10Glassstate) && count < 9) { inTo(glassIdeValue, confirmationWrodAddress, currentSlot); } else { outTo(Integer.parseInt(out08Glassstate), confirmationWrodAddress); boolean outFlase = outTo(Integer.parseInt(out08Glassstate), Integer.parseInt(out10Glassstate), confirmationWrodAddress); log.info("出片任务是否完成:{},失败且玻璃id:{}不为空则执行进片任务", outFlase, glassIdeValue); if (!outFlase && StringUtils.isNotBlank(glassIdeValue)) { inTo(glassIdeValue, confirmationWrodAddress, currentSlot); } } } } @@ -114,7 +139,7 @@ log.info("2、获取到的玻璃信息为{}", glassInfo); //添加进片任务 查找空格 EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(Integer.parseInt(currentSlot)); Assert.isTrue(nearestEmpty == null, "格子已满"); Assert.isTrue(null != nearestEmpty, "格子已满"); log.info("3、查询卧式理片笼里面的空格:{}", nearestEmpty); log.info("4、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo); @@ -125,17 +150,9 @@ details.setDeviceId(nearestEmpty.getDeviceId()); edgStorageCageDetailsService.save(details); log.info("5、玻璃信息已存入理片笼详情表,玻璃信息为{}", details); //添加进片任务 TaskCache taskCache = new TaskCache(); taskCache.setGlassId(glassId); taskCache.setTaskStatus(0); taskCache.setStartCell(0); taskCache.setEndCell(nearestEmpty.getSlot()); taskCache.setTaskType(1); taskCache.setCreateTime(new Date()); taskCacheService.insertTaskCache(taskCache); log.info("6、生成进片任务信息存入任务表{}", taskCache); boolean taskCache = saveTaskCache(details.getGlassId(), 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN); log.info("6、生成进片任务信息存入任务表是否完成:{}", taskCache); S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 1); log.info("7、发送确认字完成"); @@ -146,10 +163,11 @@ /** * 出片任务 * * @param line * @param out08Glassstate * @param out10Glassstate * @param confirmationWrodAddress */ private void outTo(int line, String confirmationWrodAddress) { private boolean outTo(int out08Glassstate, int out10Glassstate, String confirmationWrodAddress) { //逻辑步骤: // 0、A09、A10是否空闲,是否可以执行出片任务 // 1、获取钢化版图是否超过阈值 @@ -163,11 +181,11 @@ // 1.2.3、按照出片信息去详情表查询格子在笼子里面剩余相同尺寸的玻璃数据且以版图id、版序升序排序 取第一块玻璃出片 // 2、如果没有历史出片任务 // 2.1、出当前版图id最小版序最小的玻璃(问题:两条线都没有历史任务,出片时两条线的玻璃尺寸相同,是否找尺寸不同的) Assert.isTrue(line != 0, "A09、A10都有玻璃,无法出片"); log.info("0、出片任务出【{}】号线,备注(09空闲:1;10空闲:2;都空闲:3)", line); Assert.isFalse(out08Glassstate == 0 && out10Glassstate == 0, "A09、A10都有玻璃,无法出片"); log.info("0、出片任务出的状态:A09:【{}】;A10:【{}】)", out08Glassstate, out10Glassstate); //定义出片玻璃信息 EdgStorageCageDetails glassInfo = null; int endcell = 0; EdgStorageCageDetails glassInfo = null; boolean flag = queryMaxMinDiff(threshold); log.info("1、获取钢化版图是否超过阈值:{}", flag); if (flag) { @@ -176,41 +194,46 @@ Integer a09Count = queryCountByTaskLine(Const.A09_OUT_TARGET_POSITION).size(); Integer a10Count = queryCountByTaskLine(Const.A10_OUT_TARGET_POSITION).size(); log.info("1.2、获取笼子剩余数量A09为{},A10为{}", a09Count, a10Count); if (a10Count <= a09Count && line != 2) { log.info("1.2.1、A09线出片"); endcell = Const.A09_OUT_TARGET_POSITION; } else { log.info("1.2.2、A10线出片"); endcell = Const.A09_OUT_TARGET_POSITION; } // 假设已知 outXXGlassstate 的值只有 0 和 1 两种情况,且 0 表示某种状态,1 表示另一种状态 int targetPositionWhenStateZero = (out08Glassstate == 0) ? Const.A10_OUT_TARGET_POSITION : Const.A09_OUT_TARGET_POSITION; int targetPositionWhenStateOne = (out10Glassstate == 0) ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION; endcell = (a10Count <= a09Count) ? targetPositionWhenStateZero : targetPositionWhenStateOne; } else { //获取指定线路将要出的玻璃信息 endcell = line == 2 ? Const.A10_OUT_TARGET_POSITION : Const.A09_OUT_TARGET_POSITION; //当前任务出完无玻璃 更换玻璃 //当前任务出完无玻璃 更换玻璃 获取另一条线路 endcell = out08Glassstate == 1 ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION; int othercell = endcell == Const.A10_OUT_TARGET_POSITION ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION; List<EdgStorageCageDetails> details = queryCountByTaskLine(endcell); if (details.size() > 0) { glassInfo = details.get(0); } else { //todo:去理片笼里面查 //去理片笼里面查 glassInfo = queryChangeGlassInfo(othercell); } } if (glassInfo != null) { log.info("4、添加出片任务,玻璃id:{},任务类型:{},起始位置:{},结束位置:{}", glassInfo.getGlassId(), 2, glassInfo.getSlot(), endcell); TaskCache taskCache = new TaskCache(); taskCache.setGlassId(glassInfo.getGlassId()); taskCache.setTaskStatus(0); taskCache.setStartCell(glassInfo.getSlot()); taskCache.setEndCell(endcell); taskCache.setTaskType(2); taskCache.setCreateTime(new Date()); taskCacheService.insertTaskCache(taskCache); LambdaQueryWrapper<EdgStorageCageDetails> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(EdgStorageCageDetails::getGlassId, glassInfo.getGlassId()); EdgStorageCageDetails updateDetail = new EdgStorageCageDetails(); updateDetail.setState(Const.GLASS_STATE_OUT); edgStorageCageDetailsService.update(updateDetail, wrapper); log.info("5、更新出片玻璃的状态为{}", Const.GLASS_STATE_OUT); boolean taskCacheStatus = saveTaskCache(glassInfo.getGlassId(), glassInfo.getSlot(), endcell, Const.GLASS_CACHE_TYPE_OUT); log.info("6、添加出片任务是否完成:{}", taskCacheStatus); boolean glassSizeStatus = saveGlassSize(glassInfo); log.info("7、添加出片玻璃尺寸信息到磨边前玻璃表是否完成:{}", glassSizeStatus); S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 1); log.info("8、发送确认字已完成"); return Boolean.TRUE; } return Boolean.FALSE; } /** @@ -219,12 +242,18 @@ * @return */ private boolean queryMaxMinDiff(int threshold) { //todo:获取笼子内最大版图id和最小版图id插值,判断是否大于阈值,大于阈值直接出最小版图玻璃 //获取笼子内最大版图id和最小版图id插值,判断是否大于阈值,大于阈值直接出最小版图玻璃 QueryWrapper<EdgStorageCageDetails> queryWrapper = new QueryWrapper<>(); queryWrapper.select("max(tempering_layout_id)-min(tempering_layout_id) as diff") .eq("state", Const.GLASS_STATE_IN); Integer diff = (Integer) edgStorageCageDetailsService.listObjs(queryWrapper).get(0); return diff > threshold; List<Object> list = edgStorageCageDetailsService.listObjs(queryWrapper); if (CollectionUtil.isNotEmpty(list)) { Long diff = (Long) list.get(0); return diff > threshold; } else { return Boolean.FALSE; } } /** @@ -255,7 +284,7 @@ } TaskCache taskCache = taskCacheList.get(0); MPJQueryWrapper<EdgStorageCageDetails> mpjLambdaWrapper = new MPJQueryWrapper<>(); mpjLambdaWrapper.select("a.*") mpjLambdaWrapper.select("t1.*") .innerJoin("edg_storage_cage_details t1 on t.width = t1.width and t.height = t1.height") .eq("t.glass_id", taskCache.getGlassId()) .ne("t1.glass_id", taskCache.getGlassId()) @@ -277,18 +306,25 @@ //获取笼子内数量前二的玻璃数量 MPJLambdaWrapper<EdgStorageCageDetails> wrapper = new MPJLambdaWrapper<>(); wrapper.select(EdgStorageCageDetails::getWidth, EdgStorageCageDetails::getHeight) .selectCount("*", EdgStorageCageDetails::getCount) .selectCount(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails::getCount) .groupBy(EdgStorageCageDetails::getWidth, EdgStorageCageDetails::getHeight) .last("order by count(*) desc limit 2"); .last("order by count(t.glass_id) desc limit 2"); List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper); log.info("获取笼子内数量前二的玻璃数量:{}", list); Assert.notEmpty(list, "笼子里没有玻璃"); //一片玻璃直接出 if (list.size() == 1) { return list.get(0); if (CollectionUtil.isEmpty(list)) { log.info("笼子里没有玻璃"); return null; } //分别获取宽高的玻璃数量 //一片玻璃直接出 //获取宽高拍第一的玻璃信息 EdgStorageCageDetails firstSize = list.get(0); Integer firstCount = firstSize.getCount(); Double firstWidth = firstSize.getWidth(); Double firstHeight = firstSize.getHeight(); if (list.size() == 1) { return queryMinGlass(firstWidth, firstHeight); } //获取宽高拍第二的玻璃信息 EdgStorageCageDetails secondSize = list.get(1); //获取任务表中最后一次出片的玻璃id LambdaQueryWrapper<TaskCache> queryWrapper = new LambdaQueryWrapper<TaskCache>().eq(TaskCache::getTaskType, Const.GLASS_CACHE_TYPE_OUT) @@ -299,9 +335,7 @@ log.info("{}线没有出片任务信息,直接出片", othercell); return queryMinGlass(firstSize.getWidth(), firstSize.getHeight()); } Integer firstCount = firstSize.getCount(); Double firstWidth = firstSize.getWidth(); Double firstHeight = firstSize.getHeight(); Integer secondCount = secondSize.getCount(); Double secondWidth = secondSize.getWidth(); Double secondHeight = secondSize.getHeight(); @@ -328,4 +362,42 @@ } } } /** * 添加理片笼任务 * * @param glassId * @param startcell * @param endcell * @param taskType * @return */ private boolean saveTaskCache(String glassId, int startcell, int endcell, int taskType) { TaskCache taskCache = new TaskCache(); taskCache.setGlassId(glassId); taskCache.setTaskStatus(0); taskCache.setStartCell(startcell); taskCache.setEndCell(endcell); taskCache.setTaskType(taskType); taskCache.setCreateTime(new Date()); return taskCacheService.save(taskCache); } /** * 添加理片笼任务 * * @param glassInfo * @return */ private boolean saveGlassSize(EdgStorageCageDetails glassInfo) { EdgGlassTaskInfo edgGlassTaskInfo = new EdgGlassTaskInfo(); BeanUtils.copyProperties(glassInfo, edgGlassTaskInfo); edgGlassTaskInfo.setHeight((int) (glassInfo.getEdgHeight() * ratio)); edgGlassTaskInfo.setWidth((int) (glassInfo.getWidth() * ratio)); edgGlassTaskInfo.setThickness((int) (glassInfo.getThickness() * ratio)); edgGlassTaskInfo.setStatus(Const.EDG_GLASS_BEFORE); return edgGlassTaskInfoService.save(edgGlassTaskInfo); } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
@@ -16,13 +16,6 @@ public interface TaskCacheService extends IService<TaskCache> { /** * 添加理片笼任务 * @param taskCache * @return */ boolean insertTaskCache(TaskCache taskCache); /** * 查询磨边任务 * @param line * @return hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
@@ -11,7 +11,7 @@ /** * <p> * 服务实现类 * 服务实现类 * </p> * * @author zhoush @@ -20,41 +20,32 @@ @Service public class TaskCacheServiceImpl extends ServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService { /** * 添加理片笼任务 * @param taskCache * @return */ @Override public boolean insertTaskCache(TaskCache taskCache){ baseMapper.insert(taskCache); return true; } /** * 查询磨边任务 * * @param line * @return */ @Override public List<TaskCache> selectEdgInfo(String line) { return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell,line)); return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell, line)); // return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("end_cell",line)); } /** * 查询待理片工作的任务 * * @return */ @Override public List<TaskCache> selectCacheInfo(){ return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus,0)); public List<TaskCache> selectCacheInfo() { return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus, 0)); // return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("task_status",0)); } /** * 查询全部任务 * * @return */ @Override @@ -64,44 +55,48 @@ /** * 查询待进片任务 * * @return */ @Override public List<TaskCache> selectInputTaskCache(){ return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus,0).eq(TaskCache::getTaskType,1)); public List<TaskCache> selectInputTaskCache() { return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus, 0).eq(TaskCache::getTaskType, 1)); // return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("task_status",0).eq("task_type",1)); } /** * 查询待出片任务 * * @return */ @Override public List<TaskCache> selectOutTaskCache(){ return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus,0).eq(TaskCache::getTaskType,2)); public List<TaskCache> selectOutTaskCache() { return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus, 0).eq(TaskCache::getTaskType, 2)); // return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("task_status",0).eq("task_type",2)); } /** * 查询 A09 或 A10 最新的一片 出片任务 * * @param line * @return */ @Override public List<TaskCache> selectLastOutCacheInfos(int line){ return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell,line).eq(TaskCache::getTaskStatus,1).orderByDesc(TaskCache::getCreateTime)); public List<TaskCache> selectLastOutCacheInfos(int line) { return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell, line).eq(TaskCache::getTaskStatus, 1).orderByDesc(TaskCache::getCreateTime)); // return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("end_cell",line).eq("task_status",1).orderByDesc("ID")); } /** * 查询 A09 或 A10 最新的一片 出片任务 * * @param line * @return */ @Override public TaskCache selectLastOutCacheInfo(String line){ return baseMapper.selectOne(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell,line).eq(TaskCache::getTaskStatus,1).orderByDesc(TaskCache::getCreateTime)); public TaskCache selectLastOutCacheInfo(String line) { return baseMapper.selectOne(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell, line).eq(TaskCache::getTaskStatus, 1).orderByDesc(TaskCache::getCreateTime)); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -1,14 +1,15 @@ server: port: 8085 port: 8081 spring: profiles: active: dev application: name: unLoadGlass name: cacheGlass mybatis-plus: mapper-locations: classpath*:mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mes: threshold: 3 ratio: 10