Explorar o código

Merge branch 'bash_active' into test

李进 hai 1 ano
pai
achega
9324cdf308

+ 33 - 32
device-api-service-merc-mini/src/main/java/com/xy/controller/MercMiniDeviceController.java

@@ -4,8 +4,11 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.BooleanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.xy.annotate.RestMappingController;
+import com.xy.collections.list.JArrayList;
+import com.xy.collections.map.JMap;
 import com.xy.device.EnumDeviceActiveStatus;
 import com.xy.device.EnumDeviceFreezeStatus;
 import com.xy.device.EnumDeviceType;
@@ -36,6 +39,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
@@ -209,47 +213,44 @@ public class MercMiniDeviceController {
     @PostMapping("isMerc")
     @ApiOperation("判断设备是否归属商户")
     public R isMerc(@RequestBody MercMiniDeviceDto.Active active) {
-        DeviceInfo deviceInfo = deviceInfoService.getById(active.getDeviceId());
-        R checkR = this.checkDeviceByMerc(deviceInfo);
-        if (checkR.getCode() == R.Enum.SUCCESS.getCode()) {
-            Integer activeState = SysDictUtils.getValue(EnumDeviceActiveStatus.Code.CODE.getCode(), EnumDeviceActiveStatus.N_1.getCode(), Integer.class);
-            String refMercCode = deviceInfo.getMercCode();
-            //非质检商户需要进行判断,质检商户跳过
-            if (!"10001".equals(refMercCode) && !deviceInfo.getActiveState().equals(activeState)) {
-                return R.fail("机器未激活");
-            }
-            return R.ok();
-        }
-        return checkR;
-    }
-
-    @PostMapping("getActiveInfo")
-    @ApiOperation("激活设备前判断")
-    public R getActiveInfo(@RequestBody MercMiniDeviceDto.Active active) {
-        DeviceInfo deviceInfo = deviceInfoService.getById(active.getDeviceId());
-        R checkR = this.checkDeviceByMerc(deviceInfo);
-        if (checkR.getCode() == R.Enum.SUCCESS.getCode()) {
-            Integer activeState = SysDictUtils.getValue(EnumDeviceActiveStatus.Code.CODE.getCode(), EnumDeviceActiveStatus.N_1.getCode(), Integer.class);
-            if (deviceInfo.getActiveState().equals(activeState)) {
-                return R.fail("机器已激活");
+        List<Long> deviceIds = active.getDeviceId();
+        List<DeviceInfo> list = deviceInfoService.list(new LambdaQueryWrapper<DeviceInfo>()
+                .in(DeviceInfo::getDeviceId, deviceIds)
+        );
+        for (DeviceInfo deviceInfo : list) {
+            R checkR = this.checkDeviceByMerc(deviceInfo);
+            if (checkR.getCode() == R.Enum.SUCCESS.getCode()) {
+                Integer activeState = SysDictUtils.getValue(EnumDeviceActiveStatus.Code.CODE.getCode(), EnumDeviceActiveStatus.N_1.getCode(), Integer.class);
+                String refMercCode = deviceInfo.getMercCode();
+                //非质检商户需要进行判断,质检商户跳过
+                if (!"10001".equals(refMercCode) && !deviceInfo.getActiveState().equals(activeState)) {
+                    return R.fail("机器未激活");
+                }
+            } else {
+                return checkR;
             }
-            return R.ok();
         }
-        return checkR;
+        return R.ok();
     }
 
     @PostMapping("active")
     @ApiOperation("激活设备")
     public R active(@RequestBody MercMiniDeviceDto.Active active) {
-        DeviceInfo deviceInfo = deviceInfoService.getById(active.getDeviceId());
-        int factory = deviceInfo.getDeviceType() == EnumDeviceType.N_5.getIntCode() ? 2 : 1;
-        if (factory == 1) {
-            R r = checkDeviceByMerc(deviceInfo);
-            if (r.getCode() == R.Enum.FAIL.getCode()) {
-                return r;
+        List<Long> deviceIds = active.getDeviceId();
+        List<DeviceInfo> list = deviceInfoService.list(new LambdaQueryWrapper<DeviceInfo>()
+                .in(DeviceInfo::getDeviceId, deviceIds)
+        );
+        JMap<Integer, DeviceInfo> cover = new JArrayList<>(list).toMap(DeviceInfo::getDeviceType).cover();
+        if (cover.size() > 1) {
+            return R.fail("批量激活设备类型必须一致");
+        }
+        for (DeviceInfo deviceInfo : list) {
+            R checkR = this.checkDeviceByMerc(deviceInfo);
+            if (checkR.getCode() == R.Enum.FAIL.getCode()) {
+                return checkR;
             }
         }
-        return FactoryUtils.getServiceRoute(DeviceFactory.class, deviceInfo.getDeviceType()).active(active);
+        return FactoryUtils.getServiceRoute(DeviceFactory.class, list.get(0).getDeviceType()).active(active);
     }
 
     @ApiOperation("运营状态修改")

+ 81 - 39
device-api-service/src/main/java/com/xy/service/DeviceChargingServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.collections.list.JArrayList;
 import com.xy.collections.list.JList;
+import com.xy.collections.map.JHashMap;
 import com.xy.collections.map.JMap;
 import com.xy.device.*;
 import com.xy.dto.DeviceAlgorithmChargingDto;
@@ -25,9 +26,11 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import javax.validation.constraints.NotEmpty;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -59,6 +62,8 @@ public class DeviceChargingServiceImpl extends ServiceImpl<DeviceChargingMapper,
 
     private DeviceAlgorithmChargingServiceImpl deviceAlgorithmChargingService;
 
+    private DeviceStatusServiceImpl deviceStatusService;
+
     @PostMapping("init")
     @ApiOperation("初始化")
     public R init() {
@@ -86,56 +91,93 @@ public class DeviceChargingServiceImpl extends ServiceImpl<DeviceChargingMapper,
 
     @PostMapping("payCheck")
     @ApiOperation("购买反显")
-    public R<DeviceChargingDto.PayCheckVo> payCheck(@RequestBody @Validated DeviceChargingDto.PayCheck payCheck) {
-        DeviceInfoDto.Vo deviceInfo = deviceInfoService.obj(new DeviceInfoDto.Obj().setDeviceId(payCheck.getDeviceId()).setIsStatus(true)).getData();
-        if (deviceInfo == null) {
+    public R<Map<Long, DeviceChargingDto.PayCheckVo>> payCheck(@RequestBody @Validated DeviceChargingDto.PayCheck payCheck) {
+        Map<Long, DeviceChargingDto.PayCheckVo> result = new HashMap<>();
+        List<Long> deviceIds = payCheck.getDeviceId();
+        List<DeviceInfo> list = deviceInfoService.list(new LambdaQueryWrapper<DeviceInfo>()
+                .in(DeviceInfo::getDeviceId, deviceIds)
+        );
+        if (!Emptys.check(list)) {
             return R.fail("设备不存在");
         }
-        //封装设备信息
-        DeviceChargingDto.PayCheckVo payCheckVo = new DeviceChargingDto.PayCheckVo();
-        String deviceTypeName = SysDictUtils.get(EnumDeviceType.Code.CODE.getCode(), String.valueOf(deviceInfo.getDeviceType())).getMsg();
-        //查询设备计费配置表
+        JList<DeviceInfo> deviceInfos = new JArrayList<>(list);
+        JMap<Integer, DeviceInfo> cover = deviceInfos.toMap(DeviceInfo::getDeviceType).cover();
+        if (cover.size() > 1) {
+            return R.fail("设备类型必须一致");
+        }
+        //查询设备状态信息
+        List<DeviceStatus> deviceStatuses = deviceStatusService.list(new LambdaQueryWrapper<DeviceStatus>().in(DeviceStatus::getDeviceId, deviceIds));
+        JMap<Long, DeviceStatus> deviceStatusesJMaps = new JArrayList<>(deviceStatuses).toMap(DeviceStatus::getDeviceId).cover();
         List<String> mercCodes = new ArrayList<>();
-        deviceAlgorithmChargingService.getMercCodes(deviceInfo.getMercCode(), mercCodes);
+        deviceAlgorithmChargingService.getMercCodes(list.get(0).getMercCode(), mercCodes);
+        //查询设备计费配置表
         List<DeviceChargingConfig> deviceChargingConfigs = deviceChargingConfigService.list(new LambdaQueryWrapper<DeviceChargingConfig>()
                 .in(DeviceChargingConfig::getMercCode, mercCodes)
                 .eq(DeviceChargingConfig::getType, SysDictUtils.getValue(EnumDeviceChargingConfigType.Code.CODE.getCode(), EnumDeviceChargingConfigType.N_2.getCode(), Integer.class))
-                .eq(DeviceChargingConfig::getDeviceType, deviceInfo.getDeviceType())
+                .eq(DeviceChargingConfig::getDeviceType, list.get(0).getDeviceType())
                 .orderByDesc(DeviceChargingConfig::getMercCode)
         );
         //有则使用,无则使用默认字典
         int standard = Emptys.check(deviceChargingConfigs) ? deviceChargingConfigs.get(0).getConfigValue()
-                : SysDictUtils.getValue(EnumDeviceCharging.Code.CODE.getCode(), String.valueOf(deviceInfo.getDeviceType()), Integer.class);
-        DeviceChargingDto.PayCheckVo.DeviceInfo deviceInfoObj = Beans.copy(Beans.copy(DeviceChargingDto.PayCheckVo.DeviceInfo.class, deviceInfo), deviceInfo.getDeviceStatus())
-                .setDeviceTypeName(deviceTypeName)
-                .setStandard(BigDecimal.valueOf(standard).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN).doubleValue() + "元/年")
-                .setMoney(standard);
-        //封装算法购买信息
-        DeviceTypeAlgorithmBeforConfig deviceTypeAlgorithmBeforConfig = deviceTypeAlgorithmBeforConfigService.getOne(new LambdaQueryWrapper<DeviceTypeAlgorithmBeforConfig>()
-                .eq(DeviceTypeAlgorithmBeforConfig::getDeviceType, deviceInfo.getDeviceType())
-                .eq(DeviceTypeAlgorithmBeforConfig::getMercId, deviceInfo.getMercId())
-                .eq(DeviceTypeAlgorithmBeforConfig::getAlgorithmId, deviceInfo.getAlgorithmId())
+                : SysDictUtils.getValue(EnumDeviceCharging.Code.CODE.getCode(), String.valueOf(list.get(0).getDeviceType()), Integer.class);
+        String deviceTypeName = SysDictUtils.get(EnumDeviceType.Code.CODE.getCode(), String.valueOf(list.get(0).getDeviceType())).getMsg();
+        //查询算法预充配置
+        JList<DeviceInfo> values = cover.getValues();
+        List<DeviceTypeAlgorithmBeforConfig> deviceTypeAlgorithmBeforConfigs = deviceTypeAlgorithmBeforConfigService.list(new LambdaQueryWrapper<DeviceTypeAlgorithmBeforConfig>()
+                .eq(DeviceTypeAlgorithmBeforConfig::getDeviceType, list.get(0).getDeviceType())
+                .eq(DeviceTypeAlgorithmBeforConfig::getMercId, list.get(0).getMercId())
+                .in(DeviceTypeAlgorithmBeforConfig::getAlgorithmId, values.getProperty(DeviceInfo::getAlgorithmId))
         );
-        SysDictRedis moonAlgorithmTypes = SysDictUtils.get(EnumAlgorithmTypes.Code.CODE.getCode(), String.valueOf(deviceInfo.getAlgorithmId()));
-        String algorithmPayConfig = SysDictUtils.getValue(EnumAlgorithmPayConfig.Code.CODE.getCode(), String.valueOf(deviceInfo.getAlgorithmId()), String.class);
-        DeviceAlgorithmChargingDto.AlgorithmMoonConfig algorithmMoonConfig = JSONUtil.parseObj(algorithmPayConfig).toBean(DeviceAlgorithmChargingDto.AlgorithmMoonConfig.class);
-        DeviceAlgorithmChargingDto.AlgorithmMoonConfig.Inf inf = algorithmMoonConfig.getInf();
-        DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging infDeviceAlgorithmCharging = Beans.copy(DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging.class, deviceInfo)
-                .setDeviceTypeName(deviceTypeName)
-                .setAlgorithmId(deviceInfo.getAlgorithmId())
-                .setAlgorithmName(moonAlgorithmTypes.getMsg())
-                .setStandard(BigDecimal.valueOf(algorithmMoonConfig.getPrice()).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN).doubleValue() + "元/每笔(" + inf.getSize() + "笔)")
-                .setMoney(deviceTypeAlgorithmBeforConfig == null ? inf.getMoney() : deviceTypeAlgorithmBeforConfig.getMoney());
-        //封装算法包月信息
-        DeviceAlgorithmChargingDto.AlgorithmMoonConfig.Moon moon = algorithmMoonConfig.getMoon();
-        DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging moonDeviceAlgorithmCharging = Beans.copy(DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging.class, deviceInfo)
-                .setDeviceTypeName(deviceTypeName)
-                .setAlgorithmId(deviceInfo.getAlgorithmId())
-                .setAlgorithmName(moonAlgorithmTypes.getMsg())
-                .setStandard(BigDecimal.valueOf(algorithmMoonConfig.getPrice()).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN).doubleValue() + "元/包月(" + moon.getSize() + "笔)")
-                .setMoney(moon.getMoney());
-        payCheckVo.setDeviceInfo(deviceInfoObj).setInfDeviceAlgorithmCharging(infDeviceAlgorithmCharging).setMoonDeviceAlgorithmCharging(moonDeviceAlgorithmCharging);
-        return R.ok(payCheckVo);
+        JMap<Long, DeviceTypeAlgorithmBeforConfig> deviceTypeAlgorithmBeforConfigsJMaps = Emptys.check(deviceTypeAlgorithmBeforConfigs) ? new JArrayList<>(deviceTypeAlgorithmBeforConfigs).toMap(DeviceTypeAlgorithmBeforConfig::getAlgorithmId).cover()
+                : new JHashMap<>();
+        //查询默认算法信息
+        JList<Long> algorithmIds = deviceInfos.getProperty(DeviceInfo::getAlgorithmId);
+        Map<Long, String> moonAlgorithmTypesMap = new HashMap<>();
+        Map<Long, String> algorithmPayConfigMap = new HashMap<>();
+        for (Long algorithmId : algorithmIds) {
+            SysDictRedis moonAlgorithmTypes = SysDictUtils.get(EnumAlgorithmTypes.Code.CODE.getCode(), String.valueOf(algorithmId));
+            SysDictRedis algorithmPayConfig = SysDictUtils.get(EnumAlgorithmPayConfig.Code.CODE.getCode(), String.valueOf(algorithmId));
+            if (Emptys.check(moonAlgorithmTypes)) {
+                moonAlgorithmTypesMap.put(algorithmId, moonAlgorithmTypes.getMsg());
+            }
+            if (Emptys.check(algorithmPayConfig)) {
+                algorithmPayConfigMap.put(algorithmId, algorithmPayConfig.getValue());
+            }
+        }
+        for (DeviceInfo deviceInfo : list) {
+            //封装设备信息
+            DeviceChargingDto.PayCheckVo payCheckVo = new DeviceChargingDto.PayCheckVo();
+            DeviceStatus deviceStatus = deviceStatusesJMaps.get(deviceInfo.getDeviceId());
+            DeviceChargingDto.PayCheckVo.DeviceInfo deviceInfoObj = Beans.copy(Beans.copy(DeviceChargingDto.PayCheckVo.DeviceInfo.class, deviceInfo), deviceStatus)
+                    .setDeviceTypeName(deviceTypeName)
+                    .setStandard(BigDecimal.valueOf(standard).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN).doubleValue() + "元/年")
+                    .setMoney(standard);
+            //封装算法购买信息
+            DeviceTypeAlgorithmBeforConfig deviceTypeAlgorithmBeforConfig = deviceTypeAlgorithmBeforConfigsJMaps.get(deviceInfo.getAlgorithmId());
+            String algorithmName = moonAlgorithmTypesMap.get(deviceInfo.getAlgorithmId());
+            String algorithmPayConfig = algorithmPayConfigMap.get(deviceInfo.getAlgorithmId());
+            DeviceAlgorithmChargingDto.AlgorithmMoonConfig algorithmMoonConfig = JSONUtil.parseObj(algorithmPayConfig).toBean(DeviceAlgorithmChargingDto.AlgorithmMoonConfig.class);
+            DeviceAlgorithmChargingDto.AlgorithmMoonConfig.Inf inf = algorithmMoonConfig.getInf();
+            DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging infDeviceAlgorithmCharging = Beans.copy(DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging.class, deviceInfo)
+                    .setDeviceTypeName(deviceTypeName)
+                    .setAlgorithmId(deviceInfo.getAlgorithmId())
+                    .setAlgorithmName(algorithmName)
+                    .setStandard(BigDecimal.valueOf(algorithmMoonConfig.getPrice()).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN).doubleValue() + "元/每笔(" + inf.getSize() + "笔)")
+                    .setMoney(deviceTypeAlgorithmBeforConfig == null ? inf.getMoney() : deviceTypeAlgorithmBeforConfig.getMoney());
+            //封装算法包月信息
+            DeviceAlgorithmChargingDto.AlgorithmMoonConfig.Moon moon = algorithmMoonConfig.getMoon();
+            DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging moonDeviceAlgorithmCharging = Beans.copy(DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging.class, deviceInfo)
+                    .setDeviceTypeName(deviceTypeName)
+                    .setAlgorithmId(deviceInfo.getAlgorithmId())
+                    .setAlgorithmName(algorithmName)
+                    .setStandard(BigDecimal.valueOf(algorithmMoonConfig.getPrice()).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN).doubleValue() + "元/包月(" + moon.getSize() + "笔)")
+                    .setMoney(moon.getMoney());
+            payCheckVo.setDeviceInfo(deviceInfoObj)
+                    .setInfDeviceAlgorithmCharging(infDeviceAlgorithmCharging)
+                    .setMoonDeviceAlgorithmCharging(moonDeviceAlgorithmCharging);
+            result.put(deviceInfo.getDeviceId(), payCheckVo);
+        }
+        return R.ok(result);
     }
 
     @PostMapping("check")

+ 2 - 1
device-api-service/src/main/java/com/xy/service/factory/device/impl/alipay/AliPayOpenDeviceFatoryImpl.java

@@ -37,6 +37,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.time.LocalDateTime;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -197,7 +198,7 @@ public class AliPayOpenDeviceFatoryImpl implements DeviceFactory, SpiDeviceServi
         //激活状态
         FunctionUtils.NoParamsNoResult active = () -> {
             if (deviceStatusChangeNotifyDTO.getActiveStatus() != null && deviceStatusChangeNotifyDTO.getActiveStatus() == 1) {
-                active(new MercMiniDeviceDto.Active().setDeviceId(deviceInfo.getDeviceId()));
+                active(new MercMiniDeviceDto.Active().setDeviceId(Arrays.asList(deviceInfo.getDeviceId())));
             }
         };
         busyStatus.run();

+ 55 - 22
device-api-service/src/main/java/com/xy/service/factory/device/impl/open/OpenDeviceFactoryImpl.java

@@ -3,9 +3,12 @@ package com.xy.service.factory.device.impl.open;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.xy.annotate.Factory;
+import com.xy.collections.list.JArrayList;
+import com.xy.collections.map.JMap;
 import com.xy.consumer.device.push.msg.DevicePushMsgMqttConfiguration;
 import com.xy.consumer.device.push.msg.DevicePushMsgProducer;
 import com.xy.device.EnumDeviceActiveStatus;
@@ -26,6 +29,7 @@ import com.xy.utils.Enum.AlgorithmTypeEnum;
 import com.xy.utils.enums.DeviceTypeEnum;
 import lombok.AllArgsConstructor;
 
+import javax.validation.constraints.NotEmpty;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -143,37 +147,66 @@ public class OpenDeviceFactoryImpl implements DeviceFactory {
     }
 
     @Override
-    public R active(MercMiniDeviceDto.Active active) {
-        DeviceInfo deviceInfo = deviceInfoService.getById(active.getDeviceId());
+    public R<List<MercMiniDeviceDto.ActiveVo>> active(MercMiniDeviceDto.Active active) {
+        List<MercMiniDeviceDto.ActiveVo> result = new ArrayList<>();
+        List<Long> deviceIds = active.getDeviceId();
         //机器是否已激活
         Integer activeState = SysDictUtils.getValue(EnumDeviceActiveStatus.Code.CODE.getCode(), EnumDeviceActiveStatus.N_1.getCode(), Integer.class);
-        if (deviceInfo.getActiveState().equals(activeState)) {
+        long count = deviceInfoService.count(new LambdaQueryWrapper<DeviceInfo>()
+                .in(DeviceInfo::getDeviceId, deviceIds)
+                .eq(DeviceInfo::getActiveState, activeState)
+        );
+        if (count > 0) {
             return R.fail("机器已激活");
         }
         //检查费用
-        R deviceChargingCheck = deviceChargingService.check(new DeviceChargingDto.Check().setDeviceId(active.getDeviceId()));
-        R deviceAlgorithmChargingCheck = deviceAlgorithmChargingService.check(new DeviceAlgorithmChargingDto.Check().setDeviceId(active.getDeviceId()));
-        if (deviceChargingCheck.getCode() != R.Enum.SUCCESS.getCode() && deviceAlgorithmChargingCheck.getCode() != R.Enum.SUCCESS.getCode()) {
-            return R.fail(R.Enum.CHARGING_ALGORITHM_CHARGING.getCode(), R.Enum.CHARGING_ALGORITHM_CHARGING.getMsg());
-        } else {
-            if (deviceChargingCheck.getCode() != R.Enum.SUCCESS.getCode()) {
-                return deviceChargingCheck;
-            }
-            if (deviceAlgorithmChargingCheck.getCode() != R.Enum.SUCCESS.getCode()) {
-                return deviceAlgorithmChargingCheck;
+        deviceIds.forEach(deviceId -> {
+            R deviceChargingCheck = deviceChargingService.check(new DeviceChargingDto.Check().setDeviceId(deviceId));
+            R deviceAlgorithmChargingCheck = deviceAlgorithmChargingService.check(new DeviceAlgorithmChargingDto.Check().setDeviceId(deviceId));
+            if (deviceChargingCheck.getCode() != R.Enum.SUCCESS.getCode() && deviceAlgorithmChargingCheck.getCode() != R.Enum.SUCCESS.getCode()) {
+                MercMiniDeviceDto.ActiveVo activeVo = new MercMiniDeviceDto.ActiveVo()
+                        .setDeviceId(deviceId)
+                        .setCode(R.Enum.CHARGING_ALGORITHM_CHARGING.getCode())
+                        .setMsg(R.Enum.CHARGING_ALGORITHM_CHARGING.getMsg());
+                result.add(activeVo);
+            } else {
+                if (deviceChargingCheck.getCode() != R.Enum.SUCCESS.getCode()) {
+                    MercMiniDeviceDto.ActiveVo activeVo = new MercMiniDeviceDto.ActiveVo()
+                            .setDeviceId(deviceId)
+                            .setCode(deviceChargingCheck.getCode())
+                            .setMsg(deviceChargingCheck.getMsg());
+                    result.add(activeVo);
+                }
+                if (deviceAlgorithmChargingCheck.getCode() != R.Enum.SUCCESS.getCode()) {
+                    MercMiniDeviceDto.ActiveVo activeVo = new MercMiniDeviceDto.ActiveVo()
+                            .setDeviceId(deviceId)
+                            .setCode(deviceAlgorithmChargingCheck.getCode())
+                            .setMsg(deviceAlgorithmChargingCheck.getMsg());
+                    result.add(activeVo);
+                }
             }
-        }
+        });
         //激活
         LocalDateTime now = LocalDateTime.now();
         Integer busyState = SysDictUtils.getValue(EnumDeviceBusyStatus.Code.CODE.getCode(), EnumDeviceBusyStatus.N_1.getCode(), Integer.class);
-        DeviceInfo updateDeviceInfo = new DeviceInfo()
-                .setDeviceId(active.getDeviceId())
-                .setActiveState(activeState)
-                .setBusyState(busyState)
-                .setActiveTime(now)
-                .setShowStatus(true);
-        deviceInfoService.updateById(updateDeviceInfo);
-        return R.ok();
+        List<DeviceInfo> activeList = new ArrayList<>();
+        JMap<Long, Long> deviceIdsJMaps = new JArrayList<>(deviceIds).toMap().cover();
+        deviceIds.forEach(deviceId -> {
+            //过滤需要付费的设备
+            if (!deviceIdsJMaps.containsKey(deviceId)) {
+                DeviceInfo updateDeviceInfo = new DeviceInfo()
+                        .setDeviceId(deviceId)
+                        .setActiveState(activeState)
+                        .setBusyState(busyState)
+                        .setActiveTime(now)
+                        .setShowStatus(true);
+                activeList.add(updateDeviceInfo);
+            }
+        });
+        if (Emptys.check(activeList)) {
+            deviceInfoService.updateBatchById(activeList);
+        }
+        return R.ok(result);
     }
 
     @Override

+ 2 - 2
device-api/src/main/java/com/xy/dto/DeviceChargingDto.java

@@ -123,9 +123,9 @@ public class DeviceChargingDto {
     @Accessors(chain = true)
     public static class PayCheck {
 
-        @NotNull(message = "deviceId不能为空")
+        @NotEmpty(message = "deviceId不能为空")
         @ApiModelProperty("设备id")
-        private Long deviceId;
+        private List<Long> deviceId;
     }
 
     @Data

+ 18 - 1
device-api/src/main/java/com/xy/dto/MercMiniDeviceDto.java

@@ -8,7 +8,9 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 
 import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 public class MercMiniDeviceDto {
 
@@ -57,10 +59,25 @@ public class MercMiniDeviceDto {
     @Accessors(chain = true)
     public static class Active {
 
-        @NotNull(message = "deviceId不能为空")
+        @NotEmpty(message = "deviceId不能为空")
+        @ApiModelProperty("设备id")
+        private List<Long> deviceId;
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class ActiveVo {
+
         @ApiModelProperty("设备id")
         private Long deviceId;
 
+        @ApiModelProperty("状态码")
+        private Integer code;
+
+        @ApiModelProperty("状态说明")
+        private String msg;
+
     }
 
     @Data