diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesProductOrderController.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesProductOrderController.java index 382066f5..c221d90d 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesProductOrderController.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesProductOrderController.java @@ -51,6 +51,20 @@ public class MesProductOrderController extends BaseController { return getDataTable(list); } + /** + * 查询生产工单列表 + * 前置任务、后置任务 + * @param mesProductOrder + * @return + */ + @RequiresPermissions("mes:productOrder:list") + @GetMapping("/allList") + public AjaxResult allList(MesProductOrder mesProductOrder) + { + List list = mesProductOrderService.selectAllListTaskList(mesProductOrder); + return success(list); + } + /** * 导出生产工单列表 */ @@ -94,6 +108,21 @@ public class MesProductOrderController extends BaseController { return toAjax(mesProductOrderService.updateMesProductOrder(mesProductOrder)); } + /** + * 批量修改生产工单 + * @param productOrderList + * @return + */ + @PostMapping("/batchEditingProductOrder") + public AjaxResult batchEditingProductOrder(@RequestBody List productOrderList) { + int result = 0; + for (MesProductOrder productOrder : productOrderList) { + productOrder.setUpdateBy(SecurityUtils.getLoginUser().getUsername()); + result = mesProductOrderService.updateMesProductOrder(productOrder); + } + return toAjax(result); + } + /** * 删除生产工单 */ diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesProductOrderMapper.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesProductOrderMapper.java index 4d42e19c..aff3c8c4 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesProductOrderMapper.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesProductOrderMapper.java @@ -59,8 +59,6 @@ public interface MesProductOrderMapper */ public int deleteMesProductOrderByProductOrderIds(Long[] productOrderIds); - - /** * 查询生产工单 * @@ -69,4 +67,11 @@ public interface MesProductOrderMapper */ public MesProductOrder selectMesProductOrderByPlanCode(String planCode); + /** + * productOrderId为父级的子生产工单列表 + * @param productOrderId + * @return + */ + List selectMesProductOrderListByPreOrderId(Long productOrderId); + } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesProductOrderService.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesProductOrderService.java index 48441abd..c1c06810 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesProductOrderService.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesProductOrderService.java @@ -87,4 +87,12 @@ public interface IMesProductOrderService * @return */ public Boolean verifyBOMIsProduction(Long materialBomId); + + /** + * 查询生产工单列表 + * 前置任务、后置任务 + * @param mesProductOrder + * @return + */ + public List selectAllListTaskList(MesProductOrder mesProductOrder); } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductOrderServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductOrderServiceImpl.java index d8ebae2b..c59549f5 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductOrderServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductOrderServiceImpl.java @@ -1,7 +1,10 @@ package com.hw.mes.service.impl; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import com.hw.common.core.constant.MesConstants; import com.hw.common.core.exception.ServiceException; @@ -219,4 +222,53 @@ public class MesProductOrderServiceImpl implements IMesProductOrderService { return false; } + /** + * 查询生产工单列表 + * 前置任务、后置任务 + * @param mesProductOrder + * @return + */ + @Override + public List selectAllListTaskList(MesProductOrder mesProductOrder) { + Long productOrderId = mesProductOrder.getProductOrderId(); + // 结果列表,用于存储所有关联的订单 + List result = new ArrayList<>(); + // 记录已经访问过的订单ID,防止重复访问 + Set visited = new HashSet<>(); + // 从给定的productOrderId开始,找到最顶级节点 + MesProductOrder topLevelOrder = findTopLevelOrder(productOrderId); + // 从最顶级节点开始递归遍历所有子节点 + if (topLevelOrder != null) { + traverseChildren(result, topLevelOrder, visited); + } + // 返回包含所有关联订单的结果列表 + return result; + } + + // 递归查找最顶级节点 + private MesProductOrder findTopLevelOrder(Long productOrderId) { + MesProductOrder currentOrder = mesProductOrderMapper.selectMesProductOrderByProductOrderId(productOrderId); + while (currentOrder != null && currentOrder.getPreOrderId() != null) { + currentOrder = mesProductOrderMapper.selectMesProductOrderByProductOrderId(currentOrder.getPreOrderId()); + } + return currentOrder; + } + + // 递归遍历子级节点 + private void traverseChildren(List result, MesProductOrder currentOrder, Set visited) { + if (currentOrder == null || visited.contains(currentOrder.getProductOrderId())) { + return; + } + // 将当前订单添加到结果列表 + result.add(currentOrder); + // 将当前订单的ID添加到访问集合中 + visited.add(currentOrder.getProductOrderId()); + // 获取所有以当前订单为父级ID的子订单列表 + List children = mesProductOrderMapper.selectMesProductOrderListByPreOrderId(currentOrder.getProductOrderId()); + for (MesProductOrder child : children) { + // 递归遍历每个子订单 + traverseChildren(result, child, visited); + } + } + } diff --git a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductOrderMapper.xml b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductOrderMapper.xml index 77e1de3c..1201c7ea 100644 --- a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductOrderMapper.xml +++ b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductOrderMapper.xml @@ -39,6 +39,7 @@ + @@ -263,4 +264,9 @@ limit 1 + + diff --git a/hw-ui/src/api/mes/productOrder.js b/hw-ui/src/api/mes/productOrder.js index 7b7d7afc..6a47b1fc 100644 --- a/hw-ui/src/api/mes/productOrder.js +++ b/hw-ui/src/api/mes/productOrder.js @@ -96,3 +96,21 @@ export function getSaleOrders(query) { params: query }) } + +// 查询生产工单列表 不分页 +export function allListProductOrder(query) { + return request({ + url: '/mes/productOrder/allList', + method: 'get', + params: query + }) +} + +// 批量修改生产工单 +export function batchEditingProductOrder(data) { + return request({ + url: '/mes/productOrder/batchEditingProductOrder', + method: 'post', + data: data + }) +} diff --git a/hw-ui/src/router/index.js b/hw-ui/src/router/index.js index 7baa9e58..aae88c24 100644 --- a/hw-ui/src/router/index.js +++ b/hw-ui/src/router/index.js @@ -296,6 +296,20 @@ export const dynamicRoutes = [ } ] }, + { + path: '/mes/production-scheduling', + component: Layout, + hidden: true, + permissions: ['mes:productplan:edit'], + children: [ + { + path: 'index/:productOrderId(\\d+)', + component: () => import('@/views/mes/productOrder/productionScheduling'), + name: 'productionScheduling', + meta: { title: '工单排产', activeMenu: '/mes/productionScheduling' } + } + ] + }, //查看工单路由,不可审批 { path: "/dms/repairInstanceActivitySelect", diff --git a/hw-ui/src/views/mes/productOrder/index.vue b/hw-ui/src/views/mes/productOrder/index.vue index 95bc1fce..7a3cde76 100644 --- a/hw-ui/src/views/mes/productOrder/index.vue +++ b/hw-ui/src/views/mes/productOrder/index.vue @@ -202,6 +202,13 @@