From a0d29d1898402a8630889a42c470991669696954 Mon Sep 17 00:00:00 2001 From: sunjianxi <839419401@qq.com> Date: Mon, 29 Dec 2025 18:14:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WorkOrderController.java | 2 +- .../scheduling/dto/WorkOrderDto.java | 2 + .../entity/PersonResourceEntity.java | 22 +++++ .../scheduling/mapper/WorkOrderMapper.xml | 1 + .../scheduling/service/IWorkOrderService.java | 2 +- .../impl/PersonResourceServiceImpl.java | 48 ++++++---- .../service/impl/WorkOrderServiceImpl.java | 88 +++++++++++++++---- 7 files changed, 128 insertions(+), 37 deletions(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java index a54f2d1..332cd8b 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java @@ -181,7 +181,7 @@ public class WorkOrderController extends BladeController { @PostMapping("/schedulingBoard") @ApiOperationSupport(order = 6) @Operation(summary = "排产看板", description = "传入WorkOrderDto") - public R>> schedulingBoard(@RequestBody WorkOrderDto workOrderDto) { + public R> schedulingBoard(@RequestBody WorkOrderDto workOrderDto) { return R.data(workOrderService.schedulingBoard(workOrderDto)); } 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 3c4043d..162d2c2 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 @@ -46,4 +46,6 @@ public class WorkOrderDto { private List planStatusList; + private List workOrderList; + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/PersonResourceEntity.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/PersonResourceEntity.java index e92c019..791b2c2 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/PersonResourceEntity.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/PersonResourceEntity.java @@ -104,7 +104,29 @@ public class PersonResourceEntity extends BaseEntity { private String dateTime; + /** + * 工序id + */ + @Schema(description = "工序id") + private Long processId; + + /** + * 工序名称 + */ + @Schema(description = "工序名称") + private String processName; + /** + * 作业中心Id + */ + @Schema(description = "作业中心Id") + private Long workCenterId; + + /** + * 作业中心名称 + */ + @Schema(description = "作业中心名称") + private String workCenterName; 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 f0be1ad..36d4060 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 @@ -117,6 +117,7 @@ LEFT JOIN MES_YIELD_ORDER g on g.id = a.yo_id a.is_deleted = 0 and b.is_deleted = 0 and a.status in (1,2,3,5) + and b.start_time is not null and b.end_time is not null and to_char(b.start_time,'YYYY-MM-DD') = ]]> #{startTime} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java index 1a80808..0afcc1f 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java @@ -71,7 +71,7 @@ public interface IWorkOrderService extends BaseService { **/ void scheduling(); - Map> schedulingBoard(WorkOrderDto workOrder); + List schedulingBoard(WorkOrderDto workOrder); /** * 向旧mes发送排产结果数据 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 1b22a53..cfbd250 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 org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.scheduling.scheduling.entity.EquipResourceEntity; import org.springblade.scheduling.scheduling.entity.PersonAbilityEntity; import org.springblade.scheduling.scheduling.entity.PersonResourceEntity; import org.springblade.scheduling.scheduling.excel.PersonResourceExcel; @@ -74,28 +75,20 @@ public class PersonResourceServiceImpl extends BaseServiceImpl list1 = this.list(Wrappers.lambdaQuery().eq(PersonResourceEntity::getDateTime,today)); - List list2 = this.list(Wrappers.lambdaQuery().eq(PersonResourceEntity::getDateTime,tomorrow)); - List list3 = this.list(Wrappers.lambdaQuery().eq(PersonResourceEntity::getDateTime,dayAfterTomorrow)); - if(CollectionUtils.isEmpty(list1)){ - generateData(today); - } - if(CollectionUtils.isEmpty(list2)){ - generateData(tomorrow); - } - if(CollectionUtils.isEmpty(list3)){ - generateData(dayAfterTomorrow); + for(int i=0;i<7;i++){ + String today = DateFormatUtils.format(DateUtils.addDays(date,i),"yyyy-MM-dd"); + List list = this.list(Wrappers.lambdaQuery().eq(PersonResourceEntity::getDateTime,today)); + if(CollectionUtils.isEmpty(list)){ + generateData(today); + } } } public void generateData(String day){ //获取设备能力列表 - List workCenterList = Arrays.asList("86","85"); - List personAbilityList = personAbilityService.list(Wrappers.lambdaQuery().in(PersonAbilityEntity::getWorkCenterId,workCenterList)); +// List workCenterList = Arrays.asList("86","85"); + List personAbilityList = personAbilityService.list(); if(CollectionUtils.isNotEmpty(personAbilityList)){ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm"); @@ -105,11 +98,12 @@ public class PersonResourceServiceImpl extends BaseServiceImpl> teamIdList = baseMapper.selectTeamByWorkCenter(personAbility.getWorkCenterId()); + List resourceList = new ArrayList<>(); //普通设备每30分钟间隔生成数据 - int interval = 30; + /*int interval = 30; int totalMinutes = 24 * 60; // 一天总分钟数 int totalCount = totalMinutes / interval; // 生成条数 - List resourceList = new ArrayList<>(); + for (int i = 0; i < totalCount; i++) { LocalDateTime startTime = startOfDay.plusMinutes(i * interval); LocalDateTime endTime = startTime.plusMinutes(30); @@ -136,6 +130,24 @@ public class PersonResourceServiceImpl extends BaseServiceImpl map : teamIdList){ + LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter); + LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter); + PersonResourceEntity personResource = new PersonResourceEntity(); + personResource.setDateTime(day); + personResource.setCraftId(personAbility.getCraftId()); + personResource.setCraftName(personAbility.getCraftName()); + personResource.setPeriod(map.get("startTime").toString() + "-" + map.get("endTime").toString()); + personResource.setStartTime(teamStartTime); + personResource.setEndTime(teamEndTime); + personResource.setIsUsed("0"); + personResource.setProcessId(personAbility.getProcessId()); + personResource.setProcessName(personAbility.getProcessName()); + personResource.setTeamId(Long.parseLong(map.get("teamId").toString())); + personResource.setWorkCenterId(personAbility.getWorkCenterId()); + personResource.setWorkCenterName(personAbility.getWorkCenterName()); + resourceList.add(personResource); } if(CollectionUtils.isNotEmpty(resourceList)){ this.saveBatch(resourceList); 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 b0607ca..24707fd 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 @@ -119,12 +119,12 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list = - yieldOrderService.list(Wrappers.lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory(),YieldOrderEnum.STATUS_PROCESS_ERROR.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate)); + yieldOrderService.list(Wrappers.lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory(),YieldOrderEnum.STATUS_PROCESS_ERROR.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate)); log.info("待排产订单数量为:" + list.size()); if (CollectionUtils.isNotEmpty(list)) { //校验已排产订单 checkSchedulingOrder(list); - list = yieldOrderService.list(Wrappers.lambdaQuery().eq(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate)); + list = yieldOrderService.list(Wrappers.lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory(),YieldOrderEnum.STATUS_PROCESS_ERROR.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate)); //初始化人员能力 List personAbilityEntityList = personAbilityService.list(Wrappers.lambdaQuery().isNotNull(PersonAbilityEntity::getWorkCenterId).isNotNull(PersonAbilityEntity::getProcessId).isNotNull(PersonAbilityEntity::getCraftId)); Map personAbilityMap = new HashMap<>(); @@ -182,12 +182,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> schedulingBoard(WorkOrderDto workOrder) { + public List schedulingBoard(WorkOrderDto workOrder) { List list = baseMapper.selectWorkOrderList(workOrder); - Map> resultList = new HashMap<>(); + //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(); @@ -232,12 +233,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl sintList = sintMap.get(craft.getPpsId()); List> sintMaterialList = new ArrayList<>(); @@ -430,12 +431,43 @@ public class WorkOrderServiceImpl extends BaseServiceImpl equipResourceList = sameFurnaceMap.get(glassCodeStr); + //计算生产所需产能,需将m2换算成dm2 + BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); + for(EquipResourceEntity equipResource : equipResourceList){ + if(equipResource.getRestCapacity().compareTo(sumCapacity) > 0){ + //生成车间订单 + WorkPlanEntity workPlan = new WorkPlanEntity(); + workPlan.setStartTime(equipResource.getStartTime()); + if ("0".equals(equipResource.getEquipType())) { + workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue())); + } else { + workPlan.setEndTime(equipResource.getEndTime()); + } + workPlan.setWorkQty(order.getYpQty()); + 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(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getStartTime(), workPlan.getEndTime()))); + workPlan.setEquipCode(equipResource.getEquipCode()); + workPlan.setEquipName(equipResource.getEquipName()); + workPlan.setEquipResourceId(equipResource.getId()); + workPlanList.add(workPlan); + equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); + equipResourceService.updateById(equipResource); + } + } } - }else if("3".equals(order.getYieldType())){//玻璃饼 - - } } @@ -498,7 +530,7 @@ 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) + .ge(PersonResourceEntity::getEndTime, prevProcessEnd)); + if(CollectionUtils.isNotEmpty(personResourceList)){ + workPlan.setMakeTeam(personResourceList.get(0).getTeamId()); + } //通过加锁的方式保证每次查询到的人力资源都是最新的 /*Long craftId = craft.getCaId(); Lock craftLock = getCraftLock(craftId);