|
|
|
|
@ -114,6 +114,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
if (CollectionUtils.isNotEmpty(list)) { |
|
|
|
|
//校验已排产订单
|
|
|
|
|
checkSchedulingOrder(list); |
|
|
|
|
list = yieldOrderService.list(Wrappers.<YieldOrderEntity>lambdaQuery().eq(BaseEntity::getStatus, YieldOrderConst.STATUS_APS)); |
|
|
|
|
//初始化人员能力
|
|
|
|
|
List<PersonAbilityEntity> personAbilityEntityList = personAbilityService.list(Wrappers.<PersonAbilityEntity>lambdaQuery().isNotNull(PersonAbilityEntity::getWorkCenterId).isNotNull(PersonAbilityEntity::getProcessId).isNotNull(PersonAbilityEntity::getCraftId)); |
|
|
|
|
Map<String, PersonAbilityEntity> personAbilityMap = new HashMap<>(); |
|
|
|
|
@ -127,7 +128,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
mainProducerMap.put(item.getProcessId(), item.getMainProducer()); |
|
|
|
|
}); |
|
|
|
|
//计算cr值
|
|
|
|
|
// calculateCr(list);
|
|
|
|
|
//calculateCr(list);
|
|
|
|
|
//根据作业中心将订单分组,并根据优先级、cr值、订单需求数量、计划下达时间4个维度进行组内排序
|
|
|
|
|
Map<Long, List<YieldOrderEntity>> map = |
|
|
|
|
list.stream() |
|
|
|
|
@ -434,12 +435,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
public void allocateResources(List<YieldOrderEntity> list,Map<String, PersonAbilityEntity> personAbilityMap,Map<Long, String> mainProducerMap,Map<String,List<WorkPlanEntity>> planMap) { |
|
|
|
|
|
|
|
|
|
for (YieldOrderEntity order : list) { |
|
|
|
|
|
|
|
|
|
//是否可以排产
|
|
|
|
|
Boolean isSchecuding = true; |
|
|
|
|
List<WorkPlanEntity> workPlanList = new ArrayList<>(); |
|
|
|
|
//查询所有工序
|
|
|
|
|
List<YieldOrderCraftEntity> craftList = yieldOrderCraftService.list(Wrappers.<YieldOrderCraftEntity>lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).orderByAsc(YieldOrderCraftEntity::getProcessNo)); |
|
|
|
|
List<YieldOrderCraftEntity> craftList = yieldOrderCraftService.list(Wrappers.<YieldOrderCraftEntity>lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId,27).orderByAsc(YieldOrderCraftEntity::getProcessNo)); |
|
|
|
|
List<Long> workCenterList = craftList.stream().filter(item -> item.getWorkCenterId() != null).map(YieldOrderCraftEntity::getWorkCenterId).collect(Collectors.toList()); |
|
|
|
|
if(workCenterList.size() != craftList.size()){ |
|
|
|
|
order.setErrorInfo("工序信息不完整,含有未匹配作业中心的工序"); |
|
|
|
|
@ -545,7 +545,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
// if(equipResource.getRestCapacity().divide(equipResource.getTotalCapacity(),2,RoundingMode.HALF_UP).compareTo(BigDecimal.valueOf(0.2)) < 0){
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
equipResourceService.updateById(equipResource); |
|
|
|
|
//同一个设备可能有多个工艺能力,同一时间只能做一个工艺能力的零件,所以需要把当前设备所有工艺能力的剩余产能都更新调
|
|
|
|
|
LambdaUpdateWrapper<EquipResourceEntity> equipWrapper = new LambdaUpdateWrapper<>(); |
|
|
|
|
equipWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); |
|
|
|
|
equipResourceService.update(equipResource,equipWrapper); |
|
|
|
|
//该设备后续所有开始时间小于当前结束时间的时间段都变为不可用
|
|
|
|
|
LambdaUpdateWrapper<EquipResourceEntity> updateWrapper = new LambdaUpdateWrapper(); |
|
|
|
|
updateWrapper.lt(EquipResourceEntity::getStartTime, equipResource.getEndTime()); |
|
|
|
|
@ -907,34 +910,36 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
for(YieldOrderEntity yieldOrder : list){ |
|
|
|
|
//查询相关车间订单
|
|
|
|
|
WorkOrderEntity workOrder = this.getOne(Wrappers.<WorkOrderEntity>lambdaQuery().eq(WorkOrderEntity::getYoId,yieldOrder.getId())); |
|
|
|
|
List<WorkPlanEntity> schedulingPlanList = workPlanService.list(Wrappers.<WorkPlanEntity>lambdaQuery().eq(WorkPlanEntity::getWoId,workOrder.getId())); |
|
|
|
|
if(CollectionUtils.isNotEmpty(schedulingPlanList)){ |
|
|
|
|
for(WorkPlanEntity workPlan : schedulingPlanList){ |
|
|
|
|
//还原设备资源
|
|
|
|
|
if(workPlan.getEquipResourceId() != null){ |
|
|
|
|
EquipResourceEntity equipResource = equipResourceService.getById(workPlan.getEquipResourceId()); |
|
|
|
|
equipResource.setIsUsed("0"); |
|
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().add(workPlan.getHourQuota())); |
|
|
|
|
equipResourceService.updateById(equipResource); |
|
|
|
|
if(workOrder != null){ |
|
|
|
|
List<WorkPlanEntity> schedulingPlanList = workPlanService.list(Wrappers.<WorkPlanEntity>lambdaQuery().eq(WorkPlanEntity::getWoId,workOrder.getId())); |
|
|
|
|
if(CollectionUtils.isNotEmpty(schedulingPlanList)){ |
|
|
|
|
for(WorkPlanEntity workPlan : schedulingPlanList){ |
|
|
|
|
//还原设备资源
|
|
|
|
|
if(workPlan.getEquipResourceId() != null){ |
|
|
|
|
EquipResourceEntity equipResource = equipResourceService.getById(workPlan.getEquipResourceId()); |
|
|
|
|
equipResource.setIsUsed("0"); |
|
|
|
|
equipResource.setRestCapacity(equipResource.getRestCapacity().add(workPlan.getHourQuota())); |
|
|
|
|
equipResourceService.updateById(equipResource); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
//还原人力资源
|
|
|
|
|
if(workPlan.getPersonResourceIds() != null){ |
|
|
|
|
List<PersonResourceEntity> personResourceList = personResourceService.list(Wrappers.<PersonResourceEntity>lambdaQuery().in(BaseEntity::getId,workPlan.getPersonResourceIds().split(","))); |
|
|
|
|
if(CollectionUtils.isNotEmpty(personResourceList)){ |
|
|
|
|
personResourceList.forEach(item ->{ |
|
|
|
|
item.setIsUsed("0"); |
|
|
|
|
personResourceService.updateById(item); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
//还原人力资源
|
|
|
|
|
if(workPlan.getPersonResourceIds() != null){ |
|
|
|
|
List<PersonResourceEntity> personResourceList = personResourceService.list(Wrappers.<PersonResourceEntity>lambdaQuery().in(BaseEntity::getId,workPlan.getPersonResourceIds().split(","))); |
|
|
|
|
if(CollectionUtils.isNotEmpty(personResourceList)){ |
|
|
|
|
personResourceList.forEach(item ->{ |
|
|
|
|
item.setIsUsed("0"); |
|
|
|
|
personResourceService.updateById(item); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
workPlanService.deleteLogic(Arrays.asList(workPlan.getId())); |
|
|
|
|
} |
|
|
|
|
workPlan.setIsDeleted(1); |
|
|
|
|
workPlanService.updateById(workPlan); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
this.deleteLogic(Arrays.asList(workOrder.getId())); |
|
|
|
|
} |
|
|
|
|
workOrder.setIsDeleted(1); |
|
|
|
|
this.updateById(workOrder); |
|
|
|
|
|
|
|
|
|
yieldOrder.setStatus(3); |
|
|
|
|
yieldOrderService.updateById(yieldOrder); |
|
|
|
|
|
|
|
|
|
|