|
|
|
|
@ -124,7 +124,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
if (CollectionUtils.isNotEmpty(list)) { |
|
|
|
|
//校验已排产订单
|
|
|
|
|
checkSchedulingOrder(list); |
|
|
|
|
list = yieldOrderService.list(Wrappers.<YieldOrderEntity>lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory(),YieldOrderEnum.STATUS_PROCESS_ERROR.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate)); |
|
|
|
|
list = yieldOrderService.list(Wrappers.<YieldOrderEntity>lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate)); |
|
|
|
|
//初始化人员能力
|
|
|
|
|
List<PersonAbilityEntity> personAbilityEntityList = personAbilityService.list(Wrappers.<PersonAbilityEntity>lambdaQuery().isNotNull(PersonAbilityEntity::getWorkCenterId).isNotNull(PersonAbilityEntity::getProcessId).isNotNull(PersonAbilityEntity::getCraftId)); |
|
|
|
|
Map<String, PersonAbilityEntity> personAbilityMap = new HashMap<>(); |
|
|
|
|
@ -333,7 +333,6 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
public void allocateResources(List<YieldOrderEntity> list, Map<String, PersonAbilityEntity> personAbilityMap, Map<Long, String> mainProducerMap, Map<String, List<WorkPlanEntity>> planMap, Map<Long, String> processMap, Map<Long, List<SintTempCurveEntity>> sintMap) { |
|
|
|
|
List<WorkOrderEntity> workOrderList = new ArrayList<>(); |
|
|
|
|
Map<String,List<EquipResourceEntity>> sameFurnaceMap = new HashMap<>(); |
|
|
|
|
for (YieldOrderEntity order : list) { |
|
|
|
|
try { |
|
|
|
|
//是否可以排产
|
|
|
|
|
@ -432,9 +431,12 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
} |
|
|
|
|
//包含说明之前有过这个温度曲线的订单
|
|
|
|
|
//根据当前时间查询包含玻璃粉牌号的设备资源
|
|
|
|
|
//List<EquipResourceEntity> equipResourceList = equipResourceService.list(Wrappers.<EquipResourceEntity>lambdaQuery().eq(EquipResourceEntity::getWorkCenterId))
|
|
|
|
|
if(sameFurnaceMap.containsKey(glassCodeStr)){ |
|
|
|
|
List<EquipResourceEntity> equipResourceList = sameFurnaceMap.get(glassCodeStr); |
|
|
|
|
List<EquipResourceEntity> equipResourceList = equipResourceService.list(Wrappers.<EquipResourceEntity>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; |
|
|
|
|
@ -527,7 +529,6 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); |
|
|
|
|
//需要判断设备额定生产能力是否满足订单总产能,如果不满足,则需要把总产能进行拆分
|
|
|
|
|
List<BigDecimal> capacityList = capacitySplit(equipResourceMap, sumCapacity); |
|
|
|
|
List<EquipResourceEntity> sameFurnaceList = new ArrayList<>(); |
|
|
|
|
for (BigDecimal capacity : capacityList) { |
|
|
|
|
for (Map.Entry<LocalDateTime, List<EquipResourceEntity>> entry1 : equipResourceMap.entrySet()) { |
|
|
|
|
Boolean isOccupied = false; |
|
|
|
|
@ -565,9 +566,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
//更新剩余产能
|
|
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(capacity)); |
|
|
|
|
equipResource.setIsUsed("1"); |
|
|
|
|
/*if("2".equals(order.getYieldType()) || "3".equals(order.getYieldType())){ |
|
|
|
|
if(order.getYieldType() == 2 || order.getYieldType() == 3){ |
|
|
|
|
equipResource.setGlassCode(glassCodeStr); |
|
|
|
|
}*/ |
|
|
|
|
} |
|
|
|
|
//如果剩余产能占总产能不足20%,则修改为已占用
|
|
|
|
|
// if(equipResource.getRestCapacity().divide(equipResource.getTotalCapacity(),2,RoundingMode.HALF_UP).compareTo(BigDecimal.valueOf(0.2)) < 0){
|
|
|
|
|
//
|
|
|
|
|
@ -589,7 +590,6 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
equipResource1.setIsUsed("1"); |
|
|
|
|
equipResourceService.update(equipResource1, updateWrapper); |
|
|
|
|
|
|
|
|
|
sameFurnaceList.add(equipResource); |
|
|
|
|
//当前工序的结束时间作为下一工序的开始时间
|
|
|
|
|
prevProcessEnd = workPlan.getEndTime(); |
|
|
|
|
dateTime = workPlan.getEndTime(); |
|
|
|
|
@ -602,9 +602,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(sintMap.containsKey(craft.getPpsId()) && glassCodeStr != null && CollectionUtils.isNotEmpty(sameFurnaceList)){ |
|
|
|
|
sameFurnaceMap.put(glassCodeStr,sameFurnaceList); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
if (!isSchecuding) { |
|
|
|
|
break; |
|
|
|
|
@ -645,7 +643,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
totalTime = totalTime.add(ability.getStandardTime()).add(ability.getPrepareTime()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
List<PersonResourceEntity> personResourceList = personResourceService.list(Wrappers.<PersonResourceEntity>lambdaQuery() |
|
|
|
|
/*List<PersonResourceEntity> personResourceList = personResourceService.list(Wrappers.<PersonResourceEntity>lambdaQuery() |
|
|
|
|
.eq(PersonResourceEntity::getWorkCenterId, craft.getWorkCenterId()) |
|
|
|
|
.eq(PersonResourceEntity::getProcessId, craft.getPpsId()) |
|
|
|
|
.eq(PersonResourceEntity::getCraftId, craft.getCaId()) |
|
|
|
|
@ -653,7 +651,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
.ge(PersonResourceEntity::getEndTime, prevProcessEnd)); |
|
|
|
|
if(CollectionUtils.isNotEmpty(personResourceList)){ |
|
|
|
|
workPlan.setMakeTeam(personResourceList.get(0).getTeamId()); |
|
|
|
|
} |
|
|
|
|
}*/ |
|
|
|
|
//通过加锁的方式保证每次查询到的人力资源都是最新的
|
|
|
|
|
/*Long craftId = craft.getCaId(); |
|
|
|
|
Lock craftLock = getCraftLock(craftId); |
|
|
|
|
|