package org.yzh.web.controller;
|
|
import io.swagger.v3.oas.annotations.Operation;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.web.bind.annotation.*;
|
import org.yzh.commons.model.R;
|
import org.yzh.commons.util.BytesUtils;
|
import org.yzh.protocol.t808.T0001;
|
import org.yzh.protocol.t808.T8900;
|
import org.yzh.protocol.t808.T8900Lock.*;
|
import org.yzh.web.endpoint.MessageManager;
|
import reactor.core.publisher.Mono;
|
|
import java.util.Calendar;
|
import java.util.Date;
|
|
@RestController
|
@RequestMapping("device")
|
@RequiredArgsConstructor
|
public class JT8900LockController {
|
private final MessageManager messageManager;
|
|
/**
|
* 控制蝶阀锁状态 2025-05-26 zwy
|
* @param clientId 终端ID
|
* @param lockId 锁ID
|
* @param status 锁状态(1:开, 2:关)
|
* @return 操作结果
|
*/
|
@Operation(summary = "控制蝶阀锁状态")
|
@PostMapping("/control")
|
public Mono<R<T0001>> controlValveLock(
|
@RequestParam String clientId,
|
@RequestParam String lockId,
|
@RequestParam int status) {
|
|
// 构建蝶阀锁控制消息
|
ValveLockProtocol valveLockProtocol=new ValveLockProtocol();
|
valveLockProtocol.setLockId(BytesUtils.hex2bytes(lockId));
|
valveLockProtocol.setStatus((byte)status);
|
valveLockProtocol.calculateChecksum();
|
|
T8900 request = new T8900();
|
request.setClientId(clientId);
|
request.setValveLockProtocol(valveLockProtocol);
|
|
// 发送消息并获取响应
|
return messageManager.requestR(request.build(), T0001.class);
|
}
|
|
@Operation(summary = "读取电子锁当前状态")
|
@PostMapping("query-status")
|
public Mono<R<T0001>> queryLockStatus(
|
@RequestParam String clientId, // 终端手机号String
|
@RequestParam String lockId // 蝶阀锁ID(如0xaaaa)
|
) {
|
T8900State t8900State = new T8900State(lockId);
|
T8900 t8900 = new T8900();
|
t8900.setClientId(clientId);
|
t8900.setT8900State(t8900State);
|
// 发送消息并指定响应类为T8900Response
|
//T8900Response response = messageManager.request(clientId, t8900, T8900Response.class).block();
|
|
//return response.parseStatus(); // 解析响应结果
|
return messageManager.requestR(t8900.build(), T0001.class);
|
|
// messageManager.request(clientId, request, T8900Response.class)
|
// .map(T8900Response::get)
|
}
|
|
// 触发设备号读取
|
@Operation(summary = "读取设备号")
|
@GetMapping("/read-device-id")
|
public Mono<R<T0001>> readDeviceId(@RequestParam String clientId) {
|
T8900ReadDeviceID readDeviceID = new T8900ReadDeviceID();
|
readDeviceID.setChecksum(readDeviceID.calculateChecksum());
|
T8900 t8900 = new T8900();
|
t8900.setClientId(clientId);
|
t8900.setReadDeviceID(readDeviceID);
|
|
return messageManager.requestR(t8900.build(), T0001.class);
|
}
|
|
@Operation(summary = "设置设备号")
|
@PostMapping("/set-device-Id")
|
public Mono<R<T0001>> setDeviceId(
|
@RequestParam String clientId,
|
@RequestParam String lockId,
|
@RequestParam String newlockId
|
){
|
T8900SetDeviceID setDeviceID = new T8900SetDeviceID();
|
setDeviceID.setLockId(BytesUtils.hex2bytes(lockId));
|
setDeviceID.setNewlockId(BytesUtils.hex2bytes(newlockId));
|
T8900 t8900 = new T8900();
|
t8900.setClientId(clientId);
|
t8900.setSetDeviceID(setDeviceID);
|
|
return messageManager.requestR(t8900.build(), T0001.class);
|
}
|
|
// 触发读所有信息
|
@Operation(summary = "读所有信息")
|
@PostMapping("/read-device-all")
|
public Mono<R<T0001>> readAllInformation(
|
@RequestParam String clientId,
|
@RequestParam String lockId
|
) {
|
T8900ReadAllInformation readAllInformation = new T8900ReadAllInformation();
|
readAllInformation.setLockId(BytesUtils.hex2bytes(lockId));
|
Date currentDate = new Date();
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(currentDate);
|
readAllInformation.setYear((byte) calendar.get(Calendar.YEAR));
|
readAllInformation.setMonth((byte) calendar.get(Calendar.MONTH));
|
readAllInformation.setDay((byte) calendar.get(Calendar.DAY_OF_MONTH));
|
readAllInformation.setHour((byte) calendar.get(Calendar.HOUR_OF_DAY));
|
readAllInformation.setMinute((byte) calendar.get(Calendar.MINUTE));
|
readAllInformation.setSecond((byte) calendar.get(Calendar.SECOND));
|
T8900 t8900 = new T8900();
|
t8900.setClientId(clientId);
|
t8900.setReadAllInformation(readAllInformation);
|
|
return messageManager.requestR(t8900.build(), T0001.class);
|
}
|
|
@Operation(summary = "设置蝶阀锁离线开锁密码")
|
@PostMapping("/setPassword")
|
public Mono<R<T0001>> setPassword(
|
@RequestParam String clientId,
|
@RequestParam String lockId,
|
@RequestParam String password
|
){
|
T8900SetPassword setPassword = new T8900SetPassword();
|
setPassword.setLockId(BytesUtils.hex2bytes(lockId));
|
String[] pwd = password.split(",");
|
if(pwd.length != 10){
|
System.out.println("密码必须为10组,每组六位!");
|
return null;
|
}
|
setPassword.setPassword1(BytesUtils.hex2bytes(pwd[0]));
|
setPassword.setPassword2(BytesUtils.hex2bytes(pwd[1]));
|
setPassword.setPassword3(BytesUtils.hex2bytes(pwd[2]));
|
setPassword.setPassword4(BytesUtils.hex2bytes(pwd[3]));
|
setPassword.setPassword5(BytesUtils.hex2bytes(pwd[4]));
|
setPassword.setPassword6(BytesUtils.hex2bytes(pwd[5]));
|
setPassword.setPassword7(BytesUtils.hex2bytes(pwd[6]));
|
setPassword.setPassword8(BytesUtils.hex2bytes(pwd[7]));
|
setPassword.setPassword9(BytesUtils.hex2bytes(pwd[8]));
|
setPassword.setPassword10(BytesUtils.hex2bytes(pwd[9]));
|
|
T8900 t8900 = new T8900();
|
t8900.setClientId(clientId);
|
t8900.setSetPassword(setPassword);
|
return messageManager.requestR(t8900.build(), T0001.class);
|
}
|
}
|