diff --git a/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java b/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java index 2b485859..79c69ebb 100644 --- a/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java +++ b/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java @@ -16,7 +16,7 @@ public interface LauncherConstant { // 生产环境 String NACOS_NAMESPACE = "db3f4da1-ae19-4104-8c17-6d9b8f069401"; // 测试环境 -// String NACOS_NAMESPACE = "6cdd0310-0d61-4f54-891a-7fb06224d9b8"; + // String NACOS_NAMESPACE = "6cdd0310-0d61-4f54-891a-7fb06224d9b8"; /** * nacos 用户名 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/TeamSetMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/TeamSetMapper.java index 4f7ed3f0..d60e0d17 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/TeamSetMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/TeamSetMapper.java @@ -20,7 +20,7 @@ import java.util.List; * @author Tom Shuo * @since 2025-12-16 */ -public interface TeamSetMapper extends EnBaseMapper { +public interface TeamSetMapper extends BaseMapper { /** * 自定义分页 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/WorkCenterMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/WorkCenterMapper.java index 929c58c6..d9424e25 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/WorkCenterMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/WorkCenterMapper.java @@ -20,7 +20,7 @@ import java.util.List; * @author Tom Shuo * @since 2025-12-16 */ -public interface WorkCenterMapper extends EnBaseMapper { +public interface WorkCenterMapper extends BaseMapper { /** * 自定义分页 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestItemService2.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestItemService2.java index 990376d6..3b57bfe1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestItemService2.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestItemService2.java @@ -14,6 +14,7 @@ import org.springblade.desk.quality.pojo.entity.CycleTestItem; import org.springblade.desk.quality.pojo.entity.CycleTestStandard; import org.springblade.desk.quality.pojo.request.CycleTestItemSubmit; import org.springblade.desk.quality.pojo.vo.CycleTestItemVO; +import org.springblade.desk.quality.util.IdUtil; import org.springblade.desk.quality.wrapper.CycleTestItemWrapper; import org.springblade.resource.feign.IAttachClient; import org.springblade.resource.pojo.entity.Attach; @@ -144,11 +145,13 @@ public class CycleTestItemService2 { CycleTestStandard standard = standardService.getById(vo.getCycleTestStandardId()); if (standard != null) { vo.setCycleTestStandardName(standard.getName()); - Attach attach = attachClient.detailById(standard.getStandardAttachId()).getData(); - if (attach != null) { - vo.setStandardAttachId(attach.getId()); - vo.setLink(attach.getLink()); - vo.setOriginalName(attach.getOriginalName()); + if (IdUtil.isValid(standard.getStandardAttachId())) { + Attach attach = attachClient.detailById(standard.getStandardAttachId()).getData(); + if (attach != null) { + vo.setStandardAttachId(attach.getId()); + vo.setLink(attach.getLink()); + vo.setOriginalName(attach.getOriginalName()); + } } } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestStandardService2.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestStandardService2.java index 3ef72175..1eeb7f12 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestStandardService2.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestStandardService2.java @@ -10,6 +10,7 @@ import org.springblade.desk.basic.constant.BaseCol; import org.springblade.desk.quality.mapper.CycleTestStandardMapper; import org.springblade.desk.quality.pojo.entity.CycleTestStandard; import org.springblade.desk.quality.pojo.vo.CycleTestStandardVO; +import org.springblade.desk.quality.util.IdUtil; import org.springblade.resource.feign.IAttachClient; import org.springblade.resource.pojo.entity.Attach; import org.springframework.stereotype.Service; @@ -61,10 +62,12 @@ public class CycleTestStandardService2 { } public void setVOValue(CycleTestStandardVO vo) { - Attach attach = attachClient.detailById(vo.getStandardAttachId()).getData(); - if (attach != null) { - vo.setOriginalName(attach.getOriginalName()); - vo.setLink(attach.getLink()); + if(IdUtil.isValid(vo.getStandardAttachId())) { + Attach attach = attachClient.detailById(vo.getStandardAttachId()).getData(); + if (attach != null) { + vo.setOriginalName(attach.getOriginalName()); + vo.setLink(attach.getLink()); + } } } } 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 a54f2d1a..332cd8ba 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 3c4043d4..162d2c2a 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/EquipResourceEntity.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/EquipResourceEntity.java index d36bd2e1..099c4616 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 @@ -151,6 +151,12 @@ public class EquipResourceEntity extends BaseEntity { @Schema(description = "设备顺序") private Long workCenterId; + /** + * 玻璃粉牌号 + */ + @Schema(description = "玻璃粉牌号") + private String GlassCode; + 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 e92c019f..791b2c2e 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 f0be1ad0..36d40609 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 1a808082..0afcc1fb 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 1b22a53d..cfbd2508 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 b0607cac..810f1923 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> sameFurnaceMap = new HashMap<>(); + String glassCodeStr = null; //烧结 if(sintMap.containsKey(craft.getPpsId())){ - - if("2".equals(order.getYieldType())){//烧结订单 + if(order.getYieldType() == 2 || order.getYieldType() == 3){//烧结订单 //获取当前工序的所有温度曲线 List sintList = sintMap.get(craft.getPpsId()); List> sintMaterialList = new ArrayList<>(); @@ -429,13 +430,56 @@ public class WorkOrderServiceImpl extends BaseServiceImpl equipResourceList = equipResourceService.list(Wrappers.lambdaQuery() + .eq(EquipResourceEntity::getWorkCenterId,craft.getWorkCenterId()) + .eq(EquipResourceEntity::getCraftId,craft.getCaId()) + .ge(EquipResourceEntity::getStartTime,prevProcessEnd) + .eq(EquipResourceEntity::getGlassCode,glassCodeStr)); + if(CollectionUtils.isNotEmpty(equipResourceList)){ + //计算生产所需产能,需将m2换算成dm2 + BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); + Boolean isSameFurnace = false; + 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); + isSameFurnace = true; + } + break; + } + //同炉的话就不用走下面的匹配了,直接下一工序 + if(isSameFurnace){ + continue; + } } - }else if("3".equals(order.getYieldType())){//玻璃饼 - - } } @@ -485,7 +529,6 @@ public class WorkOrderServiceImpl extends BaseServiceImpl capacityList = capacitySplit(equipResourceMap, sumCapacity); - List sameFurnaceList = new ArrayList<>(); for (BigDecimal capacity : capacityList) { for (Map.Entry> entry1 : equipResourceMap.entrySet()) { Boolean isOccupied = false; @@ -498,7 +541,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);