diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java index 162d2c2a..f965eb67 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java @@ -37,8 +37,11 @@ public class WorkOrderDto { private String makeQty; private String workCenterName; + private String workCenterId; private Integer totalCount; private Integer schedulingCount; + private Integer unschedulingCount; + private Integer errorCount; private String schedulingRate; private String productIdent; private String receiveTime; diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/EquipResourceEntity.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/EquipResourceEntity.java index 099c4616..4faa8ea1 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/EquipResourceEntity.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/EquipResourceEntity.java @@ -157,6 +157,8 @@ public class EquipResourceEntity extends BaseEntity { @Schema(description = "玻璃粉牌号") private String GlassCode; + private Integer isDeleted; + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/ProcessSetEntity.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/ProcessSetEntity.java index c0e72041..40556624 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/ProcessSetEntity.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/ProcessSetEntity.java @@ -59,7 +59,7 @@ public class ProcessSetEntity extends BaseEntity { * 转速/振频 */ @Schema(description = "转速/振频") - private String vSpeed; + private String viSpeed; /** * 整流机控制模式 */ @@ -70,11 +70,7 @@ public class ProcessSetEntity extends BaseEntity { */ @Schema(description = "班组") private String team; - /** - * - */ - @Schema(description = "") - private BigDecimal newColumn; + /** * 编码 */ diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/TeamSetEntity.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/TeamSetEntity.java index 444497c8..9275c84a 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/TeamSetEntity.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/TeamSetEntity.java @@ -63,17 +63,17 @@ public class TeamSetEntity extends BaseEntity { * 班组长(外键-人员) */ @Schema(description = "班组长(外键-人员)") - private BigDecimal teamLeader; + private Long teamLeader; /** * 计划员(外键-人员) */ @Schema(description = "计划员(外键-人员)") - private BigDecimal planner; + private Long planner; /** * 调度员(外键-人员) */ @Schema(description = "调度员(外键-人员)") - private BigDecimal dispatcher; + private Long dispatcher; /** * 班组成员 */ diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml index b21877e3..763214f3 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml @@ -171,7 +171,9 @@ -- 统计待排产的数量 COUNT(CASE WHEN a.STATUS >= 10003 THEN a.WORK_CENTER_ID END) AS "totalCount", -- 统计已排产的数量 - COUNT(CASE WHEN a.STATUS not in (10003,10006) THEN a.WORK_CENTER_ID END) AS "schedulingCount" + COUNT(CASE WHEN a.STATUS not in (10003,10006) THEN a.WORK_CENTER_ID END) AS "schedulingCount", + COUNT(CASE WHEN a.STATUS = 10003 THEN a.WORK_CENTER_ID END) AS "unschedulingCount", + COUNT(CASE WHEN a.STATUS = 10006 THEN a.WORK_CENTER_ID END) AS "errorCount" FROM MES_YIELD_ORDER a LEFT JOIN BS_WORK_CENTER b ON a.WORK_CENTER_ID = b.ID @@ -183,7 +185,8 @@ and a.receive_time to_date(#{endTime},'YYYY-MM-DD HH24:MI:SS') - GROUP BY b.WC_NAME, a.WORK_CENTER_ID; + GROUP BY b.WC_NAME, a.WORK_CENTER_ID + order by COUNT( CASE WHEN a.STATUS NOT IN ( 10003, 10006 ) THEN a.WORK_CENTER_ID END )/COUNT( CASE WHEN a.STATUS >= 10003 THEN a.WORK_CENTER_ID END ) desc diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java index e5c674b0..a5dcd622 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java @@ -90,7 +90,7 @@ public class EquipResourceServiceImpl extends BaseServiceImpl deleteList = this.list(Wrappers.lambdaQuery().le(EquipResourceEntity::getDateTime,DateFormatUtils.format(DateUtils.addDays(date,-3),"yyyy-MM-dd"))); - this.removeByIds(deleteList.stream().map(BaseEntity::getId).collect(Collectors.toList())); + deleteList.forEach(item -> baseMapper.deleteById(item.getId())); } @Override diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 04c5da10..7d310b8a 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -85,6 +85,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl schedulingBoard(WorkOrderDto workOrder) { List list = baseMapper.selectWorkOrderList(workOrder); - //Map> resultList = new HashMap<>(); Map> woCodeGroup = list.stream().collect(Collectors.groupingBy(WorkOrderDto::getWoCode)); List resultList = new ArrayList<>(); for (Map.Entry> entry : woCodeGroup.entrySet()) { WorkOrderDto workOrderDto = new WorkOrderDto(); String woCode = entry.getKey(); - List woList = entry.getValue(); workOrderDto.setWoCode(woCode); workOrderDto.setWorkOrderList(entry.getValue()); resultList.add(workOrderDto); - //按processName二次分组 - /* Map> processGroup = woList.stream() - .collect(Collectors.groupingBy(WorkOrderDto::getProcessName)); - - //整合每个processName的时间 - List mergedProcessList = new ArrayList<>(); - for (Map.Entry> processEntry : processGroup.entrySet()) { - String processName = processEntry.getKey(); - List processList = processEntry.getValue(); - - // 计算最早的开始时间、最晚的结束时间 - String minStartTime = getMinTime(processList.stream().map(WorkOrderDto::getPlanStartTime).toList()); - String maxEndTime = getMaxTime(processList.stream().map(WorkOrderDto::getPlanEndTime).toList()); - - // 封装整合后的DTO(复用第一个对象或新建) - WorkOrderDto mergedDto = new WorkOrderDto(); - mergedDto.setWoCode(woCode); - mergedDto.setProcessName(processName); - for (WorkOrderDto dto : processList) { - mergedDto.setTeamName(dto.getTeamName()); - mergedDto.setCardNo(dto.getCardNo()); - mergedDto.setBatchNo(dto.getBatchNo()); - mergedDto.setPartCode(dto.getPartCode()); - mergedDto.setCurrentProcessName(dto.getCurrentProcessName()); - mergedDto.setMakeQty(dto.getMakeQty()); - mergedDto.setEquipName(dto.getEquipName()); - mergedDto.setProductIdent(dto.getProductIdent()); - mergedDto.setPriorityAps(YieldOrderEnum.getName(Integer.parseInt(dto.getPriorityAps()))); - if (dto.getPlanStartTime().equals(minStartTime)) { - mergedDto.setStartTime(dto.getStartTime()); - mergedDto.setFactStartTime(dto.getFactStartTime()); - } - if (dto.getPlanEndTime().equals(maxEndTime)) { - mergedDto.setEndTime(dto.getEndTime()); - mergedDto.setFactEndTime(dto.getFactEndTime()); - mergedDto.setPlanStatus(dto.getPlanStatus()); - } - } - - mergedDto.setPlanStartTime(minStartTime); - mergedDto.setPlanEndTime(maxEndTime); - mergedProcessList.add(mergedDto); - } - mergedProcessList.sort(Comparator.comparing(WorkOrderDto::getPlanStartTime)); - workOrderDto.setWoCode(woCode); - workOrderDto.setWorkOrderList(mergedProcessList); - resultList.add(workOrderDto);*/ - //resultList.put(woCode, mergedProcessList); } return resultList; @@ -429,7 +380,6 @@ public class WorkOrderServiceImpl extends BaseServiceImpl equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId()).eq(EquipAbilityEntity::getCraftId, craft.getCaId())); if (CollectionUtils.isEmpty(equipAbilityList)) { - order.setErrorInfo("工序:"+processMap.get(craft.getPpsId()) +"设备未匹配到对应的设备能力"); + order.setErrorInfo("工序:"+processMap.get(craft.getPpsId()) +",未匹配到对应的设备能力"); order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); yieldOrderService.updateById(order); isSchecuding = false; @@ -505,7 +455,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl equipResourceList = equipResourceService.list(Wrappers.lambdaQuery().eq(EquipResourceEntity::getCraftId, craft.getCaId()).eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()).ge(EquipResourceEntity::getStartTime, dateTime).eq(EquipResourceEntity::getIsUsed, 0).in(EquipResourceEntity::getEquipOrder, entry.getKey())); if (CollectionUtils.isEmpty(equipResourceList)) { order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); - order.setErrorInfo("工序:" + processMap.get(craft.getPpsId()) + "未匹配到对应的设备资源"); + order.setErrorInfo("工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备资源"); yieldOrderService.updateById(order); isSchecuding = false; break; @@ -528,7 +478,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl capacityList = capacitySplit(equipResourceMap, sumCapacity); @@ -643,72 +593,6 @@ public class WorkOrderServiceImpl extends BaseServiceImpl personResourceList = personResourceService.list(Wrappers.lambdaQuery().ge(PersonResourceEntity::getStartTime,prevProcessEnd.plusMinutes(30)).eq(PersonResourceEntity::getCraftId,craft.getCaId()).eq(PersonResourceEntity::getIsUsed,0).orderByAsc(PersonResourceEntity::getStartTime).last("for update")); - //如果personResourceList不为空,说明是镀后检验或者镀后验收这类跨作业中心的工艺 - if(CollectionUtils.isNotEmpty(personResourceList)){ - //剔除掉personResourceList中isUsed=1之前的数据,isUsed=1说明这些时间被占用了 - *//* int isUsedIndex = -1; - for(int m=0;m { @@ -897,6 +788,18 @@ public class WorkOrderServiceImpl extends BaseServiceImpl Objects.isNull(item.getStartTime()) + && Objects.isNull(item.getEndTime())); + if(isEmpty){ + //上一道工序结束时间 + LocalDateTime prevProcessEnd = LocalDateTime.now(); + for(int i=0;i list){ + //相同零件号判断键位、生产厂家、检验编号、生产标识 + Map> map = list.stream().collect(Collectors.groupingBy(YieldOrderEntity::getPartCode)); + for(Map.Entry> entry : map.entrySet()){ + List list1 = entry.getValue(); + if(list1.size() > 1){ + + + } + } + //不同零件号判断工艺 + } } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/YieldOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/YieldOrderServiceImpl.java index 24fa7634..e0e33f12 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/YieldOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/YieldOrderServiceImpl.java @@ -25,12 +25,23 @@ */ package org.springblade.scheduling.scheduling.service.impl; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; import org.springblade.desk.order.pojo.enums.YieldOrderEnum; +import org.springblade.scheduling.scheduling.entity.TeamSetEntity; +import org.springblade.scheduling.scheduling.entity.WorkOrderEntity; import org.springblade.scheduling.scheduling.entity.YieldOrderEntity; +import org.springblade.scheduling.scheduling.mapper.TeamSetMapper; +import org.springblade.scheduling.scheduling.mapper.WorkOrderMapper; +import org.springblade.scheduling.scheduling.service.IWorkOrderService; import org.springblade.scheduling.scheduling.vo.YieldOrderVO; import org.springblade.scheduling.scheduling.excel.YieldOrderExcel; import org.springblade.scheduling.scheduling.mapper.YieldOrderMapper; import org.springblade.scheduling.scheduling.service.IYieldOrderService; +import org.springblade.system.cache.UserCache; +import org.springblade.system.pojo.entity.User; +import org.springblade.system.pojo.entity.UserInfo; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -44,13 +55,22 @@ import java.util.List; * @since 2025-11-28 */ @Service +@RequiredArgsConstructor public class YieldOrderServiceImpl extends BaseServiceImpl implements IYieldOrderService { + private final TeamSetMapper teamSetMapper; @Override public IPage selectYieldOrderPage(IPage page, YieldOrderVO yieldOrder) { List list = baseMapper.selectYieldOrderPage(page, yieldOrder); for(YieldOrderVO vo : list){ vo.setPriorityApsStr(YieldOrderEnum.getName(vo.getPriorityAps())); + List teamSetList = teamSetMapper.selectList(Wrappers.lambdaQuery().eq(TeamSetEntity::getWcId,vo.getWorkCenterId())); + if(CollectionUtils.isNotEmpty(teamSetList)){ + User userInfo = UserCache.getUser(teamSetList.get(0).getDispatcher()); + if(userInfo != null){ + vo.setDispatcher(userInfo.getRealName()); + } + } } return page.setRecords(list); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/YieldOrderVO.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/YieldOrderVO.java index 068e3d0c..3de8cfc9 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/YieldOrderVO.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/YieldOrderVO.java @@ -49,4 +49,13 @@ public class YieldOrderVO extends YieldOrderEntity { */ private String priorityApsStr; + /** + * 调度员 + */ + private String dispatcher; + + private String startTime; + + private String endTime; + }