diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/entity/YieldOrderCraft.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/entity/YieldOrderCraft.java index 2c58f38..eca3d6b 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/entity/YieldOrderCraft.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/entity/YieldOrderCraft.java @@ -76,8 +76,8 @@ public class YieldOrderCraft extends BaseEntity { /** * 加工中心 */ - @TableField(value = "WORK_CENTER") - private Long workCenter; + @TableField(value = "WORK_CENTER_ID") + private Long workCenterId; /** * 加工班组 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java index 3635a0e..98114d0 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java @@ -306,7 +306,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl { List> selectTeamByWorkCenter(@Param("workCenterId") Long workCenterId); + List selectCommonCraftList(); + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/EquipResourceMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/EquipResourceMapper.xml index d397e3f..30a7926 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/EquipResourceMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/EquipResourceMapper.xml @@ -45,4 +45,14 @@ and a.work_center_id = #{workCenterId} + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java index 6923a1a..af6ac8c 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java @@ -64,4 +64,7 @@ public interface WorkOrderMapper extends BaseMapper { List selectWorkOrderList(WorkOrderDto workOrderDto); + + String getMaxByCodePattern(@Param("woCode") String woCode); + } 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 72cfe08..08ebbbe 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 @@ -88,6 +88,11 @@ + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/YieldOrderMapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/YieldOrderMapper.java index f0503fc..64d1608 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/YieldOrderMapper.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/YieldOrderMapper.java @@ -61,4 +61,5 @@ public interface YieldOrderMapper extends BaseMapper { */ List export(@Param("ew") Wrapper queryWrapper); + List selectCommonCraftOrderList(); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/YieldOrderMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/YieldOrderMapper.xml index 74d354b..95973f8 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/YieldOrderMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/YieldOrderMapper.xml @@ -85,4 +85,18 @@ SELECT * FROM MES_YIELD_ORDER ${ew.customSqlSegment} + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IEquipResourceService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IEquipResourceService.java index db9dcde..a52458a 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IEquipResourceService.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IEquipResourceService.java @@ -60,4 +60,6 @@ public interface IEquipResourceService extends BaseService public void initEquipResource(); + List selectCommonCraftList(); + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IYieldOrderService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IYieldOrderService.java index 0a33389..33e13b0 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IYieldOrderService.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IYieldOrderService.java @@ -59,4 +59,6 @@ public interface IYieldOrderService extends BaseService { */ List export(Wrapper queryWrapper); + List selectCommonCraftOrderList(); + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java index d7cefde..9e3e129 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java @@ -97,10 +97,15 @@ public class EquipResourceServiceImpl extends BaseServiceImpl selectCommonCraftList() { + return null; + } + public void generateData(String day){ //获取设备能力列表 - List equipAbilityList = equipAbilityService.list(); + List equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().isNotNull(EquipAbilityEntity::getStandardTime)); if(CollectionUtils.isNotEmpty(equipAbilityList)){ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm"); @@ -135,6 +140,7 @@ public class EquipResourceServiceImpl extends BaseServiceImpl map : teamIdList){ @@ -179,7 +185,7 @@ public class EquipResourceServiceImpl extends BaseServiceImpl map : teamIdList){ 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 88e180b..4d23a3e 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 @@ -30,9 +30,9 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; import org.springblade.common.constant.YieldOrderConst; import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseServiceImpl; @@ -112,20 +112,22 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list = yieldOrderService.list(Wrappers.lambdaQuery().eq(BaseEntity::getStatus, YieldOrderConst.STATUS_APS)); if (CollectionUtils.isNotEmpty(list)) { + //校验已排产订单 + checkSchedulingOrder(list); //初始化人员能力 - List personAbilityEntityList = personAbilityService.list(); + List personAbilityEntityList = personAbilityService.list(Wrappers.lambdaQuery().isNotNull(PersonAbilityEntity::getWorkCenterId).isNotNull(PersonAbilityEntity::getProcessId).isNotNull(PersonAbilityEntity::getCraftId)); Map personAbilityMap = new HashMap<>(); personAbilityEntityList.forEach(personAbility -> { personAbilityMap.put(personAbility.getWorkCenterId() + "-" + personAbility.getProcessId() + "-" + personAbility.getCraftId(), personAbility); }); //初始化主生产者 - List mainProducerList = mainProducerService.list(); + List mainProducerList = mainProducerService.list(Wrappers.lambdaQuery().isNotNull(MainProducerEntity::getProcessId)); Map mainProducerMap = new HashMap<>(); mainProducerList.forEach(item -> { mainProducerMap.put(item.getProcessId(), item.getMainProducer()); }); //计算cr值 - calculateCr(list); + // calculateCr(list); //根据作业中心将订单分组,并根据优先级、cr值、订单需求数量、计划下达时间4个维度进行组内排序 Map> map = list.stream() @@ -137,20 +139,22 @@ public class WorkOrderServiceImpl extends BaseServiceImpl { // 排序逻辑:优先级升序 → CR值降序 → 数量降序 → 时间升序 list1.sort(Comparator.comparingInt(YieldOrderEntity::getPriorityAps).reversed() - .thenComparing((e1, e2) -> e2.getCrValue().compareTo(e1.getCrValue())) + //.thenComparing((e1, e2) -> e2.getCrValue().compareTo(e1.getCrValue())) .thenComparingInt(YieldOrderEntity::getYpQty).reversed() .thenComparing(YieldOrderEntity::getReleaseDate)); return list1; } ) )); + //处理带有公共前置工序的订单 + 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)); + threadPool.execute(() -> allocateResources(orders,personAbilityMap,mainProducerMap,planMap)); }); } @@ -186,6 +190,12 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> groupedMap, int batchSize) { - // 筛选出需要处理的公共工序分组 - List publicProcessWC = Arrays.asList("008", "009", "012"); - Map> wcIterators = new HashMap<>(); - - // 为每个公共工序分组创建迭代器 - for (String wc : publicProcessWC) { - if (groupedMap.containsKey(wc)) { - wcIterators.put(wc, groupedMap.get(wc).iterator()); - } - } - // 转换为List,保证迭代顺序(Map的values()顺序不保证,用List固定顺序) - List> iteratorList = wcIterators.values().stream() - .filter(Objects::nonNull) // 过滤null迭代器 - .filter(Iterator::hasNext) // 过滤已耗尽的迭代器 - .collect(Collectors.toList()); - - int batchNumber = 1; - boolean hasMoreElements = true; - - while (hasMoreElements) { - hasMoreElements = false; // 默认无更多元素,后续有元素则置为true - - // 遍历所有迭代器,逐个轮换处理 - for (int i = 0; i < iteratorList.size(); i++) { - Iterator currentIterator = iteratorList.get(i); - List currentBatch = new ArrayList<>(batchSize); - - // 从当前迭代器取元素:最多取5个,或取完剩余所有 - int count = 0; - while (currentIterator.hasNext() && count < batchSize) { - currentBatch.add(currentIterator.next()); - count++; - hasMoreElements = true; // 标记有未处理元素 - } - - // 若当前批次有元素,执行资源匹配 - if (!currentBatch.isEmpty()) { - System.out.printf("=== 第%d批资源匹配(迭代器索引:%d,批次大小:%d)===\n", - batchNumber, i, currentBatch.size()); - // allocateResources(currentBatch); // 实际业务处理 - batchNumber++; - } - - // 优化:若当前迭代器已耗尽,从列表中移除(避免后续无效遍历) - if (!currentIterator.hasNext()) { - iteratorList.remove(i); - i--; // 移除后索引前移,避免跳过下一个迭代器 - } - } - } - } /** * TODO:资源匹配,不含超声波水洗 @@ -458,31 +431,57 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list,Map personAbilityMap,Map mainProducerMap) { + public void allocateResources(List list,Map personAbilityMap,Map mainProducerMap,Map> planMap) { for (YieldOrderEntity order : list) { + //是否可以排产 - Boolean isSchecuding = false; + Boolean isSchecuding = true; List workPlanList = new ArrayList<>(); //查询所有工序 List craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).orderByAsc(YieldOrderCraftEntity::getProcessNo)); - List workCenterList = craftList.stream().map(YieldOrderCraftEntity::getWorkCenterId).collect(Collectors.toList()); - //根据作业中心查询所有设备 - List equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, workCenterList)); - Map> equipAbilityMap = equipAbilityList.stream().collect(Collectors.groupingBy(EquipAbilityEntity::getEquipOrder)); + List workCenterList = craftList.stream().filter(item -> item.getWorkCenterId() != null).map(YieldOrderCraftEntity::getWorkCenterId).collect(Collectors.toList()); + if(workCenterList.size() != craftList.size()){ + order.setErrorInfo("工序信息不完整,含有未匹配作业中心的工序"); + order.setStatus(6); + yieldOrderService.updateById(order); + continue; + } //上一道工序结束时间 LocalDateTime prevProcessEnd = LocalDateTime.now(); - + //判断是否有公共工序已经处理了,如果有则重新定义workPlanList,获取公共工序的最后结束时间和当前时间做比较,取大的作为上一道工序结束时间 + if(planMap.containsKey(order.getYoCode())){ + workPlanList = planMap.get(order.getYoCode()); + 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())); + if(CollectionUtils.isEmpty(equipAbilityList)){ + order.setErrorInfo("设备未匹配到对应的设备能力"); + order.setStatus(6); + yieldOrderService.updateById(order); + isSchecuding = false; + break; + } + Map> equipAbilityMap = equipAbilityList.stream().collect(Collectors.groupingBy(EquipAbilityEntity::getEquipOrder)); + //匹配设备资源 //获取下一个整数点 LocalDateTime dateTime = getNextIntegerTime(prevProcessEnd); for(Map.Entry> entry : equipAbilityMap.entrySet()){ //根据时间点获取所有设备资源 - List equipResourceList = equipResourceService.list(Wrappers.lambdaQuery().ge(EquipResourceEntity::getStartTime, dateTime).eq(EquipResourceEntity::getIsUsed, 0).in(EquipResourceEntity::getEquipOrder, entry.getKey())); + 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(6); + order.setErrorInfo("工序:"+craft+"未匹配到对应的设备资源"); + yieldOrderService.updateById(order); + isSchecuding = false; + break; + } //设备资源按照时间段分组并按时间排序,然后再每个组内按照剩余产能倒序排序 Map> equipResourceMap = equipResourceList.stream() .collect(Collectors.groupingBy( @@ -537,6 +536,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl 0){ //通过加锁的方式保证每次查询到的人力资源都是最新的 Long craftId = craft.getCaId(); Lock craftLock = getCraftLock(craftId); @@ -596,11 +610,17 @@ public class WorkOrderServiceImpl extends BaseServiceImpl { @@ -854,4 +885,205 @@ public class WorkOrderServiceImpl extends BaseServiceImpl dt.format(dateTimeFormatter)) .orElse(null); } + public void checkSchedulingOrder(List list){ + //判断待排产优先级,1级所有1级往后订单重新排产,2级订单重新排4/5级订单 + List priorityList = list.stream().map(YieldOrderEntity::getPriorityAps).collect(Collectors.toList()); + if(priorityList.contains(1)){ + //查询所有非一级的待生产订单 + List schedulingOrderList = yieldOrderService.list(Wrappers.lambdaQuery().ne(YieldOrderEntity::getPriorityAps,1).eq(YieldOrderEntity::getStatus,4)); + //校验已排产订单资源占用情况 + checkResource(schedulingOrderList); + } + if(priorityList.contains(2)){ + //查询4/5级的待生产订单 + 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)){ + //根据订单查询设备资源 + for(YieldOrderEntity yieldOrder : list){ + //查询相关车间订单 + WorkOrderEntity workOrder = this.getOne(Wrappers.lambdaQuery().eq(WorkOrderEntity::getYoId,yieldOrder.getId())); + List schedulingPlanList = workPlanService.list(Wrappers.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 personResourceList = personResourceService.list(Wrappers.lambdaQuery().in(BaseEntity::getId,workPlan.getPersonResourceIds().split(","))); + if(CollectionUtils.isNotEmpty(personResourceList)){ + personResourceList.forEach(item ->{ + item.setIsUsed("0"); + personResourceService.updateById(item); + }); + } + } + workPlan.setIsDeleted(1); + workPlanService.updateById(workPlan); + } + + } + workOrder.setIsDeleted(1); + this.updateById(workOrder); + yieldOrder.setStatus(3); + yieldOrderService.updateById(yieldOrder); + + } + } + } + + public List sortByWorkcenterIdPer5Group(List list) { + + // 按 workcenterId 分组(保留原列表中该 workcenterId 的顺序) + Map> groupByWorkcenter = list.stream() + .collect(Collectors.groupingBy( + YieldOrderEntity::getWorkCenterId, + LinkedHashMap::new, // 保留分组的插入顺序(可选,按业务需求) + Collectors.toList() + )); + + // 对每个分组按每5个拆分批次,记录所有批次 + // key: workcenterId, value: 该workcenterId的批次列表(每个批次最多5个元素) + Map>> batchMap = new LinkedHashMap<>(); + int maxBatchCount = 0; // 所有分组中最大的批次数量(用于轮询) + + for (Map.Entry> entry : groupByWorkcenter.entrySet()) { + Long workCenterId = entry.getKey(); + List entityList = entry.getValue(); + + // 拆分批次(每5个一组) + List> batches = splitListPer5(entityList); + batchMap.put(workCenterId, batches); + + // 更新最大批次数量 + maxBatchCount = Math.max(maxBatchCount, batches.size()); + } + + // 轮询每个批次,拼接最终列表 + List resultList = new ArrayList<>(); + for (int batchIndex = 0; batchIndex < maxBatchCount; batchIndex++) { + // 遍历每个workcenterId,取当前批次的元素 + for (List> batches : batchMap.values()) { + // 若当前批次存在,则加入结果列表 + if (batchIndex < batches.size()) { + resultList.addAll(batches.get(batchIndex)); + } + } + } + + return resultList; + } + + /** + * 将列表按每5个元素拆分(最后一批可不足5个) + */ + private List> splitListPer5(List list) { + List> batches = new ArrayList<>(); + int size = list.size(); + int batchSize = 5; + + for (int i = 0; i < size; i += batchSize) { + int end = Math.min(i + batchSize, size); + batches.add(list.subList(i, end)); + } + + return batches; + } + + public Map> dealCommonCraftOrders(){ + List commonCraftOrderList = yieldOrderService.selectCommonCraftOrderList(); + 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)); + BigDecimal standardProcessAbility = equipAbility.getStandardProcessAbility(); + //获取所有空闲的公共工序资源 + List equipResourceList = equipResourceService.selectCommonCraftList(); + for(YieldOrderEntity order : commonCraftOrderList){ + List workPlanList = new ArrayList<>(); + //获取相关工序 + YieldOrderCraftEntity craft = yieldOrderCraftService.getOne(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId,order.getId()).eq(YieldOrderCraftEntity::getCaId,equipAbility.getCraftId())); + //计算订单总产能 + BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(100)).multiply(BigDecimal.valueOf(order.getYpQty())); + //计算需要占用几个时间段 + int period = sumCapacity.divide(standardProcessAbility,0, RoundingMode.CEILING).intValue(); + + for(int i=0;i selectCommonCraftOrderList() { + return baseMapper.selectCommonCraftOrderList(); + } + }