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 eeab7ea..2cbb6ac 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 @@ -51,6 +51,7 @@ import org.springblade.scheduling.scheduling.vo.WorkOrderVO; import org.springblade.scheduling.scheduling.excel.WorkOrderExcel; import org.springblade.scheduling.scheduling.service.IWorkOrderService; import org.springblade.scheduling.scheduling.wrapper.WorkOrderWrapper; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.*; @@ -72,6 +73,7 @@ public class WorkOrderController extends BladeController { private final IWorkOrderService workOrderService; + private final StringRedisTemplate stringRedisTemplate; /** * 车间订单表 详情 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 1bed6a7..9fdec58 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 @@ -204,10 +204,11 @@ LEFT JOIN MES_WORK_PLAN e ON c.NEXT_WP_ID = e.ID LEFT JOIN BS_PROCESS_SET f ON e.PPS_ID = f.ID LEFT JOIN BS_TEAM_SET g on c.MAKE_TEAM = g.ID + LEFT JOIN MES_WORK_PLAN h on h.wo_id = a.id a.is_deleted = 0 - and (to_char(c.start_time,'YYYY-MM-DD') = #{startTime} or (c.start_time to_date(CONCAT(#{startTime},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS') and c.end_time ]]> to_date(CONCAT(#{startTime},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS'))) + and (to_char(h.start_time,'YYYY-MM-DD') = #{startTime} or (h.start_time to_date(CONCAT(#{startTime},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS') and h.end_time ]]> to_date(CONCAT(#{startTime},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS'))) and a.wo_code = #{woCode} @@ -219,7 +220,23 @@ and d.name = #{processName} - order by a.WO_CODE,c.start_time + GROUP BY + a.WO_CODE, + a.CARD_NO, + a.PART_CODE, + b.PART_NAME, + a.BATCH_NO, + b.product_ident, + b.plate, + b.yp_area, + a.MAKE_QTY, + b.RELEASE_DATE, + d.name, + g.ts_name, + f.name, + a.PLAN_START_DATE, + a.PLAN_END_DATE, + b.DEMAND_DATE 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 e1643f0..caaf475 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 @@ -82,13 +82,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl CRAFT_LOCK_MAP = new ConcurrentHashMap<>(); // 获取工艺ID对应的锁(不存在则创建) @@ -115,7 +115,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list = - yieldOrderService.list(Wrappers.lambdaQuery().eq(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate)); + yieldOrderService.list(Wrappers.lambdaQuery().eq(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate)); log.info("待排产订单数量为:" + list.size()); if (CollectionUtils.isNotEmpty(list)) { //校验已排产订单 @@ -154,23 +154,23 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> planMap = dealCommonCraftOrders(); + Map> planMap = dealCommonCraftOrders(); //多线程排产 ExecutorService threadPool = new ThreadPoolExecutor( map.size(), map.size(), 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), r -> new Thread(r, "scheduling-thread-" + System.currentTimeMillis())); map.forEach((workcenter, orders) -> { - threadPool.execute(() -> allocateResources(orders,personAbilityMap,mainProducerMap,planMap)); + threadPool.execute(() -> allocateResources(orders, personAbilityMap, mainProducerMap, planMap)); }); } } @Override - public Map> schedulingBoard(WorkOrderDto workOrder) { + public Map> 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)); for (Map.Entry> entry : woCodeGroup.entrySet()) { @@ -195,7 +195,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl workOrderEntityList) { - List requestList = new ArrayList<>(); + @Override + public void sendWorkOrderToOldMes(List workOrderEntityList) { + List requestList = new ArrayList<>(); - for (WorkOrderEntity workOrderEntity : workOrderEntityList) { - JSONObject requestJson = new JSONObject(); + for (WorkOrderEntity workOrderEntity : workOrderEntityList) { + JSONObject requestJson = new JSONObject(); - List workPlanList = workPlanService.list(Wrappers.lambdaQuery() - .eq(WorkPlanEntity::getWoId, workOrderEntity.getId())); + List workPlanList = workPlanService.list(Wrappers.lambdaQuery() + .eq(WorkPlanEntity::getWoId, workOrderEntity.getId())); - requestJson.put("workOrder", workOrderEntity); - requestJson.put("workPlanList", workPlanList); - requestList.add(requestJson); - } + requestJson.put("workOrder", workOrderEntity); + requestJson.put("workPlanList", workPlanList); + requestList.add(requestJson); + } - // 向旧MES推送排产结果数据 - String url = oldMesUrl + pushApsResult; - try { - HttpUtil.post(url, JSONObject.toJSONString(requestList)); - } catch (Exception e) { - e.printStackTrace(); - } - } + // 向旧MES推送排产结果数据 + String url = oldMesUrl + pushApsResult; + try { + HttpUtil.post(url, JSONObject.toJSONString(requestList)); + } catch (Exception e) { + e.printStackTrace(); + } + } @Override public List schedulingCount(WorkOrderDto workOrder) { - if(StringUtils.isNotEmpty(workOrder.getStartTime())){ + if (StringUtils.isNotEmpty(workOrder.getStartTime())) { workOrder.setStartTime(workOrder.getStartTime().concat(" 00:00:00")); } - if(StringUtils.isNotEmpty(workOrder.getEndTime())){ + if (StringUtils.isNotEmpty(workOrder.getEndTime())) { workOrder.setEndTime(workOrder.getEndTime().concat(" 23:59:59")); } List list = baseMapper.selectSchedulingCount(workOrder); list.forEach(item -> { - item.setSchedulingRate(String.format("%.2f", (double)item.getSchedulingCount()/item.getTotalCount()*100)); + item.setSchedulingRate(String.format("%.2f", (double) item.getSchedulingCount() / item.getTotalCount() * 100)); }); return list; } @@ -291,26 +291,26 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list) { - //查询订单下的工序,计算cr值 - for (YieldOrderEntity entity : list) { - List craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, entity.getId())); - //定义订单总工时 - BigDecimal total = new BigDecimal(0); - for (YieldOrderCraftEntity craftEntity : craftList) { - total = total.add(craftEntity.getHourQuota()); - } - //换算成天 - total = total.divide(BigDecimal.valueOf(1440), 2, RoundingMode.HALF_UP); - if(total.compareTo(new BigDecimal(0)) == 0){ + //查询订单下的工序,计算cr值 + for (YieldOrderEntity entity : list) { + List craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, entity.getId())); + //定义订单总工时 + BigDecimal total = new BigDecimal(0); + for (YieldOrderCraftEntity craftEntity : craftList) { + total = total.add(craftEntity.getHourQuota()); + } + //换算成天 + total = total.divide(BigDecimal.valueOf(1440), 2, RoundingMode.HALF_UP); + if (total.compareTo(new BigDecimal(0)) == 0) { entity.setCrValue(new BigDecimal(0)); continue; } - //获取交期剩余天数 - BigDecimal restDays = new BigDecimal(TimeUnit.DAYS.convert(entity.getDemandDate().getTime() - DateUtil.now().getTime(), TimeUnit.MILLISECONDS)); - //计算cr值剩余交期天数/生产所需额定时长 - entity.setCrValue(restDays.divide(total, 2, RoundingMode.HALF_UP)); - } - } + //获取交期剩余天数 + BigDecimal restDays = new BigDecimal(TimeUnit.DAYS.convert(entity.getDemandDate().getTime() - DateUtil.now().getTime(), TimeUnit.MILLISECONDS)); + //计算cr值剩余交期天数/生产所需额定时长 + entity.setCrValue(restDays.divide(total, 2, RoundingMode.HALF_UP)); + } + } /** @@ -321,8 +321,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list,Map personAbilityMap,Map mainProducerMap,Map> planMap) { + @Transactional(rollbackFor = Exception.class) + public void allocateResources(List list, Map personAbilityMap, Map mainProducerMap, Map> planMap) { List workOrderList = new ArrayList<>(); for (YieldOrderEntity order : list) { try { @@ -330,9 +330,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl workPlanList = new ArrayList<>(); //查询所有工序 - List craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId,27).orderByAsc(YieldOrderCraftEntity::getProcessNo)); + List craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId, 27).orderByAsc(YieldOrderCraftEntity::getProcessNo)); List workCenterList = craftList.stream().filter(item -> item.getWorkCenterId() != null).map(YieldOrderCraftEntity::getWorkCenterId).collect(Collectors.toList()); - if(workCenterList.size() != craftList.size()){ + if (workCenterList.size() != craftList.size()) { order.setErrorInfo("工序信息不完整,含有未匹配作业中心的工序"); order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCategory()); yieldOrderService.updateById(order); @@ -342,33 +342,33 @@ public class WorkOrderServiceImpl extends BaseServiceImpl 0 ? prevProcessEnd : workPlanList.get(workPlanList.size()-1).getEndTime(); + prevProcessEnd = prevProcessEnd.compareTo(workPlanList.get(workPlanList.size() - 1).getEndTime()) > 0 ? prevProcessEnd : workPlanList.get(workPlanList.size() - 1).getEndTime(); } for (int i = 0; i < craftList.size(); i++) { YieldOrderCraftEntity craft = craftList.get(i); if ("设备".equals(mainProducerMap.get(craft.getPpsId()))) { //根据作业中心查询所有设备 - List equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId()).eq(EquipAbilityEntity::getCraftId,craft.getCaId())); - if(CollectionUtils.isEmpty(equipAbilityList)){ + List equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId()).eq(EquipAbilityEntity::getCraftId, craft.getCaId())); + if (CollectionUtils.isEmpty(equipAbilityList)) { order.setErrorInfo("设备未匹配到对应的设备能力"); order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCategory()); yieldOrderService.updateById(order); isSchecuding = false; break; } - Map> equipAbilityMap = equipAbilityList.stream().collect(Collectors.groupingBy(EquipAbilityEntity::getEquipOrder)); + Map> equipAbilityMap = equipAbilityList.stream().collect(Collectors.groupingBy(EquipAbilityEntity::getEquipOrder)); //匹配设备资源 //获取下一个整数点 LocalDateTime dateTime = getNextIntegerTime(prevProcessEnd); - for(Map.Entry> entry : equipAbilityMap.entrySet()){ + for (Map.Entry> entry : equipAbilityMap.entrySet()) { //根据时间点获取所有设备资源 - List equipResourceList = equipResourceService.list(Wrappers.lambdaQuery().eq(EquipResourceEntity::getCraftId,craft.getCaId()).eq(EquipResourceEntity::getWorkCenterId,craft.getWorkCenterId()).ge(EquipResourceEntity::getStartTime, dateTime).eq(EquipResourceEntity::getIsUsed, 0).in(EquipResourceEntity::getEquipOrder, entry.getKey())); - if(CollectionUtils.isEmpty(equipResourceList)){ + List equipResourceList = equipResourceService.list(Wrappers.lambdaQuery().eq(EquipResourceEntity::getCraftId, craft.getCaId()).eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()).ge(EquipResourceEntity::getStartTime, dateTime).eq(EquipResourceEntity::getIsUsed, 0).in(EquipResourceEntity::getEquipOrder, entry.getKey())); + if (CollectionUtils.isEmpty(equipResourceList)) { order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCategory()); - order.setErrorInfo("工序:"+craft.getPpsId()+"未匹配到对应的设备资源"); + order.setErrorInfo("工序:" + craft.getPpsId() + "未匹配到对应的设备资源"); yieldOrderService.updateById(order); isSchecuding = false; break; @@ -394,9 +394,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl capacityList = capacitySplit(equipResourceMap,sumCapacity); - for(BigDecimal capacity : capacityList){ - for(Map.Entry> entry1 : equipResourceMap.entrySet()){ + List capacityList = capacitySplit(equipResourceMap, sumCapacity); + for (BigDecimal capacity : capacityList) { + for (Map.Entry> entry1 : equipResourceMap.entrySet()) { Boolean isOccupied = false; List resourceList = entry1.getValue(); for (EquipResourceEntity equipResource : resourceList) { @@ -407,9 +407,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl equipWrapper = new LambdaUpdateWrapper<>(); - equipWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); - equipWrapper.eq(EquipResourceEntity::getDateTime,equipResource.getDateTime()); - equipWrapper.eq(EquipResourceEntity::getPeriod,equipResource.getPeriod()); - equipWrapper.eq(EquipResourceEntity::getStartTime,equipResource.getStartTime()); - equipWrapper.eq(EquipResourceEntity::getEndTime,equipResource.getEndTime()); - equipResourceService.update(equipResource,equipWrapper); + equipWrapper.eq(EquipResourceEntity::getEquipCode, equipResource.getEquipCode()); + equipWrapper.eq(EquipResourceEntity::getDateTime, equipResource.getDateTime()); + equipWrapper.eq(EquipResourceEntity::getPeriod, equipResource.getPeriod()); + equipWrapper.eq(EquipResourceEntity::getStartTime, equipResource.getStartTime()); + equipWrapper.eq(EquipResourceEntity::getEndTime, equipResource.getEndTime()); + equipResourceService.update(equipResource, equipWrapper); //该设备后续所有开始时间小于当前结束时间的时间段都变为不可用 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); updateWrapper.lt(EquipResourceEntity::getStartTime, equipResource.getEndTime()); updateWrapper.gt(EquipResourceEntity::getStartTime, equipResource.getStartTime()); - updateWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); + updateWrapper.eq(EquipResourceEntity::getEquipCode, equipResource.getEquipCode()); EquipResourceEntity equipResource1 = new EquipResourceEntity(); equipResource1.setIsUsed("1"); equipResourceService.update(equipResource1, updateWrapper); @@ -465,7 +465,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list) { //根据作业中心分组 - Map> workPlanMap = list.stream().collect(Collectors.groupingBy(WorkPlanEntity::getWorkCenterId)); - for(Map.Entry> entry : workPlanMap.entrySet()){ + Map> workPlanMap = list.stream().collect(Collectors.groupingBy(WorkPlanEntity::getWorkCenterId)); + for (Map.Entry> entry : workPlanMap.entrySet()) { List workPlanList = entry.getValue(); int startIndex = -1; int endIndex = -1; - for(int i =0;i0;i--){ - if(workPlanList.get(i).getEndTime() != null){ + for (int i = workPlanList.size() - 1; i > 0; i--) { + if (workPlanList.get(i).getEndTime() != null) { endIndex = i; break; } } - if(startIndex != -1){ + if (startIndex != -1) { // 向前推算(锚点之前的计划:从锚点前一个开始,依次往前) for (int i = startIndex - 1; i >= 0; i--) { WorkPlanEntity current = workPlanList.get(i); @@ -729,7 +729,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl capacitySplit(Map> map,BigDecimal sumCapacity){ + public List capacitySplit(Map> map, BigDecimal sumCapacity) { List equipResourceList1 = map.values().stream().flatMap(List::stream).collect(Collectors.toList()); - BigDecimal maxRestCapacity = equipResourceList1.stream().filter(entity -> entity.getRestCapacity().compareTo(BigDecimal.ZERO) >= 0).map(EquipResourceEntity::getRestCapacity).max(BigDecimal::compareTo).orElseThrow(() -> new IllegalArgumentException("列表中无有效的 restCapacity 数值"));; + BigDecimal maxRestCapacity = equipResourceList1.stream().filter(entity -> entity.getRestCapacity().compareTo(BigDecimal.ZERO) >= 0).map(EquipResourceEntity::getRestCapacity).max(BigDecimal::compareTo).orElseThrow(() -> new IllegalArgumentException("列表中无有效的 restCapacity 数值")); + ; List capacityList = new ArrayList<>(); - if(sumCapacity.compareTo(maxRestCapacity) > 0){ + if (sumCapacity.compareTo(maxRestCapacity) > 0) { // 计算商(fullCount)和余数(remainder):divideAndRemainder返回[商, 余数] BigDecimal[] divideResult = sumCapacity.divideAndRemainder(maxRestCapacity); BigDecimal fullCountBig = divideResult[0]; // 商(如11/2=5) @@ -785,11 +786,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl dt.format(dateTimeFormatter)) .orElse(null); } - public void checkSchedulingOrder(List list){ + + public void checkSchedulingOrder(List list) { //判断待排产优先级,1级所有1级往后订单重新排产,2级订单重新排4/5级订单 List priorityList = list.stream().map(YieldOrderEntity::getPriorityAps).collect(Collectors.toList()); - if(priorityList.contains(1)){ + if (priorityList.contains(1)) { //查询所有非一级的待生产订单 - List schedulingOrderList = yieldOrderService.list(Wrappers.lambdaQuery().ne(YieldOrderEntity::getPriorityAps,1).eq(YieldOrderEntity::getStatus,4)); + List schedulingOrderList = yieldOrderService.list(Wrappers.lambdaQuery().ne(YieldOrderEntity::getPriorityAps, 1).eq(YieldOrderEntity::getStatus, 4)); //校验已排产订单资源占用情况 checkResource(schedulingOrderList); } - if(priorityList.contains(2)){ + if (priorityList.contains(2)) { //查询4/5级的待生产订单 - List schedulingOrderList = yieldOrderService.list(Wrappers.lambdaQuery().in(YieldOrderEntity::getPriorityAps,Arrays.asList("4","5")).eq(YieldOrderEntity::getStatus,4)); + List schedulingOrderList = yieldOrderService.list(Wrappers.lambdaQuery().in(YieldOrderEntity::getPriorityAps, Arrays.asList("4", "5")).eq(YieldOrderEntity::getStatus, 4)); checkResource(schedulingOrderList); } } - public void checkResource(List list){ - if(CollectionUtils.isNotEmpty(list)){ + public void checkResource(List list) { + if (CollectionUtils.isNotEmpty(list)) { //根据订单查询设备资源 - for(YieldOrderEntity yieldOrder : list){ + for (YieldOrderEntity yieldOrder : list) { //查询相关车间订单 - WorkOrderEntity workOrder = this.getOne(Wrappers.lambdaQuery().eq(WorkOrderEntity::getYoId,yieldOrder.getId())); - if(workOrder != null){ - List schedulingPlanList = workPlanService.list(Wrappers.lambdaQuery().eq(WorkPlanEntity::getWoId,workOrder.getId())); - if(CollectionUtils.isNotEmpty(schedulingPlanList)){ - for(WorkPlanEntity workPlan : schedulingPlanList){ + WorkOrderEntity workOrder = this.getOne(Wrappers.lambdaQuery().eq(WorkOrderEntity::getYoId, yieldOrder.getId())); + if (workOrder != null) { + List schedulingPlanList = workPlanService.list(Wrappers.lambdaQuery().eq(WorkPlanEntity::getWoId, workOrder.getId())); + if (CollectionUtils.isNotEmpty(schedulingPlanList)) { + for (WorkPlanEntity workPlan : schedulingPlanList) { //还原设备资源 - if(workPlan.getEquipResourceId() != null){ + if (workPlan.getEquipResourceId() != null) { EquipResourceEntity equipResource = equipResourceService.getById(workPlan.getEquipResourceId()); equipResource.setIsUsed("0"); equipResource.setRestCapacity(equipResource.getRestCapacity().add(workPlan.getHourQuota())); LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); - updateWrapper.eq(EquipResourceEntity::getDateTime,equipResource.getDateTime()); - updateWrapper.eq(EquipResourceEntity::getPeriod,equipResource.getPeriod()); - equipResourceService.update(equipResource,updateWrapper); + updateWrapper.eq(EquipResourceEntity::getEquipCode, equipResource.getEquipCode()); + updateWrapper.eq(EquipResourceEntity::getDateTime, equipResource.getDateTime()); + updateWrapper.eq(EquipResourceEntity::getPeriod, equipResource.getPeriod()); + equipResourceService.update(equipResource, updateWrapper); } //还原人力资源 @@ -960,33 +964,33 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> dealCommonCraftOrders(){ + public Map> dealCommonCraftOrders() { List commonCraftOrderList = yieldOrderService.selectCommonCraftOrderList(); - Map> planMap = new HashMap<>(); - if(CollectionUtils.isNotEmpty(commonCraftOrderList)){ + Map> planMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(commonCraftOrderList)) { //对订单进行排序,每5个相同workCenterId的为一组,实现负载均衡 commonCraftOrderList = sortByWorkcenterIdPer5Group(commonCraftOrderList); //对前置公共工序进行排产 //获取公共工序设备能力,根据工艺能力查询,写死ID是27 - EquipAbilityEntity equipAbility = equipAbilityService.getOne(Wrappers.lambdaQuery().eq(EquipAbilityEntity::getCraftId,27)); + EquipAbilityEntity equipAbility = equipAbilityService.getOne(Wrappers.lambdaQuery().eq(EquipAbilityEntity::getCraftId, 27)); BigDecimal standardProcessAbility = equipAbility.getStandardProcessAbility(); //获取所有空闲的公共工序资源 List equipResourceList = equipResourceService.selectCommonCraftList(); - for(YieldOrderEntity order : commonCraftOrderList){ + for (YieldOrderEntity order : commonCraftOrderList) { List workPlanList = new ArrayList<>(); //获取相关工序 - YieldOrderCraftEntity craft = yieldOrderCraftService.getOne(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId,order.getId()).eq(YieldOrderCraftEntity::getCaId,equipAbility.getCraftId())); - if(craft == null){ + YieldOrderCraftEntity craft = yieldOrderCraftService.getOne(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).eq(YieldOrderCraftEntity::getCaId, equipAbility.getCraftId())); + if (craft == null) { continue; } //计算订单总产能 BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(100)).multiply(BigDecimal.valueOf(order.getYpQty())); //计算需要占用几个时间段 - int period = sumCapacity.divide(standardProcessAbility,0, RoundingMode.CEILING).intValue(); + int period = sumCapacity.divide(standardProcessAbility, 0, RoundingMode.CEILING).intValue(); - for(int i=0;i list){ - for(WorkPlanEntity workPlan : list){ + public void restoreResource(List list) { + for (WorkPlanEntity workPlan : list) { //还原设备资源 - if(workPlan.getEquipResourceId() != null){ + if (workPlan.getEquipResourceId() != null) { EquipResourceEntity equipResource = equipResourceService.getById(workPlan.getEquipResourceId()); equipResource.setIsUsed("0"); equipResource.setRestCapacity(equipResource.getRestCapacity().add(workPlan.getHourQuota())); LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); - updateWrapper.eq(EquipResourceEntity::getDateTime,equipResource.getDateTime()); - updateWrapper.eq(EquipResourceEntity::getPeriod,equipResource.getPeriod()); - equipResourceService.update(equipResource,updateWrapper); + updateWrapper.eq(EquipResourceEntity::getEquipCode, equipResource.getEquipCode()); + updateWrapper.eq(EquipResourceEntity::getDateTime, equipResource.getDateTime()); + updateWrapper.eq(EquipResourceEntity::getPeriod, equipResource.getPeriod()); + equipResourceService.update(equipResource, updateWrapper); } //还原人力资源 - if(workPlan.getPersonResourceIds() != null){ - List personResourceList = personResourceService.list(Wrappers.lambdaQuery().in(BaseEntity::getId,workPlan.getPersonResourceIds().split(","))); - if(CollectionUtils.isNotEmpty(personResourceList)){ - personResourceList.forEach(item ->{ + if (workPlan.getPersonResourceIds() != null) { + List personResourceList = personResourceService.list(Wrappers.lambdaQuery().in(BaseEntity::getId, workPlan.getPersonResourceIds().split(","))); + if (CollectionUtils.isNotEmpty(personResourceList)) { + personResourceList.forEach(item -> { item.setIsUsed("0"); personResourceService.updateById(item); }); } } - if(workPlan.getId() != null){ + if (workPlan.getId() != null) { workPlanService.deleteLogic(Arrays.asList(workPlan.getId())); }