Browse Source

csdj下行控制

jwy
review512jwy@163.com 10 hours ago
parent
commit
0a06eadb4c
  1. 23
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/ApGatewayController.java
  2. 14
      data-center-business-model/src/main/java/com/techsor/datacenter/business/dto/apgateway/CsdjDownlinkParam.java
  3. 2
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/ApGatewayService.java
  4. 39
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/ApGatewayServiceImpl.java

23
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/ApGatewayController.java

@ -14,8 +14,8 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@ -25,7 +25,7 @@ import org.springframework.web.bind.annotation.*;
@Slf4j
public class ApGatewayController {
@Autowired
@Resource
private ApGatewayService apGatewayService;
@Operation(summary = "Get Gateway clients list by param", description = "")
@ -94,6 +94,25 @@ public class ApGatewayController {
}
@Operation(summary = "CSDJ 下行指令", description = "type=1 端子状態通知要求(0x03), 后续扩展")
@PostMapping(path = "/csdj/downlink")
public SimpleDataResponse csdjDownlink(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId,
@Parameter(name = "CompanyId", description = "User's company ID", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type 0: Chinese 1: English 2: Japanese", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType,
@Parameter(name = "UTCOffset", description = "Offset between GMT and local time in minutes, e.g., -480 for GMT+8") @RequestHeader(required = true) Integer UTCOffset,
@RequestBody CsdjDownlinkParam param) {
try {
return apGatewayService.csdjDownlink(param.getTerminalId(), param.getType());
} catch (Exception e) {
log.error("[CSDJ-Downlink] 接口异常", e);
return SimpleDataResponse.fail(ResponseCode.SERVER_ERROR, "下行请求异常: " + e.getMessage());
}
}
@Hidden
@Operation(summary = "MQTT statistical history", description = "")
@PostMapping(path = "/heartbeat/getListPage")

14
data-center-business-model/src/main/java/com/techsor/datacenter/business/dto/apgateway/CsdjDownlinkParam.java

@ -0,0 +1,14 @@
package com.techsor.datacenter.business.dto.apgateway;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class CsdjDownlinkParam {
@Schema(description = "终端ID (IMEI)", example = "031")
private String terminalId;
@Schema(description = "指令类型: 1=端子状態通知要求(0x03 查数据), 后续扩展", example = "1")
private Integer type;
}

2
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/ApGatewayService.java

@ -25,6 +25,6 @@ public interface ApGatewayService {
PageInfo<ApGatewayHeartbeatHistoryResponseVO> getApHeartbeatHistoryListPage(ApGatewayHeartbeatQueryParam param, Long userId,
Long companyId, Integer languageType);
SimpleDataResponse csdjDownlink(String terminalId, Integer type);
}

39
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/ApGatewayServiceImpl.java

@ -26,6 +26,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
@ -33,7 +34,9 @@ import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@ -60,7 +63,10 @@ public class ApGatewayServiceImpl implements ApGatewayService {
private UserOperationLogsService userOperationLogsService;
@Resource
private NotificationService notificationService;
@Resource
private RedisTemplate<String, Object> redisTemplate;
private static final String CSDJ_DOWNLINK_KEY_PREFIX = "csdj:downlink:";
@Override
public PageInfo<ApGateway> query(ApGatewayQueryParam param, Long userId, Long companyId, Integer languageType) {
@ -373,4 +379,37 @@ public class ApGatewayServiceImpl implements ApGatewayService {
}
@Override
public SimpleDataResponse csdjDownlink(String terminalId, Integer type) {
if (terminalId == null || terminalId.isEmpty()) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "terminalId 不能为空");
}
if (type == null) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "type 不能为空");
}
String payloadHex = switch (type) {
case 1 -> "03"; // 端子状態通知要求(CSDJ用)
default -> null;
};
if (payloadHex == null) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR,
"不支持的指令类型: " + type + " (当前支持: 1=端子状態通知要求)");
}
String key = CSDJ_DOWNLINK_KEY_PREFIX + terminalId;
redisTemplate.opsForList().rightPush(key, payloadHex);
Long pendingCount = redisTemplate.opsForList().size(key);
Map<String, Object> result = new LinkedHashMap<>();
result.put("success", true);
result.put("terminalId", terminalId);
result.put("type", type);
result.put("payloadHex", payloadHex);
result.put("pendingCount", pendingCount != null ? pendingCount : 0);
log.info("[CSDJ-Downlink] 已添加下行任务, terminalId={}, type={}, payloadHex={}, pendingCount={}",
terminalId, type, payloadHex, pendingCount);
return SimpleDataResponse.success(result);
}
}

Loading…
Cancel
Save