diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java index 1bd12834..84d8210e 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java @@ -1,9 +1,6 @@ package com.ruoyi.ss.device.service; -import com.ruoyi.ss.device.domain.Device; -import com.ruoyi.ss.device.domain.DeviceBO; -import com.ruoyi.ss.device.domain.DeviceCountVO; -import com.ruoyi.ss.device.domain.DeviceQuery; +import com.ruoyi.ss.device.domain.*; import com.ruoyi.ss.device.domain.dto.DeviceBatchUpdateModelDTO; import com.ruoyi.ss.device.domain.dto.DeviceRegisterDTO; import com.ruoyi.ss.device.domain.dto.DeviceWifiDTO; @@ -91,7 +88,7 @@ public interface DeviceService /** * 逻辑删除 */ - boolean logicDel(List deviceIds); + int logicDel(List deviceIds); /** * 通过型号id列表,查询设备列表,并分组 @@ -350,4 +347,9 @@ public interface DeviceService int setTime(DeviceVO device, LocalDateTime expireTime, boolean withIot, int tryCount); int setWifi(DeviceWifiDTO dto); + + /** + * 根据设备ID列表查询 + */ + List selectByDeviceIds(List deviceIds); } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java index b02a36da..44a6f336 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java @@ -13,7 +13,6 @@ import com.ruoyi.iot.domain.IotDeviceInfo; import com.ruoyi.iot.domain.response.CommandResponse; import com.ruoyi.iot.enums.IotHttpStatus; import com.ruoyi.iot.service.IotService; -import com.ruoyi.ss.dashboard.vo.BillCountVo; import com.ruoyi.ss.device.domain.Device; import com.ruoyi.ss.device.domain.DeviceBO; import com.ruoyi.ss.device.domain.DeviceCountVO; @@ -287,16 +286,6 @@ public class DeviceServiceImpl implements DeviceService ServiceUtil.assertion(device == null, String.format("设备“%s”不存在,请刷新后重试", deviceId)); } - // 拉取最新数据 - this.pullDeviceInfo(deviceIds); - - // 查询是否有未完成的订单 - TransactionBillQuery query = new TransactionBillQuery(); - query.setDeviceIds(deviceIds); - query.setIsFinished(false); - query.setType(TransactionBillType.RECHARGE.getType()); - int billCount = transactionBillService.selectSimpleCount(query); - ServiceUtil.assertion(billCount > 0, "设备存在未完成订单,无法删除"); } /** @@ -651,6 +640,13 @@ public class DeviceServiceImpl implements DeviceService return 1; } + @Override + public List selectByDeviceIds(List deviceIds) { + DeviceQuery query = new DeviceQuery(); + query.setDeviceIds(deviceIds); + return this.selectSmDeviceList(query); + } + @Override public boolean addTime(Long deviceId, long seconds, boolean withIot) { @@ -766,9 +762,45 @@ public class DeviceServiceImpl implements DeviceService } @Override - public boolean logicDel(List deviceIds) { + public int logicDel(List deviceIds) { + // 校验 this.validatePreLogicDelete(deviceIds); - return deviceMapper.logicDel(deviceIds) > 0; + + // 拉取最新数据 + this.pullDeviceInfo(deviceIds); + // 查询设备列表 + List deviceList = this.selectByDeviceIds(deviceIds); + + Integer result = transactionTemplate.execute(status -> { + // 关闭设备订单 + for (Long deviceId : deviceIds) { + if (deviceId == null) { + continue; + } + + DeviceVO device = deviceList.stream().filter(item -> Objects.equals(item.getDeviceId(), deviceId)).findFirst().orElse(null); + if (device == null) { + continue; + } + + // 关闭设备未结束的订单 + TransactionBillQuery query = new TransactionBillQuery(); + query.setType(TransactionBillType.RECHARGE.getType()); + query.setStatusList(TransactionBillStatus.canClose()); + query.setDeviceId(deviceId); + query.setIsFinished(false); + List billList = transactionBillService.selectSmTransactionBillList(query); + int closeCount = transactionBillService.batchCloseBillByDevice(billList, false, device); + ServiceUtil.assertion(closeCount != billList.size(), "关闭订单失败:closeCount =" + closeCount); + } + + int i = deviceMapper.logicDel(deviceIds); + ServiceUtil.assertion(i != deviceIds.size(), "删除设备失败,请刷新后重试"); + + return i; + }); + + return result == null ? 0 : result; } @Override