From 93de43267e1663031fe5dc2f5ae40d128a182a76 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 18 六月 2026 17:24:51 +0800
Subject: [PATCH] 新增智能电表、空调管理
---
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwConditionerServiceImpl.java | 148 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 148 insertions(+), 0 deletions(-)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwConditionerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwConditionerServiceImpl.java
index 8c74504..ed66477 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwConditionerServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwConditionerServiceImpl.java
@@ -8,13 +8,19 @@
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.dto.YwConditionerEditDTO;
import com.doumee.dao.business.dto.YwConditionerLockDTO;
import com.doumee.dao.business.dto.YwConditionerOperateDTO;
import com.doumee.dao.business.YwConditionerGatewayMapper;
import com.doumee.dao.business.YwConditionerMapper;
+import com.doumee.dao.business.YwElectricalRoomMapper;
import com.doumee.dao.business.model.YwConditioner;
import com.doumee.dao.business.model.YwConditionerActions;
import com.doumee.dao.business.model.YwConditionerGateway;
+import com.doumee.dao.business.model.YwElectricalRoom;
+import com.doumee.dao.business.model.YwBuilding;
+import com.doumee.dao.business.model.YwFloor;
+import com.doumee.dao.business.model.YwRoom;
import com.doumee.service.business.ConditionerBizService;
import com.doumee.service.business.YwConditionerActionsService;
import com.doumee.service.business.YwConditionerService;
@@ -25,9 +31,13 @@
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -45,6 +55,8 @@
@Autowired
private YwConditionerMapper ywConditionerMapper;
+ @Autowired
+ private YwElectricalRoomMapper ywElectricalRoomMapper;
@Autowired
private YwConditionerGatewayMapper gatewayMapper;
@Autowired
@@ -252,4 +264,140 @@
public List<Map<String, Object>> gatewayOptions() {
return conditionerBizService.gatewayOptions();
}
+
+ @Override
+ public PageData<YwConditioner> findDeviceManagePage(PageWrap<YwConditioner> pageWrap) {
+ IPage<YwConditioner> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ Utils.MP.blankToNull(pageWrap.getModel());
+ YwConditioner model = pageWrap.getModel() == null ? new YwConditioner() : pageWrap.getModel();
+ MPJLambdaWrapper<YwConditioner> queryWrapper = new MPJLambdaWrapper<>();
+ queryWrapper.selectAll(YwConditioner.class)
+ .eq(YwConditioner::getIsdeleted, Constants.ZERO)
+ .and(StringUtils.isNotBlank(model.getManageKeyword()), w -> w
+ .like(YwConditioner::getName, model.getManageKeyword())
+ .or().like(YwConditioner::getCode, model.getManageKeyword())
+ .or().like(YwConditioner::getRoomName, model.getManageKeyword())
+ .or().like(YwConditioner::getWgMac, model.getManageKeyword()))
+ .eq(StringUtils.isNotBlank(model.getManageOnlineFilter()), YwConditioner::getOnline, model.getManageOnlineFilter())
+ .eq(StringUtils.isNotBlank(model.getWgMacFilter()), YwConditioner::getWgMac, model.getWgMacFilter())
+ .orderByDesc(YwConditioner::getCreateDate)
+ .orderByDesc(YwConditioner::getId);
+ PageData<YwConditioner> pageData = PageData.from(
+ ywConditionerMapper.selectJoinPage(page, YwConditioner.class, queryWrapper));
+ fillRoomNames(pageData.getRecords());
+ fillGatewayBzFromGateway(pageData.getRecords());
+ return pageData;
+ }
+
+ @Override
+ public YwConditionerEditDTO getManageDetail(Integer id) {
+ YwConditioner conditioner = findById(id);
+ if (conditioner == null || Objects.equals(conditioner.getIsdeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ YwConditionerEditDTO dto = new YwConditionerEditDTO();
+ BeanUtils.copyProperties(conditioner, dto);
+ List<YwElectricalRoom> rooms = ywElectricalRoomMapper.selectList(new QueryWrapper<YwElectricalRoom>().lambda()
+ .eq(YwElectricalRoom::getIsdeleted, Constants.ZERO)
+ .eq(YwElectricalRoom::getType, Constants.ONE)
+ .eq(YwElectricalRoom::getObjId, id));
+ dto.setRoomIds(rooms.stream().map(YwElectricalRoom::getRoomId).filter(Objects::nonNull).collect(Collectors.toList()));
+ fillRoomNames(Collections.singletonList(dto));
+ return dto;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void updateManageDetail(YwConditionerEditDTO dto, LoginUserInfo user) {
+ if (dto == null || dto.getId() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ YwConditioner exist = findById(dto.getId());
+ if (exist == null || Objects.equals(exist.getIsdeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ saveRooms(dto.getId(), dto.getRoomIds(), user);
+ Integer primaryRoomId = CollectionUtils.isEmpty(dto.getRoomIds()) ? null : dto.getRoomIds().get(0);
+ ywConditionerMapper.update(null, new UpdateWrapper<YwConditioner>().lambda()
+ .eq(YwConditioner::getId, dto.getId())
+ .set(YwConditioner::getRoomId, primaryRoomId)
+ .set(YwConditioner::getRemark, dto.getRemark())
+ .set(YwConditioner::getEditor, user.getId())
+ .set(YwConditioner::getEditDate, new Date()));
+ }
+
+ private void saveRooms(Integer conditionerId, List<Integer> roomIds, LoginUserInfo user) {
+ ywElectricalRoomMapper.update(null, new UpdateWrapper<YwElectricalRoom>().lambda()
+ .set(YwElectricalRoom::getIsdeleted, Constants.ONE)
+ .set(YwElectricalRoom::getEditDate, new Date())
+ .set(YwElectricalRoom::getEditor, user.getId())
+ .eq(YwElectricalRoom::getObjId, conditionerId)
+ .eq(YwElectricalRoom::getType, Constants.ONE));
+ if (CollectionUtils.isEmpty(roomIds)) {
+ return;
+ }
+ int sort = 0;
+ for (Integer roomId : roomIds) {
+ if (roomId == null) {
+ continue;
+ }
+ YwElectricalRoom rel = new YwElectricalRoom();
+ rel.setCreator(user.getId());
+ rel.setCreateDate(new Date());
+ rel.setEditor(user.getId());
+ rel.setEditDate(new Date());
+ rel.setIsdeleted(Constants.ZERO);
+ rel.setType(Constants.ONE);
+ rel.setObjId(conditionerId);
+ rel.setRoomId(roomId);
+ rel.setSortnum(++sort);
+ ywElectricalRoomMapper.insert(rel);
+ }
+ }
+
+ private void fillRoomNames(List<? extends YwConditioner> list) {
+ if (CollectionUtils.isEmpty(list)) {
+ return;
+ }
+ List<Integer> ids = list.stream().map(YwConditioner::getId).filter(Objects::nonNull).collect(Collectors.toList());
+ if (ids.isEmpty()) {
+ return;
+ }
+ MPJLambdaWrapper<YwElectricalRoom> wrapper = new MPJLambdaWrapper<>();
+ wrapper.selectAll(YwElectricalRoom.class)
+ .selectAs(YwRoom::getRoomNum, YwElectricalRoom::getRoomName)
+ .selectAs(YwBuilding::getName, YwElectricalRoom::getBuildingName)
+ .selectAs(YwFloor::getName, YwElectricalRoom::getFloorName)
+ .leftJoin(YwRoom.class, YwRoom::getId, YwElectricalRoom::getRoomId)
+ .leftJoin(YwFloor.class, YwFloor::getId, YwRoom::getFloor)
+ .leftJoin(YwBuilding.class, YwBuilding::getId, YwRoom::getBuildingId)
+ .eq(YwElectricalRoom::getIsdeleted, Constants.ZERO)
+ .eq(YwElectricalRoom::getType, Constants.ONE)
+ .in(YwElectricalRoom::getObjId, ids);
+ List<YwElectricalRoom> rooms = ywElectricalRoomMapper.selectJoinList(YwElectricalRoom.class, wrapper);
+ Map<Integer, List<YwElectricalRoom>> grouped = rooms.stream()
+ .collect(Collectors.groupingBy(YwElectricalRoom::getObjId));
+ for (YwConditioner row : list) {
+ List<YwElectricalRoom> rs = grouped.get(row.getId());
+ if (CollectionUtils.isEmpty(rs)) {
+ continue;
+ }
+ row.setRoomNames(rs.stream().map(this::formatRoomPath).filter(StringUtils::isNotBlank)
+ .collect(Collectors.joining("銆�")));
+ }
+ }
+
+ private String formatRoomPath(YwElectricalRoom room) {
+ List<String> parts = new ArrayList<>();
+ if (StringUtils.isNotBlank(room.getBuildingName())) {
+ parts.add(room.getBuildingName());
+ }
+ if (StringUtils.isNotBlank(room.getFloorName())) {
+ parts.add(room.getFloorName());
+ }
+ if (StringUtils.isNotBlank(room.getRoomName())) {
+ parts.add(room.getRoomName());
+ }
+ return String.join("/", parts);
+ }
}
--
Gitblit v1.9.3