|
@@ -4,6 +4,9 @@ import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import com.xy.alipay.SpiDeviceService;
|
|
|
import com.xy.annotate.Factory;
|
|
|
+import com.xy.collections.list.JArrayList;
|
|
|
+import com.xy.collections.list.JList;
|
|
|
+import com.xy.collections.map.JMap;
|
|
|
import com.xy.config.DeviceThreadPoolConfig;
|
|
|
import com.xy.constants.SpiResponseConst;
|
|
|
import com.xy.consumer.connected.ConnectedMqttConfiguration;
|
|
@@ -16,28 +19,27 @@ import com.xy.dto.spi.DeviceAlarmNotifyDTO;
|
|
|
import com.xy.dto.spi.DeviceStatusChangeNotifyDTO;
|
|
|
import com.xy.entity.DeviceInfo;
|
|
|
import com.xy.entity.DeviceStatus;
|
|
|
-import com.xy.entity.DeviceSysinfo;
|
|
|
import com.xy.error.CommRuntimeException;
|
|
|
import com.xy.service.*;
|
|
|
import com.xy.service.factory.device.DeviceFactory;
|
|
|
import com.xy.service.factory.device.impl.open.OpenDeviceFactoryImpl;
|
|
|
import com.xy.utils.*;
|
|
|
-import com.xy.utils.enums.DeviceActiveStateEnum;
|
|
|
import com.xy.utils.enums.DeviceErrorRecordTypesEnum;
|
|
|
import com.xy.vo.DeviceDetailVO;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
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;
|
|
|
|
|
|
/**
|
|
|
* 支付宝开门柜设备 接口实现
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@Factory(type = "2")
|
|
|
@AllArgsConstructor
|
|
|
@Api(tags = "支付宝开门柜设备")
|
|
@@ -76,7 +78,41 @@ public class AliPayOpenDeviceFatoryImpl implements DeviceFactory, SpiDeviceServi
|
|
|
|
|
|
@Override
|
|
|
public R active(MercMiniDeviceDto.Active2 active) {
|
|
|
- return openDeviceFactoryImpl.active(active);
|
|
|
+ R<List<MercMiniDeviceDto.ActiveVo>> result = openDeviceFactoryImpl.active(active);
|
|
|
+ if (R.Enum.FAIL.getCode() == result.getCode()) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ //获取差集,得到已激活设备
|
|
|
+ JList<Long> costDeviceIds = new JArrayList<>(result.getData()).getProperty(MercMiniDeviceDto.ActiveVo::getDeviceId);
|
|
|
+ JList<Long> deviceIds = new JArrayList<>(active.getDeviceId());
|
|
|
+ JList<Long> diff = deviceIds.diff(costDeviceIds);
|
|
|
+ //查询设备系统信息
|
|
|
+ List<DeviceSysinfoDto.Vo> deviceSysinfos = deviceSysinfoService.list(new DeviceSysinfoDto.SelectList().setDeviceIds(diff)).getData();
|
|
|
+ JMap<Long, DeviceSysinfoDto.Vo> deviceSysinfosJMaps = new JArrayList<>(deviceSysinfos).toMap(DeviceSysinfoDto.Vo::getDeviceId).cover();
|
|
|
+ //查询设备信息
|
|
|
+ List<DeviceInfoDto.Vo> deviceInfos = deviceInfoService.list(new DeviceInfoDto.ListDto().setDeviceIds(diff)).getData();
|
|
|
+ JMap<Long, DeviceInfoDto.Vo> deviceInfosJMaps = new JArrayList<>(deviceInfos).toMap(DeviceInfoDto.Vo::getDeviceId).cover();
|
|
|
+ ThreadPoolUtils.Execute execute = ThreadPoolUtils.excPoll(DeviceThreadPoolConfig.ALI_DEVICE_ACTIVE, diff.size());
|
|
|
+ diff.forEach(deviceId -> execute.execute(() -> {
|
|
|
+ DeviceSysinfoDto.Vo deviceSysinfo = deviceSysinfosJMaps.get(deviceId);
|
|
|
+ DeviceInfoDto.Vo deviceInfo = deviceInfosJMaps.get(deviceId);
|
|
|
+ //调用支付宝绑定
|
|
|
+ R.feignCheckData(alipayDeviceService.deviceBind(new BindDeviceDTO()
|
|
|
+ .setTerminalId(String.valueOf(deviceId))
|
|
|
+ .setBoardSn(deviceSysinfo.getDeviceSn()))
|
|
|
+ );
|
|
|
+ //调用支付宝激活
|
|
|
+ boolean activeOk = R.feignCheckData(alipayDeviceService.deviceActive(new BindActiveDTO()
|
|
|
+ .setTerminalId(String.valueOf(deviceId))
|
|
|
+ .setBoardSn(deviceSysinfo.getDeviceSn())
|
|
|
+ .setDeviceName(StrUtil.isNotEmpty(deviceInfo.getDeviceName()) ? deviceInfo.getDeviceName() : String.valueOf(deviceId)))
|
|
|
+ );
|
|
|
+ if (!activeOk) {
|
|
|
+ throw new CommRuntimeException("设备激活失败,请联系客服!");
|
|
|
+ }
|
|
|
+ }));
|
|
|
+ execute.end();
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -205,49 +241,4 @@ public class AliPayOpenDeviceFatoryImpl implements DeviceFactory, SpiDeviceServi
|
|
|
return R.ok();
|
|
|
}
|
|
|
|
|
|
- @ApiOperation("设备注册&激活")
|
|
|
- @PostMapping("deviceActive")
|
|
|
- public R deviceActive(@RequestBody AlipayDeviceActiveDto dto) {
|
|
|
- Long deviceId = dto.getDeviceId();
|
|
|
- String sn = dto.getSn();
|
|
|
- DeviceInfoDto.Vo deviceInfo = R.feignCheckData(deviceInfoService.obj(new DeviceInfoDto.Obj().setDeviceId(deviceId).setIsSysinfo(Boolean.TRUE)));
|
|
|
- Long mercId = deviceInfo.getMercId();
|
|
|
- Integer activeState = deviceInfo.getActiveState();
|
|
|
- if (DeviceActiveStateEnum.TRUE.getCode().equals(String.valueOf(activeState))) {
|
|
|
- throw new CommRuntimeException("此设备已经在平台激活,请到货柜操作!");
|
|
|
- }
|
|
|
- DeviceSysinfoDto.Vo deviceSysinfo = deviceInfo.getDeviceSysinfo();
|
|
|
- if (deviceSysinfo != null) {
|
|
|
- String deviceSn = deviceSysinfo.getDeviceSn();
|
|
|
- if (StrUtil.isNotEmpty(deviceSn)) {
|
|
|
- //存在绑定关系了
|
|
|
- //绑定sn与扫码获取的sn是否一致
|
|
|
- if (!deviceSn.equals(sn)) {
|
|
|
- throw new CommRuntimeException("SN号与平台登记的不一致,请联系客服!");
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
- //登记了 but 没有sn ,则启用扫码获取的sn
|
|
|
- //调用支付宝 注册
|
|
|
-
|
|
|
- }
|
|
|
- Boolean regOk = R.feignCheckData(alipayDeviceService.deviceBind(new BindDeviceDTO().setTerminalId(String.valueOf(deviceId)).setBoardSn(sn)));
|
|
|
- if (regOk) {
|
|
|
- deviceSysinfoService.updateById(new DeviceSysinfo().setDeviceId(deviceId).setDeviceSn(sn));
|
|
|
- }
|
|
|
- String deviceName = deviceInfo.getDeviceName();
|
|
|
- deviceName = StrUtil.isNotEmpty(deviceInfo.getDeviceName()) ? deviceName : String.valueOf(deviceId);
|
|
|
- //调用支付宝激活
|
|
|
- Boolean activeOk = R.feignCheckData(alipayDeviceService.deviceActive(new BindActiveDTO().setTerminalId(String.valueOf(deviceId)).setBoardSn(sn).setDeviceName(deviceName)));
|
|
|
- if (!activeOk) {
|
|
|
- throw new CommRuntimeException("设备激活失败,请联系客服!");
|
|
|
- }
|
|
|
- //更新激活状态
|
|
|
- deviceInfoService.updateById(new DeviceInfo().setDeviceId(deviceId).setActiveState(1).setActiveTime(LocalDateTime.now()));
|
|
|
- } else {
|
|
|
- throw new CommRuntimeException("此设备尚未在平台登记,请联系客服!");
|
|
|
- }
|
|
|
-
|
|
|
- return R.ok();
|
|
|
- }
|
|
|
}
|