Merge branch 'master' of http://10.153.19.25:10105/r/HangZhouMes
| | |
| | | undesignate:'Undesignate', |
| | | allnumber:'Total quantity', |
| | | numbercages:'Number of cages', |
| | | numberslots:'Number of slots', |
| | | missingquantity:'Missing quantity', |
| | | breakquantity:'Breakage/Take Away quantity', |
| | | ceng:'layer', |
| | |
| | | undesignate:'取消指定', |
| | | allnumber:'总数量', |
| | | numbercages:'笼子内数量', |
| | | numberslots:'所占格子', |
| | | missingquantity:'缺少数量', |
| | | breakquantity:'破损/拿走数量', |
| | | ceng:'层', |
| | |
| | | <el-table-column prop="tempering_layout_id" fixed align="center" :label="$t('searchOrder.layoutnumber')" min-width="120" /> |
| | | <el-table-column prop="count2" align="center" :label="$t('searchOrder.allnumber')" min-width="150" /> |
| | | <el-table-column prop="count1" align="center" :label="$t('searchOrder.numbercages')" min-width="150" /> |
| | | <el-table-column prop="slots" align="center" :label="$t('searchOrder.numberslots')" min-width="150" /> |
| | | <el-table-column prop="count3" align="center" :label="$t('searchOrder.missingquantity')" min-width="150" /> |
| | | <el-table-column prop="count4" align="center" :label="$t('searchOrder.breakquantity')" min-width="150" /> |
| | | <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="250"> |
| | |
| | | import request from "@/utils/request"; |
| | | import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; |
| | | import {host, WebSocketHost} from '@/utils/constants' |
| | | import PrintFlow from "@/views/UnLoadGlass/PrintFlow.vue"; |
| | | import Landingindication from "./Landingindication.vue"; |
| | | import Landingindicationtwo from "./Landingindicationtwo.vue"; |
| | | import PrintLabel from "@/views/UnLoadGlass/PrintCustomLabelSemi1.vue"; |
| | | |
| | | const router = useRouter() |
| | | const {t} = useI18n() |
| | |
| | | @ApiModelProperty(value = "剩余宽度", position = 8) |
| | | private Integer remainWidth; |
| | | |
| | | /** |
| | | * 格子高度 |
| | | */ |
| | | @ApiModelProperty(value = "格子高度", position = 9) |
| | | private Integer slotHeight; |
| | | |
| | | @ApiModelProperty(hidden = true) |
| | | @TableField(exist = false) |
| | | private List<BigStorageCageDetails> bigStorageCageDetails; |
| | |
| | | */ |
| | | public interface BigStorageCageMapper extends MPJBaseMapper<BigStorageCage> { |
| | | |
| | | List<Integer> queryFreeDeviceByUsed(@Param(value = "thickness") double thickness); |
| | | List<Integer> queryFreeDeviceByUsed(@Param(value = "thickness") double thickness, @Param(value = "slotHeight") double slotHeight); |
| | | // |
| | | // List<Integer> queryFreeDeviceByNotUsed(@Param(value = "thickness") double thickness); |
| | | } |
| | |
| | | |
| | | void updateStorageCageDisabled(int slot, int enableState); |
| | | |
| | | List<Integer> queryFreeDeviceByUsed(double thickness); |
| | | List<Integer> queryFreeDeviceByUsed(double thickness,double slotHeight); |
| | | |
| | | // List<Integer> queryFreeDeviceByNotUsed(double thickness); |
| | | } |
| | |
| | | outWrapper.in(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING, Const.GLASS_STATE_SCHEDULE_ING); |
| | | List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(outWrapper); |
| | | LambdaQueryWrapper<BigStorageCageOutTask> outTaskWrapper = new LambdaQueryWrapper<>(); |
| | | outTaskWrapper.lt(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS); |
| | | outTaskWrapper.lt(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS) |
| | | .orderByAsc(BigStorageCageOutTask::getId); |
| | | List<BigStorageCageOutTask> bigStorageCageOutTaskList = bigStorageCageOutTaskMapper.selectList(outTaskWrapper); |
| | | |
| | | Map<String, BigStorageCageOutTask> listMap = bigStorageCageOutTaskList.stream() |
| | |
| | | .eq(BigStorageCageDetails::getEngineerId, glassInfo.getEngineerId()) |
| | | .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId()) |
| | | .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())) |
| | | .lt(BigStorageCage::getSlotHeight, Math.min(glassInfo.getWidth(), glassInfo.getHeight())) |
| | | .in(BigStorageCageDetails::getGlassId, glassIds) |
| | | .last("limit 1"); |
| | | if (glassInfo.getTemperingLayoutId() == 0) { |
| | |
| | | bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getEnableState, Const.SLOT_ON) |
| | | .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | | .lt(BigStorageCage::getSlotHeight, Math.min(glassInfo.getWidth(), glassInfo.getHeight())) |
| | | // .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0") |
| | | .inSql(BigStorageCage::getDeviceId, |
| | | "select distinct device_id from big_storage_cage_details where engineer_id = '" + glassInfo.getEngineerId() + "' and tempering_layout_id = " + glassInfo.getTemperingLayoutId()) |
| | | "select distinct device_id from big_storage_cage_details where state!=101 and engineer_id = '" + glassInfo.getEngineerId() + "' and tempering_layout_id = " + glassInfo.getTemperingLayoutId()) |
| | | .last("limit 1")); |
| | | if (null != bigStorageCage) { |
| | | log.info("根据版图id找到笼子内的目标格子:{},玻璃id:{}", bigStorageCage.getSlot(), glassInfo.getGlassId()); |
| | |
| | | } |
| | | |
| | | //获取玻璃的厚度:重新选笼子需要按照笼子可放玻璃厚度进行选择 因为子查询排序对主sql无影响,所以先执行子查询获取顺序,然后一次去查询 |
| | | List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness()); |
| | | List<Integer> deviceUseds = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness()); |
| | | List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness(),Math.min(glassInfo.getWidth(),glassInfo.getHeight())); |
| | | List<Integer> deviceUseds = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness(),Math.min(glassInfo.getWidth(),glassInfo.getHeight())); |
| | | List<BigStorageCageDetails> engineerCount1 = baseMapper.selectList( |
| | | new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE) |
| | |
| | | if (CollectionUtils.isEmpty(deviceUsedList)) { |
| | | deviceUsedList = deviceUseds; |
| | | } |
| | | |
| | | for (Integer item : deviceUsedList) { |
| | | bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | |
| | | } |
| | | long startSlotCount = bigStorageCageOutTasks.stream().map(BigStorageCageOutTask::getStartSlot).distinct().count(); |
| | | long endSlotCount = bigStorageCageOutTasks.stream().map(BigStorageCageOutTask::getEndSlot).distinct().count(); |
| | | long time = (startSlotCount * 10 + endSlotCount * 20) / 60; |
| | | long time = (startSlotCount * 20 + endSlotCount * 20) / 60; |
| | | return time; |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<Integer> queryFreeDeviceByUsed(double thickness) { |
| | | return baseMapper.queryFreeDeviceByUsed(thickness); |
| | | public List<Integer> queryFreeDeviceByUsed(double thickness, double slotHeight) { |
| | | return baseMapper.queryFreeDeviceByUsed(thickness, slotHeight); |
| | | } |
| | | |
| | | // @Override |
| | |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence) |
| | | ); |
| | | //当一格玻璃都到齐时 |
| | | if (bigStorageCageDetailsList.size() == valueList.size()) { |
| | | long distinctSlotCount = bigStorageCageDetailsList.stream() |
| | | .map(BigStorageCageDetails::getSlot) |
| | | .distinct() |
| | | .count(); |
| | | //当玻璃不在同一格时 |
| | | if (distinctSlotCount > 1) { |
| | | BigStorageCageDetails maxSequenceDetail = bigStorageCageDetailsList.stream() |
| | | .max(Comparator.comparingInt(BigStorageCageDetails::getTemperingFeedSequence)) |
| | | .orElse(null); // 如果没有元素,返回 null |
| | | int maxSlot = maxSequenceDetail.getSlot(); |
| | | int serialNumber = 1; |
| | | for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList |
| | | ) { |
| | | if (bigStorageCageDetails.getSlot() != maxSlot) { |
| | | bigStorageCageOutTaskService.save(new BigStorageCageOutTask(bigStorageCageDetails.getGlassId(), bigStorageCageDetails.getSlot(), maxSlot, |
| | | bigStorageCageDetails.getWidth() * 10, bigStorageCageDetails.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW, new Date())); |
| | | List<BigStorageCageDetails> overSizeGlass = bigStorageCageDetailsList.stream().filter( |
| | | t -> Math.min(t.getWidth(), t.getHeight()) > 2500 |
| | | ).collect(Collectors.toList()); |
| | | if(CollectionUtils.isEmpty(overSizeGlass)){ |
| | | //当一格玻璃都到齐时 |
| | | if (bigStorageCageDetailsList.size() == valueList.size()) { |
| | | long distinctSlotCount = bigStorageCageDetailsList.stream() |
| | | .map(BigStorageCageDetails::getSlot) |
| | | .distinct() |
| | | .count(); |
| | | //当玻璃不在同一格时 |
| | | if (distinctSlotCount > 1) { |
| | | BigStorageCageDetails maxSequenceDetail = bigStorageCageDetailsList.stream() |
| | | .max(Comparator.comparingInt(BigStorageCageDetails::getTemperingFeedSequence)) |
| | | .orElse(null); // 如果没有元素,返回 null |
| | | int maxSlot = maxSequenceDetail.getSlot(); |
| | | int serialNumber = 1; |
| | | for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList |
| | | ) { |
| | | if (bigStorageCageDetails.getSlot() != maxSlot) { |
| | | bigStorageCageOutTaskService.save(new BigStorageCageOutTask(bigStorageCageDetails.getGlassId(), bigStorageCageDetails.getSlot(), maxSlot, |
| | | bigStorageCageDetails.getWidth() * 10, bigStorageCageDetails.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW, new Date())); |
| | | |
| | | bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>().set(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING) |
| | | .set(BigStorageCageBaseInfo::getSlot, maxSlot).eq(BigStorageCageDetails::getGlassId, bigStorageCageDetails.getGlassId()) |
| | | .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT)); |
| | | //两次更新笼子的剩余尺寸:第一次防止有玻璃继续进调度后的笼子,第二次更新:计算格子的实际尺寸 |
| | | // 仅更新调度后的格子信息:起始格子完成后更新:防止调度出片过程中有新玻璃进入, |
| | | bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>().set(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING) |
| | | .set(BigStorageCageBaseInfo::getSlot, maxSlot).eq(BigStorageCageDetails::getGlassId, bigStorageCageDetails.getGlassId()) |
| | | .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT)); |
| | | //两次更新笼子的剩余尺寸:第一次防止有玻璃继续进调度后的笼子,第二次更新:计算格子的实际尺寸 |
| | | // 仅更新调度后的格子信息:起始格子完成后更新:防止调度出片过程中有新玻璃进入, |
| | | } |
| | | } |
| | | break loop; |
| | | } |
| | | break loop; |
| | | } |
| | | } |
| | | } |
| | |
| | | damageService.deleteByGlassId(glassId); |
| | | Damage damage = new Damage(); |
| | | damage.setGlassId(glassId); |
| | | damage.setWorkingProcedure("钢化"); |
| | | damage.setWorkingProcedure("磨边"); |
| | | damage.setLine(line); |
| | | damage.setType(1); |
| | | damage.setRemark("进大理片"); |
| | |
| | | if (sitToUpRemainWidth.getGlassCount() == 0) { |
| | | return Boolean.FALSE; |
| | | } |
| | | List<Integer> lineList = bigStorageCageFeedTaskService.querySitToUpGlass(); |
| | | if (CollectionUtils.isNotEmpty(lineList)) { |
| | | Integer lineFirst = lineList.get(0); |
| | | if (line == lineFirst) { |
| | | return Boolean.TRUE; |
| | | } else { |
| | | return Boolean.FALSE; |
| | | } |
| | | } else { |
| | | return Boolean.FALSE; |
| | | } |
| | | |
| | | //获取玻璃信息 |
| | | GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); |
| | | return sitToUpRemainWidth.getWidth() < Math.max(glassInfo.getWidth(), glassInfo.getHeight()); |
| | | // GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); |
| | | // return sitToUpRemainWidth.getWidth() < Math.max(glassInfo.getWidth(), glassInfo.getHeight()); |
| | | } |
| | | |
| | | public String queryAndChangeGlass(String glassId) { |
| | |
| | | } |
| | | |
| | | //获取玻璃的厚度:重新选笼子需要按照笼子可放玻璃厚度进行选择 因为子查询排序对主sql无影响,所以先执行子查询获取顺序,然后一次去查询 |
| | | List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(thickness); |
| | | List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(thickness,5000); |
| | | for (Integer item : deviceUsedList) { |
| | | bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | |
| | | } |
| | | |
| | | //获取玻璃的厚度:重新选笼子需要按照笼子可放玻璃厚度进行选择 因为子查询排序对主sql无影响,所以先执行子查询获取顺序,然后一次去查询 |
| | | List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(thickness); |
| | | List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(thickness,5000); |
| | | for (Integer item : deviceUsedList) { |
| | | bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getRemainWidth, slotWidth) |
| | |
| | | </update> |
| | | |
| | | <select id="selectTemperingGlassCount" resultType="java.util.Map"> |
| | | select a.engineer_id,a.tempering_layout_id,count2,count1,count2-count1 as count3,count(c.glass_id) as count4 from |
| | | (select engineer_id,tempering_layout_id,count(*) as count1 from big_storage_cage_details where state=100 and tempering_layout_id!=0 group by engineer_id,tempering_layout_id) as a |
| | | select a.engineer_id,a.tempering_layout_id,count2,count1,count2-count1 as count3,count(c.glass_id) as count4,slots from |
| | | (select engineer_id,tempering_layout_id,count(*) as count1,group_concat(distinct slot order by tempering_feed_sequence) as slots from big_storage_cage_details where state=100 and tempering_layout_id!=0 group by engineer_id,tempering_layout_id) as a |
| | | left join |
| | | (select engineer_id,tempering_layout_id,count(*) as count2 from glass_info group by engineer_id,tempering_layout_id) as b |
| | | on a.engineer_id=b.engineer_id and a.tempering_layout_id=b.tempering_layout_id |
| | |
| | | |
| | | |
| | | <select id="queryFreeDeviceByUsed" resultType="java.lang.Integer"> |
| | | SELECT T.DEVICE_ID |
| | | SELECT |
| | | T.DEVICE_ID |
| | | FROM BIG_STORAGE_CAGE T |
| | | LEFT JOIN (SELECT * FROM BIG_STORAGE_CAGE_DETAILS WHERE STATE NOT IN (101, 8, 9)) T1 |
| | | ON T.SLOT = T1.SLOT |
| | | WHERE T.MAX_THICKNESS >= #{thickness} AND T.REMAIN_WIDTH = 5000 |
| | | WHERE T.MAX_THICKNESS >= #{thickness} AND T.SLOT_HEIGHT > #{slotHeight} |
| | | AND T.ENABLE_STATE = 1 |
| | | GROUP BY T.DEVICE_ID |
| | | HAVING COUNT(DISTINCT T.SLOT) - COUNT(DISTINCT T1.SLOT) > 0 |
| | | ORDER BY min(T.MAX_THICKNESS), |
| | | COUNT(DISTINCT T1.ENGINEER_ID), COUNT(DISTINCT T1.TEMPERING_LAYOUT_ID), |
| | | COUNT(DISTINCT T1.SLOT) |
| | | TRUNCATE(COUNT(DISTINCT T1.TEMPERING_LAYOUT_ID)/9,0), COUNT(DISTINCT T1.TEMPERING_LAYOUT_ID)%9 DESC, |
| | | FIELD(T.device_id, 5, 4, 3, 2, 1), T.device_id |
| | | </select> |
| | | |
| | | <!-- <select id="queryFreeDeviceByNotUsed" resultType="java.lang.Integer">--> |
| | |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @Author : zhoush |
| | |
| | | |
| | | @Test |
| | | public void testttt() { |
| | | List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(6); |
| | | List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(6, 1); |
| | | List<Integer> deviceUseds = deviceUsedList; |
| | | List<BigStorageCageDetails> engineerCount1 = bigStorageCageDetailsService.list( |
| | | new LambdaQueryWrapper<BigStorageCageDetails>() |
| | |
| | | |
| | | @Resource |
| | | TemperingGlassInfoService temperingGlassInfoService; |
| | | |
| | | @Test |
| | | public void computeOutMoreGlassInfo() { |
| | | List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.selectJoinList(TemperingGlassInfo.class, new MPJLambdaWrapper<TemperingGlassInfo>() |
| | |
| | | .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW) |
| | | .isNull(BigStorageCageOutTask::getGlassId) |
| | | .orderByAsc(TemperingGlassInfo::getTemperingFeedSequence)); |
| | | plcStorageCageTask.computeOutMoreGlassInfo(temperingGlassInfoList,true,1); |
| | | plcStorageCageTask.computeOutMoreGlassInfo(temperingGlassInfoList, true, 1); |
| | | } |
| | | |
| | | @Test |
| | | public void ca111() { |
| | | // GlassInfo glassInfo=glassInfoService.getOne( |
| | | // new LambdaQueryWrapper<GlassInfo>() |
| | | // .eq(GlassInfo::getGlassId,"P24120801|1|2") |
| | | // .eq(GlassInfo::getGlassId,"P24121602|1|10") |
| | | // ); |
| | | // bigStorageCageDetailsService.queryTargetSlotByTempering(glassInfo); |
| | | List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsService.list( |
| | | new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getState, 100) |
| | | .in(BigStorageCageDetails::getGlassId, "P24122201|1|1", "P24122201|2|3") |
| | | ); |
| | | List<BigStorageCageDetails> overSizeGlass = bigStorageCageDetailsList.stream().filter( |
| | | t -> Math.min(t.getWidth(), t.getHeight()) > 2500 |
| | | ).collect(Collectors.toList()); |
| | | log.info("sadfd" + overSizeGlass); |
| | | // bigStorageCageDetailsService.queryTargetSlotByTempering(glassInfo); |
| | | // List<String> glassIdsCar=new ArrayList<>(); |
| | | // glassIdsCar.add("P24120801|4|3"); |
| | |
| | | // plcStorageCageTask.computeSlot("P24121401|1|6"); |
| | | // plcStorageCageTask.computeSlot("P24121401|1|4"); |
| | | |
| | | List<TemperingLayoutDTO> temperingOccupySlotList = bigStorageCageDetailsService.queryTemperingOccupySlot(); |
| | | log.info("sd"+temperingOccupySlotList); |
| | | // List<TemperingLayoutDTO> temperingOccupySlotList = bigStorageCageDetailsService.queryTemperingOccupySlot(); |
| | | // log.info("sd"+temperingOccupySlotList); |
| | | } |
| | | |
| | | @Test |