From 2fbd8fcd0a8d7619a9ecd05b5418eec266c4d7ac Mon Sep 17 00:00:00 2001 From: aikai Date: Mon, 9 Sep 2024 19:06:31 +0800 Subject: [PATCH] ### commit message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 在权限相关VO中添加图标图片字段 - 在各类权限相关的响应对象中,新增图标图片字段,用于存储图标图片的路径。 2. 优化常用应用配置的批量操作逻辑 - 合并常用应用配置的创建、编辑和删除操作为一个接口,简化批量操作流程。 - 更新数据库操作逻辑,以支持批量创建或编辑或删除常用应用配置。 3. 修复智能工厂模块的BUG和性能优化 - 修复智能工厂模块中与窑炉产能和摄像头数量相关的数据统计问题。 - 性能优化,仅查询必要的数据,并避免不必要的数据库操作。 --- .../admin/auth/vo/AuthMenuRespVO.java | 3 ++ .../auth/vo/AuthPermissionInfoRespVO.java | 3 ++ .../commonlyused/CommonlyUsedController.java | 8 +-- .../vo/CommonlyUsedSaveReqVO.java | 8 +-- .../admin/permission/vo/menu/MenuRespVO.java | 3 ++ .../admin/permission/vo/menu/MenuSaveVO.java | 3 ++ .../commonlyused/CommonlyUsedDO.java | 1 + .../dal/dataobject/permission/MenuDO.java | 7 +++ .../commonlyused/CommonlyUsedService.java | 14 ++--- .../commonlyused/CommonlyUsedServiceImpl.java | 51 +++++++++++++++++-- .../admin/screendata/factory/vo/CameraVO.java | 20 ++++++++ .../screendata/factory/vo/DataOverviewVO.java | 10 +++- .../cameradevice/CameraDeviceMapper.java | 4 +- .../factoryinfo/FactoryInfoServiceImpl.java | 4 ++ .../screendata/ScreenDataServiceImpl.java | 17 ++++++- 15 files changed, 129 insertions(+), 27 deletions(-) create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/screendata/factory/vo/CameraVO.java diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthMenuRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthMenuRespVO.java index d310bded..47c586b6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthMenuRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthMenuRespVO.java @@ -36,6 +36,9 @@ public class AuthMenuRespVO { @Schema(description = "菜单图标,仅菜单类型为菜单或者目录时,才需要传", example = "/menu/list") private String icon; + @Schema(description = "图标图片", example = "/menu/list") + private String img; + @Schema(description = "是否可见", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") private Boolean visible; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java index c3f85f2f..112af399 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java @@ -78,6 +78,9 @@ public class AuthPermissionInfoRespVO { @Schema(description = "菜单图标,仅菜单类型为菜单或者目录时,才需要传", example = "/menu/list") private String icon; + @Schema(description = "图标图片", example = "/menu/list") + private String img; + @Schema(description = "是否可见", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") private Boolean visible; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/commonlyused/CommonlyUsedController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/commonlyused/CommonlyUsedController.java index 869f76ac..7be32680 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/commonlyused/CommonlyUsedController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/commonlyused/CommonlyUsedController.java @@ -43,11 +43,11 @@ public class CommonlyUsedController { return success(commonlyUsedService.createCommonlyUsed(createReqVO)); } - @PostMapping("/batchCreate") - @Operation(summary = "批量创建用户常用应用配置") + @PostMapping("/batchCreateOrEditOrDel") + @Operation(summary = "批量创建编辑删除用户常用应用配置") @PreAuthorize("@ss.hasPermission('system:commonly-used:create')") - public CommonResult batchCreate(@Valid @RequestBody List list) { - commonlyUsedService.batchCreate(list); + public CommonResult batchCreateOrEditOrDel(@Valid @RequestBody List list) { + commonlyUsedService.batchCreateOrEditOrDel(list); return success(true); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/commonlyused/vo/CommonlyUsedSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/commonlyused/vo/CommonlyUsedSaveReqVO.java index f8decf11..47494ea7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/commonlyused/vo/CommonlyUsedSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/commonlyused/vo/CommonlyUsedSaveReqVO.java @@ -1,10 +1,7 @@ package cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; +import lombok.Data; @Schema(description = "管理后台 - 用户常用应用配置新增/修改 Request VO") @Data @@ -13,9 +10,6 @@ public class CommonlyUsedSaveReqVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18873") private Long id; - @Schema(description = "用户id", example = "2072") - private Long userId; - @Schema(description = "类型 1流程 2菜单", example = "1") private Integer type; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java index ccd44340..e236b791 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java @@ -43,6 +43,9 @@ public class MenuRespVO { @Schema(description = "菜单图标,仅菜单类型为菜单或者目录时,才需要传", example = "/menu/list") private String icon; + @Schema(description = "图标图片", example = "/menu/list") + private String img; + @Schema(description = "组件路径,仅菜单类型为菜单时,才需要传", example = "system/post/index") @Size(max = 200, message = "组件路径不能超过255个字符") private String component; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java index 8b91af1b..745e3223 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java @@ -42,6 +42,9 @@ public class MenuSaveVO { @Schema(description = "菜单图标,仅菜单类型为菜单或者目录时,才需要传", example = "/menu/list") private String icon; + @Schema(description = "图标图片", example = "/menu/list") + private String img; + @Schema(description = "组件路径,仅菜单类型为菜单时,才需要传", example = "system/post/index") @Size(max = 200, message = "组件路径不能超过255个字符") private String component; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/commonlyused/CommonlyUsedDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/commonlyused/CommonlyUsedDO.java index 563cd4e9..cced1d0c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/commonlyused/CommonlyUsedDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/commonlyused/CommonlyUsedDO.java @@ -6,6 +6,7 @@ import java.time.LocalDateTime; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import org.apache.ibatis.type.JdbcType; /** * 用户常用应用配置 DO diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java index f4dca737..c012f9ee 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -70,6 +71,12 @@ public class MenuDO extends BaseDO { * 菜单图标 */ private String icon; + + /** + * 图标图片 + */ + private String img; + /** * 组件路径 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/commonlyused/CommonlyUsedService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/commonlyused/CommonlyUsedService.java index e8db96fd..43b0c382 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/commonlyused/CommonlyUsedService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/commonlyused/CommonlyUsedService.java @@ -61,13 +61,6 @@ public interface CommonlyUsedService { */ CommonlyUsedVO getCommonlyUsedList(); - /** - * 批量新增 - * - * @param list - */ - void batchCreate(List list); - /** * 批量更新 * @@ -81,4 +74,11 @@ public interface CommonlyUsedService { * @param ids */ void batchDelete(List ids); + + /** + * 批量创建编辑删除 + * + * @param list + */ + void batchCreateOrEditOrDel(List list); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/commonlyused/CommonlyUsedServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/commonlyused/CommonlyUsedServiceImpl.java index cacb6c9f..cda2f9f3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/commonlyused/CommonlyUsedServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/commonlyused/CommonlyUsedServiceImpl.java @@ -142,11 +142,6 @@ public class CommonlyUsedServiceImpl implements CommonlyUsedService { return vo; } - @Override - public void batchCreate(List list) { - List saveList = BeanUtils.toBean(list, CommonlyUsedDO.class); - commonlyUsedMapper.insertBatch(saveList); - } @Override public void batchUpdate(List list) { @@ -159,4 +154,50 @@ public class CommonlyUsedServiceImpl implements CommonlyUsedService { commonlyUsedMapper.deleteBatchIds(ids); } + @Override + public void batchCreateOrEditOrDel(List list) { + Long userId = SecurityFrameworkUtils.getLoginUserId(); + if (CollectionUtil.isEmpty(list)) { + commonlyUsedMapper.delete(new LambdaQueryWrapper().eq(CommonlyUsedDO::getUserId, userId)); + return; + } + List oldList = commonlyUsedMapper.selectList(new LambdaQueryWrapper().eq(CommonlyUsedDO::getUserId, userId)); + List newList = BeanUtils.toBean(list, CommonlyUsedDO.class); + if (CollectionUtil.isEmpty(oldList)) { + commonlyUsedMapper.insertBatch(newList); + return; + } + //根据类型和objectId 分组 + Map oldMap = oldList.stream().collect(Collectors.toMap(a -> a.getType() + "_" + a.getObjectId(), a -> a)); + Map newMap = newList.stream().collect(Collectors.toMap(a -> a.getType() + "_" + a.getObjectId(), a -> a)); + // -- 需要删除的 + List delIds = new ArrayList<>(CollectionUtil.subtract(oldMap.keySet(), newMap.keySet())); + if (CollectionUtil.isNotEmpty(delIds)) { + List delIdList = new ArrayList<>(); + for (String delId : delIds) { + delIdList.add(oldMap.get(delId).getId()); + } + commonlyUsedMapper.deleteBatchIds(delIdList); + } + // -- 需要保存的 + List saveIds = new ArrayList<>(CollectionUtil.subtract(newMap.keySet(), oldMap.keySet())); + if (CollectionUtil.isNotEmpty(saveIds)) { + List saveIdList = new ArrayList<>(); + for (String saveId : saveIds) { + CommonlyUsedDO commonlyUsedDO = newMap.get(saveId); + commonlyUsedDO.setUserId(userId); + saveIdList.add(newMap.get(saveId)); + } + commonlyUsedMapper.insertBatch(saveIdList); + } + // -- 需要编辑的 + List editIds = new ArrayList<>(CollectionUtil.intersectionDistinct(newMap.keySet(), oldMap.keySet())); + if (CollectionUtil.isNotEmpty(editIds)) { + List editList = new ArrayList<>(); + for (String editId : editIds) { + editList.add(newMap.get(editId)); + } + commonlyUsedMapper.updateBatch(editList); + } + } } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/screendata/factory/vo/CameraVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/screendata/factory/vo/CameraVO.java new file mode 100644 index 00000000..c10c5bb1 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/screendata/factory/vo/CameraVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年03月05日 13:55 + */ +@Data +public class CameraVO { + @Schema(description = "工厂id") + private Long factoryId; + @Schema(description = "工厂名称") + private String factoryName; + @Schema(description = "数量") + private Integer number; +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/screendata/factory/vo/DataOverviewVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/screendata/factory/vo/DataOverviewVO.java index 0fce510b..dae585a9 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/screendata/factory/vo/DataOverviewVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/screendata/factory/vo/DataOverviewVO.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.system.api.user.vo.AdminUserRpcVO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; import java.util.List; /** @@ -28,6 +29,8 @@ public class DataOverviewVO { @Schema(description = "窑炉数量") private Integer ylNum; + @Schema(description = "窑炉产能") + private BigDecimal ylCapacity; @Schema(description = "窑炉信息列表") private List factoryKilnList; @@ -55,9 +58,14 @@ public class DataOverviewVO { @Schema(description = "绑带数") private Integer bdNum; - @Schema(description = "托盘信息") + @Schema(description = "绑带信息") private List strapsList; + @Schema(description = "摄像头数量") + private Integer cameraNum; + @Schema(description = "摄像头信息") + private List cameraVOS; + @Schema(description = "出库") private Integer outTotalNum; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/device/cameradevice/CameraDeviceMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/device/cameradevice/CameraDeviceMapper.java index e49ef702..06358227 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/device/cameradevice/CameraDeviceMapper.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/device/cameradevice/CameraDeviceMapper.java @@ -37,8 +37,8 @@ public interface CameraDeviceMapper extends BaseMapperX { default List selectListCameraByFactoryId(Long factoryId) { return selectList(new LambdaQueryWrapperX() - .eq(CameraDeviceDO::getFactoryId, factoryId) + .eq(factoryId != null, CameraDeviceDO::getFactoryId, factoryId) .eq(CameraDeviceDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) .eq(CameraDeviceDO::getIsShow, 1)); } -} \ No newline at end of file +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java index dccbcbae..48027ff4 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java @@ -137,6 +137,10 @@ public class FactoryInfoServiceImpl implements FactoryInfoService { @Override public List getFactoryList(Collection ids) { + if (CollectionUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + ids = ids.stream().filter(Objects::nonNull).collect(Collectors.toList()); return factoryInfoMapper.selectList(new LambdaQueryWrapper() .in(CollectionUtil.isNotEmpty(ids), FactoryInfoDO::getId, ids)); } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataServiceImpl.java index ddbbb0d3..29d8334d 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataServiceImpl.java @@ -300,6 +300,7 @@ public class ScreenDataServiceImpl implements ScreenDataService { // ---------------------------------- 窑炉 ---------------------------------- List factoryKilnDOS = factoryKilnService.getFactoryKilnByFactoryId(factoryId); vo.setYlNum(factoryKilnDOS.size()); + vo.setYlCapacity(factoryKilnDOS.stream().map(FactoryKilnDO::getCapacity).reduce(BigDecimal.ZERO, BigDecimal::add)); Map> factoryKilnMap = factoryKilnDOS.stream().collect(Collectors.groupingBy(FactoryKilnDO::getFactoryId)); List factoryKilnList = new ArrayList<>(); for (Map.Entry> entry : factoryKilnMap.entrySet()) { @@ -384,12 +385,26 @@ public class ScreenDataServiceImpl implements ScreenDataService { vo.setTrayList(trayList); - // ---------------------------------- 托盘 ---------------------------------- + // ---------------------------------- 绑带 ---------------------------------- List strapsAssetsTypeIds = assetsTypeApi.getAssetsTypeIdsByCode(AssetsTypeCodeEnum.STRAPS).getData(); List strapsList = screenDataMapper.getAssetsNumByFactoryIdAndTypeIds(Collections.singletonList(factoryId), strapsAssetsTypeIds); vo.setBdNum(strapsList.stream().mapToInt(AssetsStockVO::getStock).sum()); vo.setStrapsList(strapsList); + // ---------------------------------- 摄像头 ---------------------------------- + List cameraVOS = new ArrayList<>(); + List cameraDeviceDOS = cameraDeviceService.getListCameraByFactoryId(factoryId); + Map> cameraDeviceMaps = cameraDeviceDOS.stream().collect(Collectors.groupingBy(CameraDeviceDO::getFactoryId)); + for (Map.Entry> entry : cameraDeviceMaps.entrySet()) { + CameraVO cameraVO = new CameraVO(); + cameraVO.setFactoryId(entry.getKey()); + cameraVO.setFactoryName(factoryMap.get(entry.getKey()).getName()); + cameraVO.setNumber(entry.getValue().size()); + cameraVOS.add(cameraVO); + } + vo.setCameraNum(cameraDeviceDOS.size()); + vo.setCameraVOS(cameraVOS); + // // vo.setForkliftTotal(list.stream().mapToInt(FactoryDataOverviewDO::getTruckTotalNum).sum()); // vo.setTruckOnNum(extras.stream().mapToInt(ScreenFactoryExtraDO::getTruckOnNum).sum());