From 897e7dffd4f8fead45547bea94da0ea11f23a9af Mon Sep 17 00:00:00 2001 From: 86158 <461356067@qq.com> Date: Wed, 21 Jan 2026 17:43:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E8=B4=A8=E9=87=8F=E7=AE=A1=E7=90=86=E7=9A=84=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/zjitem/ZjItemController.java | 32 ++++++++++++- .../admin/zjitem/vo/ZjItemRespVO.java | 8 +++- .../admin/zjschema/ZjSchemaController.java | 47 ++++++++++++++++++- .../admin/zjschema/vo/ZjSchemaRespVO.java | 2 +- .../admin/zjtask/vo/ZjTaskRespVO.java | 15 ++++-- .../ZjTaskResultsController.java | 47 ++++++++++++++++++- .../zjtaskresults/vo/ZjTaskResultsRespVO.java | 8 ++++ .../mes/dal/mysql/zjitem/ZjItemMapper.java | 2 +- .../mes/dal/mysql/zjtype/ZjTypeMapper.java | 2 +- 9 files changed, 150 insertions(+), 13 deletions(-) diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjitem/ZjItemController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjitem/ZjItemController.java index 898839a0e2..5b221c3eed 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjitem/ZjItemController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjitem/ZjItemController.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.mes.controller.admin.zjitem; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; @@ -20,6 +22,7 @@ import javax.validation.*; import javax.servlet.http.*; import java.util.*; import java.io.IOException; +import java.util.stream.Collectors; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -37,6 +40,9 @@ import cn.iocoder.yudao.module.mes.controller.admin.zjitem.vo.*; import cn.iocoder.yudao.module.mes.dal.dataobject.zjitem.ZjItemDO; import cn.iocoder.yudao.module.mes.service.zjitem.ZjItemService; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; +import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService; + @Tag(name = "管理后台 - 质量管理-检验项目") @RestController @RequestMapping("/mes/zj-item") @@ -47,6 +53,8 @@ public class ZjItemController { private ZjItemService zjItemService; @Resource private ZjTypeService zjTypeService; + @Resource + private ErpProductUnitService productUnitService; @PostMapping("/create") @Operation(summary = "创建质量管理-检验项目") @@ -88,14 +96,34 @@ public class ZjItemController { PageResult pageResult = zjItemService.getZjItemPage(pageReqVO); return success(new PageResult<>(buildVOList(pageResult.getList()), pageResult.getTotal())); } + private List buildVOList(List list) { if (CollUtil.isEmpty(list)) { return Collections.emptyList(); } + Map zjTypeMap = zjTypeService.getZjTypeVOMap( convertSet(list, ZjItemDO::getZjType)); + + List unitDOList = productUnitService.getProductUnitListByStatus(CommonStatusEnum.ENABLE.getStatus()); + // 转换为 ID -> 名称 的映射(key是单位ID,value是单位名称) + Map unitNameMap = unitDOList.stream() + .collect(Collectors.toMap( + unit -> String.valueOf(unit.getId()), + ErpProductUnitDO::getName, + (k1, k2) -> k1 + )); + + // 3. 转换DO到VO,同时赋值两个名称字段 return BeanUtils.toBean(list, ZjItemRespVO.class, item -> { + // 原有:设置质检类型名称 MapUtils.findAndThen(zjTypeMap, item.getZjType(), zjType -> item.setZjTypeName(zjType.getName())); + + // 新增:设置单位名称(容错处理:空值/无映射时显示空字符串) + if (item.getUnit() != null) { + String unitName = unitNameMap.getOrDefault(item.getUnit(), ""); + item.setUnitName(unitName); + } }); } @@ -115,9 +143,9 @@ public class ZjItemController { HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = zjItemService.getZjItemPage(pageReqVO).getList(); + List voList = buildVOList(list); // 导出 Excel - ExcelUtils.write(response, "质量管理-检验项目.xls", "数据", ZjItemRespVO.class, - BeanUtils.toBean(list, ZjItemRespVO.class)); + ExcelUtils.write(response, "质量管理-检验项目.xls", "数据", ZjItemRespVO.class, voList); } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjitem/vo/ZjItemRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjitem/vo/ZjItemRespVO.java index 3f7b3d42c9..9a738482db 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjitem/vo/ZjItemRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjitem/vo/ZjItemRespVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.mes.controller.admin.zjitem.vo; +import com.alibaba.excel.annotation.write.style.ColumnWidth; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -40,9 +41,13 @@ public class ZjItemRespVO { private Double standardVal; @Schema(description = "单位") - @ExcelProperty("单位") +// @ExcelProperty("单位") private String unit; + @Schema(description = "单位", example = "1") + @ExcelProperty("单位") + private String unitName; + @Schema(description = "上限值") @ExcelProperty("上限值") private Double upperVal; @@ -53,6 +58,7 @@ public class ZjItemRespVO { @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") + @ColumnWidth(20) private LocalDateTime createTime; } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/ZjSchemaController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/ZjSchemaController.java index 1ba1fda568..01ad5287f7 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/ZjSchemaController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/ZjSchemaController.java @@ -1,8 +1,15 @@ package cn.iocoder.yudao.module.mes.controller.admin.zjschema; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; +import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService; import cn.iocoder.yudao.module.mes.controller.admin.zjitem.vo.ZjItemRespVO; import cn.iocoder.yudao.module.mes.dal.dataobject.zjitem.ZjItemDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtype.ZjTypeDO; import cn.iocoder.yudao.module.mes.service.zjitem.ZjItemService; +import cn.iocoder.yudao.module.mes.service.zjtype.ZjTypeService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -28,6 +35,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import cn.iocoder.yudao.module.mes.controller.admin.zjschema.vo.*; import cn.iocoder.yudao.module.mes.dal.dataobject.zjschema.ZjSchemaDO; @@ -43,6 +51,10 @@ public class ZjSchemaController { private ZjSchemaService zjSchemaService; @Resource private ZjItemService zjitemService; + @Resource + private ZjTypeService zjTypeService; + @Resource + private ErpProductUnitService productUnitService; @PostMapping("/create") @Operation(summary = "创建检验方案") @@ -133,8 +145,41 @@ public class ZjSchemaController { // 4. 查询所有关联的项目信息(请根据实际项目调整Service方法) List itemList = zjitemService.getItemsByIds(itemIds); + List voList = buildVOList(itemList); + // 5. 转换为VO并返回 - return success(BeanUtils.toBean(itemList, ZjItemRespVO.class)); + return success(voList); } + + + private List buildVOList(List list) { + if (CollUtil.isEmpty(list)) { + return Collections.emptyList(); + } + + Map zjTypeMap = zjTypeService.getZjTypeVOMap( + convertSet(list, ZjItemDO::getZjType)); + + List unitDOList = productUnitService.getProductUnitListByStatus(CommonStatusEnum.ENABLE.getStatus()); + // 转换为 ID -> 名称 的映射(key是单位ID,value是单位名称) + Map unitNameMap = unitDOList.stream() + .collect(Collectors.toMap( + unit -> String.valueOf(unit.getId()), + ErpProductUnitDO::getName, + (k1, k2) -> k1 + )); + + // 3. 转换DO到VO,同时赋值两个名称字段 + return BeanUtils.toBean(list, ZjItemRespVO.class, item -> { + // 原有:设置质检类型名称 + MapUtils.findAndThen(zjTypeMap, item.getZjType(), zjType -> item.setZjTypeName(zjType.getName())); + + // 新增:设置单位名称(容错处理:空值/无映射时显示空字符串) + if (item.getUnit() != null) { + String unitName = unitNameMap.getOrDefault(item.getUnit(), ""); + item.setUnitName(unitName); + } + }); + } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/vo/ZjSchemaRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/vo/ZjSchemaRespVO.java index e2a74b0b1e..a2f85f95c2 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/vo/ZjSchemaRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjschema/vo/ZjSchemaRespVO.java @@ -42,7 +42,7 @@ public class ZjSchemaRespVO { private String val; @Schema(description = "关联项目") - @ExcelProperty("关联项目") +// @ExcelProperty("关联项目") private String item; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskRespVO.java index f672482951..155f8ec0bb 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtask/vo/ZjTaskRespVO.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.mes.controller.admin.zjtask.vo; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import com.alibaba.excel.annotation.write.style.ColumnWidth; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -26,7 +28,8 @@ public class ZjTaskRespVO { private String name; @Schema(description = "质检分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - @ExcelProperty("质检分类") + @ExcelProperty(value = "质检分类", converter = DictConvert.class) + @DictFormat("mes_zj_task_type") private String type; @Schema(description = "检验方案id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3630") @@ -46,11 +49,12 @@ public class ZjTaskRespVO { private String ticket; @Schema(description = "工序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty("工序") + @ExcelProperty(value = "工序", converter = DictConvert.class) + @DictFormat("mes_org_type") private String orgType; @Schema(description = "负责人id", example = "6442") - @ExcelProperty("负责人id") +// @ExcelProperty("负责人id") private Long managerId; @Schema(description = "负责人名称", example = "张三") @@ -58,7 +62,7 @@ public class ZjTaskRespVO { private String managerName; @Schema(description = "执行人id", example = "10505") - @ExcelProperty("执行人id") +// @ExcelProperty("执行人id") private Long executorId; @Schema(description = "执行人名称", example = "王五") @@ -66,7 +70,8 @@ public class ZjTaskRespVO { private String executorName; @Schema(description = "状态", example = "1") - @ExcelProperty("状态(0=未作业,1=已作业") + @ExcelProperty(value = "状态", converter = DictConvert.class) + @DictFormat("job_status") private Integer status; @Schema(description = "结果") diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/ZjTaskResultsController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/ZjTaskResultsController.java index c9148e8664..7966406492 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/ZjTaskResultsController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/ZjTaskResultsController.java @@ -1,8 +1,17 @@ package cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; +import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService; +import cn.iocoder.yudao.module.mes.controller.admin.zjitem.vo.ZjItemRespVO; import cn.iocoder.yudao.module.mes.controller.admin.zjtask.vo.ZjTaskSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjitem.ZjItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.zjtask.ZjTaskDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtype.ZjTypeDO; import cn.iocoder.yudao.module.mes.service.zjtask.ZjTaskService; +import cn.iocoder.yudao.module.mes.service.zjtype.ZjTypeService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -28,6 +37,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults.vo.*; import cn.iocoder.yudao.module.mes.dal.dataobject.zjtaskresults.ZjTaskResultsDO; @@ -43,6 +53,10 @@ public class ZjTaskResultsController { private ZjTaskResultsService zjTaskResultsService; @Resource private ZjTaskService zjTaskService; + @Resource + private ZjTypeService zjTypeService; + @Resource + private ErpProductUnitService productUnitService; @PostMapping("/create") @Operation(summary = "创建检验任务-检验结果") @@ -82,7 +96,8 @@ public class ZjTaskResultsController { @PreAuthorize("@ss.hasPermission('mes:zj-task-results:query')") public CommonResult> getZjTaskResultsPage(@Valid ZjTaskResultsPageReqVO pageReqVO) { PageResult pageResult = zjTaskResultsService.getZjTaskResultsPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ZjTaskResultsRespVO.class)); +// return success(BeanUtils.toBean(pageResult, ZjTaskResultsRespVO.class)); + return success(new PageResult<>(buildVOList(pageResult.getList()), pageResult.getTotal())); } @GetMapping("/export-excel") @@ -136,4 +151,34 @@ public class ZjTaskResultsController { return "2"; // 其余情况(存在不通过),任务结果为2 } } + + private List buildVOList(List list) { + if (CollUtil.isEmpty(list)) { + return Collections.emptyList(); + } + + Map zjTypeMap = zjTypeService.getZjTypeVOMap( + convertSet(list, ZjTaskResultsDO::getZjType)); + + List unitDOList = productUnitService.getProductUnitListByStatus(CommonStatusEnum.ENABLE.getStatus()); + // 转换为 ID -> 名称 的映射(key是单位ID,value是单位名称) + Map unitNameMap = unitDOList.stream() + .collect(Collectors.toMap( + unit -> String.valueOf(unit.getId()), + ErpProductUnitDO::getName, + (k1, k2) -> k1 + )); + + // 3. 转换DO到VO,同时赋值两个名称字段 + return BeanUtils.toBean(list, ZjTaskResultsRespVO.class, item -> { + // 原有:设置质检类型名称 + MapUtils.findAndThen(zjTypeMap, item.getZjType(), zjType -> item.setZjTypeName(zjType.getName())); + + // 新增:设置单位名称(容错处理:空值/无映射时显示空字符串) + if (item.getUnit() != null) { + String unitName = unitNameMap.getOrDefault(item.getUnit(), ""); + item.setUnitName(unitName); + } + }); + } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsRespVO.java index b36dfd23fc..033c750463 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/zjtaskresults/vo/ZjTaskResultsRespVO.java @@ -20,6 +20,10 @@ public class ZjTaskResultsRespVO { @ExcelProperty("检验类型") private Long zjType; + @Schema(description = "检验类型", example = "1") + @ExcelProperty("检验类型") + private String zjTypeName; + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") @ExcelProperty("名称") private String name; @@ -40,6 +44,10 @@ public class ZjTaskResultsRespVO { @ExcelProperty("单位") private String unit; + @Schema(description = "单位", example = "1") + @ExcelProperty("单位") + private String unitName; + @Schema(description = "上限值") @ExcelProperty("上限值") private Double upperVal; diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjitem/ZjItemMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjitem/ZjItemMapper.java index c01a33a6b3..caee6cc99a 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjitem/ZjItemMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjitem/ZjItemMapper.java @@ -21,7 +21,7 @@ public interface ZjItemMapper extends BaseMapperX { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(ZjItemDO::getZjType, reqVO.getZjType()) .likeIfPresent(ZjItemDO::getName, reqVO.getName()) - .eqIfPresent(ZjItemDO::getRemark, reqVO.getRemark()) + .likeIfPresent(ZjItemDO::getRemark, reqVO.getRemark()) .eqIfPresent(ZjItemDO::getTool, reqVO.getTool()) .eqIfPresent(ZjItemDO::getStandardVal, reqVO.getStandardVal()) .eqIfPresent(ZjItemDO::getUnit, reqVO.getUnit()) diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjtype/ZjTypeMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjtype/ZjTypeMapper.java index 2c3f2e63b8..074d65f536 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjtype/ZjTypeMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/zjtype/ZjTypeMapper.java @@ -21,7 +21,7 @@ public interface ZjTypeMapper extends BaseMapperX { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(ZjTypeDO::getCode, reqVO.getCode()) .likeIfPresent(ZjTypeDO::getName, reqVO.getName()) - .eqIfPresent(ZjTypeDO::getRemark, reqVO.getRemark()) + .likeIfPresent(ZjTypeDO::getRemark, reqVO.getRemark()) .betweenIfPresent(ZjTypeDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(ZjTypeDO::getId)); }