DeviceOpenApiService.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package com.xy.open;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.json.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.xy.annotate.RestMappingController;
  8. import com.xy.annotation.Open;
  9. import com.xy.bean.OpenContext;
  10. import com.xy.bean.ServiceContext;
  11. import com.xy.dto.CommandMqtt;
  12. import com.xy.dto.OpenPlatformConfigDto;
  13. import com.xy.entity.DeviceInfo;
  14. import com.xy.exception.ServiceException;
  15. import com.xy.open.dto.DeviceOpenApiDTO;
  16. import com.xy.open.vo.DeviceOpenApiVO;
  17. import com.xy.service.DeviceInfoServiceImpl;
  18. import com.xy.service.MqttService;
  19. import com.xy.service.OpenPlatformConfigService;
  20. import com.xy.utils.PageBean;
  21. import com.xy.utils.R;
  22. import io.swagger.annotations.Api;
  23. import io.swagger.annotations.ApiOperation;
  24. import lombok.RequiredArgsConstructor;
  25. import lombok.extern.slf4j.Slf4j;
  26. import org.springframework.stereotype.Service;
  27. import org.springframework.web.bind.annotation.PostMapping;
  28. import org.springframework.web.bind.annotation.RequestBody;
  29. import javax.validation.Valid;
  30. import java.util.ArrayList;
  31. import java.util.List;
  32. import static com.xy.utils.PlusBeans.toIPage;
  33. import static com.xy.utils.PlusBeans.toPageBean;
  34. /**
  35. * 开放api
  36. */
  37. @Slf4j
  38. @Service
  39. @Api(tags = "设备API")
  40. @RequiredArgsConstructor
  41. @RestMappingController("/openApi")
  42. public class DeviceOpenApiService {
  43. private final DeviceInfoServiceImpl deviceInfoService;
  44. private final OpenPlatformConfigService openPlatformConfigService;
  45. private final MqttService mqttService;
  46. @ApiOperation(value = "获取商户设备列表", notes = "获取商户设备列表")
  47. @Open(value = "device.page.get", version = "1.0", permission = true)
  48. @PostMapping("/device/page/get")
  49. public PageBean<DeviceOpenApiVO.DeviceList> devicePageGet(@RequestBody @Valid DeviceOpenApiDTO.DeviceListGet dto) {
  50. OpenContext oct = ServiceContext.getCurrentContext().getOpenContext();
  51. String appId = oct.getAppId();
  52. boolean b = R.feignCheckData(openPlatformConfigService.checkAuthByMercCode(new OpenPlatformConfigDto.CheckAuth().setAppId(appId).setMercCodes(dto.getMercCodes())));
  53. if (!b) {
  54. throw new ServiceException("您传入的商户编码中包含非法编码!");
  55. }
  56. PageBean pageBean = dto.getPage();
  57. LambdaQueryWrapper<DeviceInfo> lqw = Wrappers.<DeviceInfo>lambdaQuery()
  58. .in(DeviceInfo::getMercCode, dto.getMercCodes()
  59. );
  60. IPage<DeviceInfo> iPage = deviceInfoService.page(toIPage(pageBean), lqw);
  61. return toPageBean(DeviceOpenApiVO.DeviceList.class, iPage);
  62. }
  63. @ApiOperation(value = "设备操作", notes = "设备操作(开打印机门锁:openPrinterLock)")
  64. @Open(value = "device.operate", version = "1.0", permission = true)
  65. @PostMapping("/device/operate")
  66. public DeviceOpenApiDTO.DeviceOperateResult deviceOperate(@RequestBody @Valid DeviceOpenApiDTO.DeviceOperate dto) {
  67. DeviceOpenApiDTO.DeviceOperateResult result = new DeviceOpenApiDTO.DeviceOperateResult();
  68. OpenContext oct = ServiceContext.getCurrentContext().getOpenContext();
  69. String appId = oct.getAppId();
  70. List<Long> mercIds = R.feignCheckData(openPlatformConfigService.getMercIdsByAppId(new OpenPlatformConfigDto.QueryByApp().setAppId(appId)));
  71. if (CollUtil.isEmpty(mercIds)) {
  72. throw new ServiceException("尚未分配商户,请联系平台客服!");
  73. }
  74. Long deviceId = dto.getDeviceId();
  75. DeviceInfo deviceInfo = deviceInfoService.getById(deviceId);
  76. if (deviceInfo == null) {
  77. throw new ServiceException("设备不存在!");
  78. }
  79. if (!CollUtil.contains(mercIds, deviceInfo.getMercId())) {
  80. throw new ServiceException("您没有权限操作该设备!");
  81. }
  82. String action = dto.getAction();
  83. if ("openPrinterLock".equals(action)) {
  84. action = "locker";
  85. } else {
  86. throw new ServiceException("未知或不支持的操作类型!");
  87. }
  88. List<CommandMqtt> commandMqtts = new ArrayList<>();
  89. JSONObject templet = new JSONObject();
  90. templet.putOnce("wkSn", "$wkSn$");
  91. templet.putOnce("cmdType", "task");
  92. templet.putOnce("actionType", "issue");
  93. JSONObject data = new JSONObject();
  94. data.putOnce("type", action);
  95. data.putOnce("id", "0");
  96. data.putOnce("jgh", "1");
  97. data.putOnce("task", "open");
  98. templet.putOnce("data", data);
  99. commandMqtts.add(new CommandMqtt().setDeviceId(deviceId).setTemplet(templet));
  100. mqttService.senCommand(commandMqtts);
  101. result.setResult(true);
  102. return result;
  103. }
  104. }