From bfb09d89b8b33c9d280edf80633e298bb49bb85e Mon Sep 17 00:00:00 2001 From: sunjianxi <839419401@qq.com> Date: Tue, 7 Apr 2026 18:00:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E5=BC=80=E5=8F=91-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EquipResourceServiceImpl.java | 5 +- .../impl/PersonResourceServiceImpl.java | 7 +- .../service/impl/WorkOrderServiceImpl.java | 153 +++++++++++++----- 3 files changed, 127 insertions(+), 38 deletions(-) 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 2f85f162..4314cab6 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 @@ -36,6 +36,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; +import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.scheduling.pojo.entity.EquipAbilityEntity; @@ -57,6 +58,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 工艺能力表 服务实现类 @@ -107,7 +109,8 @@ public class EquipResourceServiceImpl extends BaseServiceImpl deleteList = this.list(Wrappers.lambdaQuery().le(EquipResourceEntity::getDateTime,DateFormatUtils.format(DateUtils.addDays(date,-3),"yyyy-MM-dd"))); - deleteList.forEach(item -> baseMapper.deleteById(item.getId())); + List idList = deleteList.stream().map(BaseEntity::getId).collect(Collectors.toList()); + baseMapper.deleteByIds(idList); log.info("初始化设备资源结束:"+ DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss")); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonResourceServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonResourceServiceImpl.java index fb41bdc9..deb6d0a7 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonResourceServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonResourceServiceImpl.java @@ -33,6 +33,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; +import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.scheduling.pojo.entity.PersonAbilityEntity; import org.springblade.scheduling.pojo.entity.PersonResourceEntity; @@ -45,12 +46,12 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 工艺能力表 服务实现类 @@ -87,6 +88,10 @@ public class PersonResourceServiceImpl extends BaseServiceImpl deleteList = this.list(Wrappers.lambdaQuery().le(PersonResourceEntity::getDateTime,DateFormatUtils.format(DateUtils.addDays(date,-3),"yyyy-MM-dd"))); + List idList = deleteList.stream().map(BaseEntity::getId).collect(Collectors.toList()); + baseMapper.deleteByIds(idList); log.info("初始化人力资源结束:"+ DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss")); } 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 9f08b46e..1385a4ef 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 @@ -528,23 +528,25 @@ public class WorkOrderServiceImpl extends BaseServiceImpl sameFurnaceMap = new HashMap<>(); + Map sameMap = new HashMap<>(); //同炉同槽 if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){ //热表同槽 - Boolean isSameTrough = sameTrough(order, craft, localDateTime, workPlanList); + sameMap = sameTrough(order, craft, localDateTime, workPlanList, prevProcessEnd); //同槽就不需要继续匹配了 - if (isSameTrough) { + if (sameMap.get("isSameTrough").toString() == "true") { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"); + prevProcessEnd = LocalDateTime.parse(sameMap.get("prevProcessEnd").toString(), formatter); continue; } }else{ //烧结同炉 if (sintMap.containsKey(craft.getPpsId())) { - sameFurnaceMap = sameFurnace(order, craft, workPlanList, localDateTime, glassCodeStr, sintMap, part, processMap, prevProcessEnd); + sameMap = sameFurnace(order, craft, workPlanList, localDateTime, glassCodeStr, sintMap, part, processMap, prevProcessEnd); //同炉的话就不用走下面的匹配了,直接下一工序 - if (sameFurnaceMap.get("isSameFurnace").toString() == "true") { + if (sameMap.get("isSameFurnace").toString() == "true") { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"); - prevProcessEnd = LocalDateTime.parse(sameFurnaceMap.get("prevProcessEnd").toString(), formatter); + prevProcessEnd = LocalDateTime.parse(sameMap.get("prevProcessEnd").toString(), formatter); continue; } } @@ -688,8 +690,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl personResourceList = personResourceService.list(Wrappers.lambdaQuery() - .eq(PersonResourceEntity::getWorkCenterId, craft.getWorkCenterId()) - .eq(PersonResourceEntity::getProcessId, craft.getPpsId()) - .eq(PersonResourceEntity::getCraftId, craft.getCaId()) - .le(PersonResourceEntity::getStartTime, prevProcessEnd) - .orderByAsc(PersonResourceEntity::getDateTime,PersonResourceEntity::getStartTime) - .eq(PersonResourceEntity::getTeamId,craft.getMakeTeam())); + List personResourceList = personResourceService.list(wrapper); if (CollectionUtils.isNotEmpty(personResourceList)) { workPlan.setMakeTeam(personResourceList.get(0).getTeamId()); } @@ -1417,29 +1413,110 @@ public class WorkOrderServiceImpl extends BaseServiceImpl workPlanList) { + public Map sameTrough(YieldOrderEntity order, + YieldOrderCraftEntity craft, + LocalDateTime dateTime, + List workPlanList, + LocalDateTime prevProcessEnd) { + Map map = new HashMap<>(); Boolean isSameTrough = false; SameTroughEntity sameTrough = sameTroughService.getOne(Wrappers.lambdaQuery() .eq(SameTroughEntity::getWorkCenterId, craft.getWorkCenterId()) .eq(SameTroughEntity::getCraftId, craft.getCaId()) .eq(SameTroughEntity::getProcessId, craft.getPpsId())); - if (sameTrough != null) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(WorkPlanEntity::getWorkCenterId, craft.getWorkCenterId()) - .eq(WorkPlanEntity::getCaId, craft.getCaId()) - .eq(WorkPlanEntity::getPpsId, craft.getPpsId()) - .ge(WorkPlanEntity::getPlanStartTime, dateTime); - //返工订单需要原班组加工 - if(StringUtils.isNotEmpty(order.getReworkCode())){ - wrapper.eq(WorkPlanEntity::getMakeTeam,craft.getMakeTeam()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(WorkPlanEntity::getWorkCenterId, craft.getWorkCenterId()) + .eq(WorkPlanEntity::getCaId, craft.getCaId()) + .eq(WorkPlanEntity::getPpsId, craft.getPpsId()) + .ge(WorkPlanEntity::getPlanStartTime, dateTime); + //返工订单需要原班组加工 + if(StringUtils.isNotEmpty(order.getReworkCode())){ + wrapper.eq(WorkPlanEntity::getMakeTeam,craft.getMakeTeam()); + } + wrapper.orderByAsc(WorkPlanEntity::getPlanStartTime); + //查询是否有已经排产的计划 + List workPlanOldList = workPlanService.list(wrapper); + //如果没有查询到非同槽条件,默认同槽 + if(sameTrough == null){ + if (CollectionUtils.isNotEmpty(workPlanOldList)) { + //总生产量 + BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); + for (WorkPlanEntity entry : workPlanOldList) { + List resourceList = new ArrayList<>(); + if (StringUtils.isNotEmpty(entry.getEquipResourceId())) { + List resourceIdList = Arrays.stream(entry.getEquipResourceId().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + for(Long resourceId : resourceIdList){ + EquipResourceEntity equipResource = equipResourceService.getById(resourceId); + if(equipResource == null){ + continue; + } + //判断剩余产能是否满足总产能 + if (sumCapacity.compareTo(equipResource.getRestCapacity()) > 0) { + resourceList.clear(); + break; + } else { + resourceList.add(resourceId); + } + } + + } + List processPlanList = new ArrayList<>(); + for(Long resourceId : resourceList){ + EquipResourceEntity equipResource = equipResourceService.getById(resourceId); + //生成车间订单 + WorkPlanEntity workPlan = new WorkPlanEntity(); + workPlan.setPlanStartTime(equipResource.getStartTime()); + if ("0".equals(equipResource.getEquipType())) { + workPlan.setPlanEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().setScale(0, RoundingMode.CEILING).longValue())); + } else { + workPlan.setPlanEndTime(equipResource.getEndTime()); + } + workPlan.setWorkQty(0); + workPlan.setCaId(craft.getCaId()); + workPlan.setPpsId(craft.getPpsId()); + workPlan.setMakeTeam(equipResource.getTeamId()); + workPlan.setWorkCenterId(craft.getWorkCenterId()); + workPlan.setOrders(craft.getProcessNo()); + workPlan.setWoId(order.getId()); + workPlan.setOem("0"); + workPlan.setTestQty(0); + workPlan.setQualifiedQty(0); + workPlan.setUnqualifiedQty(0); + workPlan.setScrapQty(0); + workPlan.setHourQuota((double)ChronoUnit.MINUTES.between(workPlan.getPlanStartTime(), workPlan.getPlanEndTime())); + workPlan.setEquipCode(equipResource.getEquipCode()); + workPlan.setEquipName(equipResource.getEquipName()); + workPlan.setEquipResourceId(equipResource.getId().toString()); + processPlanList.add(workPlan); + + equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); + equipResourceService.updateById(equipResource); + isSameTrough = true; + } + if(CollectionUtils.isNotEmpty(processPlanList)){ + WorkPlanEntity workPlan = new WorkPlanEntity(); + BeanUtils.copyProperties(processPlanList.get(0),workPlan); + workPlan.setPlanStartTime(processPlanList.get(0).getPlanStartTime()); + workPlan.setPlanEndTime(processPlanList.get(processPlanList.size()-1).getPlanEndTime()); + String equipCode = processPlanList.stream().map(WorkPlanEntity::getEquipCode).collect(Collectors.joining(",")); + String equipName = processPlanList.stream().map(WorkPlanEntity::getEquipName).collect(Collectors.joining(",")); + String equipResourceId = processPlanList.stream().map(WorkPlanEntity::getEquipResourceId).map(String::valueOf).collect(Collectors.joining(",")); + Double hourQuota = processPlanList.stream().mapToDouble(WorkPlanEntity::getHourQuota).sum(); + workPlan.setEquipCode(equipCode); + workPlan.setEquipName(equipName); + workPlan.setEquipResourceId(equipResourceId); + workPlan.setHourQuota(hourQuota); + workPlanList.add(workPlan); + prevProcessEnd = workPlan.getPlanEndTime(); + //排完了跳出循环 + break; + } + } } - wrapper.orderByAsc(WorkPlanEntity::getPlanStartTime); - //查询是否有已经排产的计划 - List workPlanOldList = workPlanService.list(Wrappers.lambdaQuery() - .eq(WorkPlanEntity::getWorkCenterId, craft.getWorkCenterId()) - .eq(WorkPlanEntity::getCaId, craft.getCaId()) - .eq(WorkPlanEntity::getPpsId, craft.getPpsId()) - .ge(WorkPlanEntity::getPlanStartTime, dateTime).orderByAsc(WorkPlanEntity::getPlanStartTime)); + }else if(sameTrough != null) { if (CollectionUtils.isNotEmpty(workPlanOldList)) { //总生产量 BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); @@ -1466,7 +1543,6 @@ public class WorkOrderServiceImpl extends BaseServiceImpl sameFurnace(YieldOrderEntity order,