1.增加语音WS客户端

master
董哲奇 8 months ago
parent 9cf368cb1e
commit c9227526a5

@ -278,6 +278,10 @@
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
</dependencies>
<build>

@ -254,6 +254,8 @@ public class DmYdjh implements Serializable {
// private String sljhrq;
// private String pwpgrq;
private String djh;//派工单号
// 生产状态
private String sczt; // 生产状态:编制, 提交, 下达, 上料, 抛丸, 理料, 划线/切割, 完成

@ -38,6 +38,10 @@ public class WsHandler {
}
}
public void whoIsSelect(JSONObject object){
socketIOServer.getBroadcastOperations().sendEvent("whoIsSelect", object);
}
public void sendSlComplete(JSONObject object) {
socketIOServer.getBroadcastOperations().sendEvent("slComplete", object);
}

@ -0,0 +1,100 @@
package com.dsic.gj_erp.wsclient;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
@Getter
@Setter
public class Message {
private String code;
private Msg msg;
@JSONField(serialize = false)
private CodeEnum codeEx;
@JSONField(serialize = false)
private Instructions instructions;
public static Message reg(String id){
Message message = new Message();
message.setCode(CodeEnum.REG.getCode());
message.setMsg(Msg.reg(id));
message.formatCodeToEnum(CodeEnum.REG.getCode());
return message;
}
public static Message heart(String id){
Message message = new Message();
message.setCode(CodeEnum.HEART.getCode());
message.setMsg(Msg.reg(id));
message.formatCodeToEnum(CodeEnum.HEART.getCode());
return message;
}
public void formatInstructions(){
if (this.getCodeEx()==CodeEnum.ZX){
Instructions.valueOf(this.msg.getResult());
}
}
public void formatCodeToEnum(@NonNull String code){
for (CodeEnum e:CodeEnum.values()){
if (e.getCode().equals(code)){
this.codeEx=e;
}
}
}
public CodeEnum getEnumByCode(@NonNull String code){
for (CodeEnum e:CodeEnum.values()){
if (e.getCode().equals(code)){
return e;
}
}
return null;
}
@AllArgsConstructor
public enum CodeEnum{
REG("9000"),
ZX("3000"),
RESULT("9002"),
HEART("9003"),
;
@Getter
private final String code;
}
public enum Instructions{
,,,
}
@Getter
@Setter
public static class Msg{
private String erpId;
private String orderNumber;
private String actionType;
private String time;
private String deviceId;
private String result;
private static Msg reg(String id){
Msg msg = new Msg();
msg.setErpId(id);
return msg;
}
}
public JSONObject toJson(){
return (JSONObject) JSONObject.toJSON(this);
}
@Override
public String toString(){
return JSONObject.toJSONString(this);
}
}

@ -0,0 +1,36 @@
package com.dsic.gj_erp.wsclient;
import com.dsic.gj_erp.wsclient.handler.HeartHandler;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
@RequiredArgsConstructor
public class WebSocketClientComponent {
@Value("${ws.client.url}")
private String url;
@Value("${ws.client.id}")
private String erpId;
private final WebSocketService webSocketService;
private final HeartHandler heartHandler;
@PostConstruct
public void init() {
// 发送消息示例
try {
webSocketService.connect(this.url);
webSocketService.sendMessage(Message.reg(this.erpId).toString());
heartHandler.execute(Message.heart(erpId));
} catch (Exception e) {
e.printStackTrace();
}
}
}

@ -0,0 +1,14 @@
package com.dsic.gj_erp.wsclient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
@Configuration
public class WebSocketConfig {
@Bean
public WebSocketClient webSocketClient() {
return new StandardWebSocketClient();
}
}

@ -0,0 +1,59 @@
package com.dsic.gj_erp.wsclient;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.client.WebSocketConnectionManager;
import org.springframework.web.socket.handler.TextWebSocketHandler;
@Service
@AllArgsConstructor
public class WebSocketService extends TextWebSocketHandler {
private WebSocketSession session;
private final WebSocketClient client;
public void connect(String uri) {
WebSocketConnectionManager manager = new WebSocketConnectionManager(client, this, uri);
manager.start();
}
public void disconnect() throws Exception {
if (session != null && session.isOpen()) {
session.close();
}
}
public void sendMessage(String message) throws Exception {
if (session != null && session.isOpen()) {
session.sendMessage(new TextMessage(message));
} else {
throw new IllegalStateException("WebSocket is not connected.");
}
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
this.session = session; // 处理连接后保存session
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
System.out.println("Received: " + message.getPayload());
Message msg= JSONObject.parseObject(message.getPayload(),Message.class);
switch (msg.getCodeEx()){
case REG:
break;
case ZX:
break;
}
}
}

@ -0,0 +1,37 @@
package com.dsic.gj_erp.wsclient.handler;
import cn.hutool.cron.CronUtil;
import cn.hutool.cron.task.Task;
import com.alibaba.fastjson.JSONObject;
import com.dsic.gj_erp.wsclient.Message;
import com.dsic.gj_erp.wsclient.WebSocketService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class HeartHandler implements IHandlerService{
private final WebSocketService webSocketService;
private boolean scheduleStartFlag=false;
@Override
public void execute(Message message) {
if (this.scheduleStartFlag){
return;
}
CronUtil.schedule("*/30 * * * * *", (Task) () -> {
try {
webSocketService.sendMessage(message.toString());
} catch (Exception e) {
e.printStackTrace();
}
});
// 支持秒级别定时任务
CronUtil.setMatchSecond(true);
CronUtil.start();
this.scheduleStartFlag=true;
}
}

@ -0,0 +1,9 @@
package com.dsic.gj_erp.wsclient.handler;
import com.alibaba.fastjson.JSONObject;
import com.dsic.gj_erp.wsclient.Message;
public interface IHandlerService {
void execute(Message message);
}

@ -0,0 +1,33 @@
package com.dsic.gj_erp.wsclient.handler;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsic.gj_erp.bean.jhgk.DmYdjh;
import com.dsic.gj_erp.service.jhgk.DmYdjhService;
import com.dsic.gj_erp.ws.WsHandler;
import com.dsic.gj_erp.wsclient.Message;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class ZxHandler implements IHandlerService{
private final DmYdjhService ydjhService;
private final WsHandler wsHandler;
@Override
public void execute(Message message) {
String djh=message.getMsg().getOrderNumber();
DmYdjh one = ydjhService.getOne(Wrappers.<DmYdjh>lambdaQuery().eq(DmYdjh::getDjh, djh));
switch (message.getInstructions()){
case :
case :
JSONObject object=new JSONObject();
object.put("zyjh",one);
wsHandler.whoIsSelect(object);
break;
}
}
}

@ -8,3 +8,6 @@ ws:
pingInterval: 25000
maxHttpContentLength: 1048576
maxFramePayloadLength: 1048576
client:
url: ws://127.0.0.1:9000
id: abc
Loading…
Cancel
Save