新增装配设置 - 分解模式左侧树平铺接口

This commit is contained in:
gaoqr
2026-07-14 17:31:18 +08:00
parent ac515402c5
commit cfaa9796d1
7 changed files with 129 additions and 0 deletions
@@ -5,6 +5,8 @@ import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.executor.controller.admin.assemblylist.vo.AssemblyListComponentPageReqVO;
import com.cf.imes.module.executor.controller.admin.assemblylist.vo.AssemblyListComponentFlatReqVO;
import com.cf.imes.module.executor.controller.admin.assemblylist.vo.AssemblyListComponentFlatRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPageReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO;
@@ -65,6 +67,14 @@ public class AssemblyListController {
return CommonResult.success(assemblyListService.getComponentList(reqVO));
}
@PostMapping("/flat-list")
@Operation(summary = "装配清单-获取按名称汇总的平铺部件层级列表")
@PreAuthorize("@ss.hasPermission('production:assemblyList:query')")
public CommonResult<List<AssemblyListComponentFlatRespVO>> getComponentFlatList(
@Valid @RequestBody AssemblyListComponentFlatReqVO reqVO) {
return success(assemblyListService.getComponentFlatList(reqVO));
}
@PostMapping("/component/direct-children")
@Operation(summary = "装配清单-获取部件直接下级列表")
@Parameter(name = "componentId", description = "部件 ID", required = true, example = "1024")
@@ -0,0 +1,16 @@
package com.cf.imes.module.executor.controller.admin.assemblylist.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.util.List;
@Data
@Schema(description = "管理后台 - 装配清单平铺部件查询")
public class AssemblyListComponentFlatReqVO {
@NotEmpty
@Schema(description = "订单 ID 列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<Long> orderIds;
}
@@ -0,0 +1,29 @@
package com.cf.imes.module.executor.controller.admin.assemblylist.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 装配清单 - 按名称汇总后的平铺部件。
*/
@Data
@Schema(description = "管理后台 - 装配清单按名称汇总的平铺部件")
public class AssemblyListComponentFlatRespVO {
@Schema(description = "排序代表节点 ID(同名节点中层级最深、ID 最大的节点)")
private Long id;
@Schema(description = "部件名称")
private String name;
@Schema(description = "层级序号")
private String level;
@Schema(description = "同名部件数量")
private Integer count;
@Schema(description = "被汇总的原始部件 ID,按层级倒序、ID 倒序")
private List<Long> componentIds;
}
@@ -17,6 +17,12 @@ import java.util.Set;
*/
@Mapper
public interface OrderComponentMapper extends BaseMapperX<OrderComponentDO> {
/**
* 查询订单下部件id、level、name列表,按层级倒序、id正序
* @param orderIds
* @return
*/
List<OrderComponentDO> selectAllForFlatList(@Param("orderIds") List<Long> orderIds);
/**
* 订单详情部件列表查询
@@ -2,6 +2,8 @@ package com.cf.imes.module.executor.service.assemblylist;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.executor.controller.admin.assemblylist.vo.AssemblyListComponentPageReqVO;
import com.cf.imes.module.executor.controller.admin.assemblylist.vo.AssemblyListComponentFlatReqVO;
import com.cf.imes.module.executor.controller.admin.assemblylist.vo.AssemblyListComponentFlatRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPageReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO;
import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.AssemblyComponentChildPrintReqVO;
@@ -35,6 +37,14 @@ public interface AssemblyListService {
*/
List<OrderComponentRespVO> getComponentList(AssemblyListComponentPageReqVO reqVO);
/**
* 获取按名称汇总的平铺部件层级列表
*
* @param reqVO
* @return
*/
List<AssemblyListComponentFlatRespVO> getComponentFlatList(AssemblyListComponentFlatReqVO reqVO);
/**
* 获取部件的直接下级列表。
*
@@ -19,6 +19,8 @@ import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaUpdateWrapperX;
import com.cf.imes.module.executor.controller.admin.assemblylist.vo.AssemblyListComponentPageReqVO;
import com.cf.imes.module.executor.controller.admin.assemblylist.vo.AssemblyListComponentFlatReqVO;
import com.cf.imes.module.executor.controller.admin.assemblylist.vo.AssemblyListComponentFlatRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPageReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO;
import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.AssemblyComponentChildPrintReqVO;
@@ -179,6 +181,48 @@ public class AssemblyListServiceImpl implements AssemblyListService {
return BeanUtil.copyToList(allNodesOnTopIds, OrderComponentRespVO.class);
}
@Override
public List<AssemblyListComponentFlatRespVO> getComponentFlatList(
AssemblyListComponentFlatReqVO reqVO) {
List<OrderComponentDO> components =
orderComponentMapper.selectAllForFlatList(reqVO.getOrderIds());
if (CollUtil.isEmpty(components)) {
return Collections.emptyList();
}
// 根据父子关系和雪花 ID 生成类似 1、1-1、1-2 的显示序号。
// 底层优先;同一层按雪花 ID 倒序,明确保留 1-1、1-2 这类层级顺序信息。
components.sort(Comparator.comparingInt(OrderComponentDO::getLevel)
.reversed()
.thenComparing(OrderComponentDO::getId, Comparator.reverseOrder()));
Map<String, List<OrderComponentDO>> grouped = components.stream()
.collect(Collectors.groupingBy(OrderComponentDO::getName,
LinkedHashMap::new, Collectors.toList()));
return grouped.values().stream().map(list -> {
// 同名合并时以更低层级(level 数值更大)的节点为准;同层取 ID 更大的节点。
OrderComponentDO representative = list.stream()
.max(Comparator.comparingInt(OrderComponentDO::getLevel)
.thenComparing(OrderComponentDO::getId))
.orElseThrow();
AssemblyListComponentFlatRespVO result = BeanUtil.copyProperties(
representative, AssemblyListComponentFlatRespVO.class);
result.setCount(list.size());
// 数据库 level 从 0 开始,接口返回层级从 1 开始。
result.setLevel(list.stream()
.map(OrderComponentDO::getLevel)
.distinct()
.sorted(Comparator.reverseOrder())
.map(level -> String.valueOf(level + 1))
.collect(Collectors.joining(",")));
result.setComponentIds(list.stream()
.map(OrderComponentDO::getId)
.toList());
return result;
}).toList();
}
@Override
public List<AssemblyComponentChildPrintRespVO> getDirectChildComponentList(AssemblyComponentChildPrintReqVO reqVO) {
@@ -1,6 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cf.imes.module.executor.dal.mysql.ordercomponent.OrderComponentMapper">
<select id="selectAllForFlatList"
resultType="com.cf.imes.module.executor.dal.dataobject.ordercomponent.OrderComponentDO">
SELECT oc.id,
oc.level,
oc.name
FROM order_component oc
WHERE oc.deleted = 0
AND oc.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId}
</foreach>
ORDER BY oc.level DESC, oc.id ASC
</select>
<select id="getOrderDetailComponentIds" resultType="java.lang.Long">
select comp_id from order_item i
where