diff --git a/data-config/ws-message-forward-config.json b/data-config/ws-message-forward-config.json new file mode 100644 index 0000000..4d440e4 --- /dev/null +++ b/data-config/ws-message-forward-config.json @@ -0,0 +1,8 @@ +[ + { + "method": "WS_RECORD_SUBMIT", + "urls": ["http://127.0.0.1:9312/message/receive1/wsRecordSubmit/do"], + "errorResult": "1系统错误!", + "messageDataType": 1 + } +] \ No newline at end of file diff --git a/src/main/java/com/docus/server/CxfConfig.java b/src/main/java/com/docus/server/CxfConfig.java index 3314312..166d5c6 100644 --- a/src/main/java/com/docus/server/CxfConfig.java +++ b/src/main/java/com/docus/server/CxfConfig.java @@ -1,6 +1,8 @@ package com.docus.server; +import com.docus.server.message.consts.HospitalWsMethod; import com.docus.server.message.consts.InteractiveMethod; +import com.docus.server.message.service.SdWebServiceUnifyMessageService; import com.docus.server.message.service.UnifyMessageService; import org.apache.cxf.Bus; import org.apache.cxf.bus.spring.SpringBus; @@ -19,14 +21,24 @@ public class CxfConfig { private UnifyMessageService unifyMessageService; + private SdWebServiceUnifyMessageService sdWebServiceUnifyMessageService; + @Autowired @Qualifier(InteractiveMethod.WS) public void setUnifyMessageService(UnifyMessageService unifyMessageService) { this.unifyMessageService = unifyMessageService; } + @Autowired + @Qualifier(HospitalWsMethod.WS_RECORD_SUBMIT) + public void setSdWebServiceUnifyMessageService(SdWebServiceUnifyMessageService sdWebServiceUnifyMessageService) { + this.sdWebServiceUnifyMessageService = sdWebServiceUnifyMessageService; + } + + /** * 注入Servlet,注意beanName不能为dispatcherServlet + * * @author Fang Ruichuan * @date 2022/11/14 19:16 */ @@ -43,8 +55,16 @@ public class CxfConfig { @Bean @Qualifier("unifyEndPoint") public Endpoint unifyEndPoint() { - EndpointImpl endpoint = new EndpointImpl(springBus(), null); - endpoint.publish("/api/unify"); + EndpointImpl endpoint = new EndpointImpl(springBus(), unifyMessageService); + endpoint.publish("/unify"); + return endpoint; + } + + @Bean + @Qualifier("wsRecordSubmitEndPoint") + public Endpoint wsRecordSubmitEndPoint() { + EndpointImpl endpoint = new EndpointImpl(springBus(), sdWebServiceUnifyMessageService); + endpoint.publish("/WS_RECORD_SUBMIT"); return endpoint; } } diff --git a/src/main/java/com/docus/server/message/config/WsMessageForwardConfig.java b/src/main/java/com/docus/server/message/config/WsMessageForwardConfig.java new file mode 100644 index 0000000..4b9424c --- /dev/null +++ b/src/main/java/com/docus/server/message/config/WsMessageForwardConfig.java @@ -0,0 +1,47 @@ +package com.docus.server.message.config; + +import com.docus.core.util.Func; +import com.docus.server.message.enums.DataFormatEnum; +import com.docus.server.message.util.TableJsonRead; +import lombok.Data; + +import java.util.List; +import java.util.Objects; + +/** + * @author wyb + */ +public class WsMessageForwardConfig { + private final static String CONFIG_FILE_PATH = "data-config"; + private final static String CONFIG_FILE_NAME = "ws-message-forward-config.json"; + + public static WsMessageForward wsMessageForward(String method) { + Objects.requireNonNull(method); + TableJsonRead jsonReader = new TableJsonRead(); + String wsMessageForwardConfigJson = jsonReader.ReadContent(CONFIG_FILE_PATH, CONFIG_FILE_NAME); + if (wsMessageForwardConfigJson == null) { + return null; + } + List wsMessageForwardList = Func.parseJsonArray(wsMessageForwardConfigJson, WsMessageForward.class); + if (Func.isEmpty(wsMessageForwardList)) { + return null; + } + for (WsMessageForward wsMessageForward : wsMessageForwardList) { + if (method.equals(wsMessageForward.getMethod())) { + return wsMessageForward; + } + } + return null; + } + + @Data + public static class WsMessageForward { + private String method; + private List urls; + private String errorResult; + /** + * @see DataFormatEnum#getValue() + */ + private Integer messageDataType; + } +} diff --git a/src/main/java/com/docus/server/message/consts/HospitalWsMethod.java b/src/main/java/com/docus/server/message/consts/HospitalWsMethod.java new file mode 100644 index 0000000..685e852 --- /dev/null +++ b/src/main/java/com/docus/server/message/consts/HospitalWsMethod.java @@ -0,0 +1,13 @@ +package com.docus.server.message.consts; + +/** + * 医院webservice推送方法 + * + * @author wyb + */ +public interface HospitalWsMethod { + /** + * 电子病历提交信息推送 + */ + String WS_RECORD_SUBMIT = "WS_RECORD_SUBMIT"; +} diff --git a/src/main/java/com/docus/server/message/controller/MessagePushController.java b/src/main/java/com/docus/server/message/controller/MessagePushController.java new file mode 100644 index 0000000..adcd2af --- /dev/null +++ b/src/main/java/com/docus/server/message/controller/MessagePushController.java @@ -0,0 +1,37 @@ +package com.docus.server.message.controller; + +import com.docus.server.message.consts.InteractiveMethod; +import com.docus.server.message.dto.Message; +import com.docus.server.message.service.UnifyMessageService; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 消息接收控制 + * + * @author wyb + */ +@Api("消息推送") +@RestController +@Slf4j +@RequestMapping("/message/push") +public class MessagePushController { + private UnifyMessageService unifyMessageService; + + @Autowired + @Qualifier(InteractiveMethod.HTTP) + public void setUnifyMessageService(UnifyMessageService unifyMessageService) { + this.unifyMessageService = unifyMessageService; + } + + @PostMapping("/do") + public String pushInformation(@RequestBody Message message) { + return unifyMessageService.pushInformation(message.getMethod(), message.getMessage()); + } +} diff --git a/src/main/java/com/docus/server/message/controller/MessageReceiveController.java b/src/main/java/com/docus/server/message/controller/MessageReceiveController.java index 25d4013..42f49d3 100644 --- a/src/main/java/com/docus/server/message/controller/MessageReceiveController.java +++ b/src/main/java/com/docus/server/message/controller/MessageReceiveController.java @@ -1,35 +1,32 @@ package com.docus.server.message.controller; -import com.docus.server.message.consts.InteractiveMethod; +import com.docus.infrastructure.web.api.ResultCode; import com.docus.server.message.dto.Message; -import com.docus.server.message.service.UnifyMessageService; +import com.docus.server.message.dto.MessageResponse; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 消息接收控制 + * * @author wyb */ -@Api("") +@Api("消息接收") @RestController @Slf4j -@RequestMapping("/api/message") +@RequestMapping("/message/receive") public class MessageReceiveController { - private UnifyMessageService unifyMessageService; - @Autowired - @Qualifier(InteractiveMethod.HTTP) - public void setUnifyMessageService(UnifyMessageService unifyMessageService) { - this.unifyMessageService = unifyMessageService; - } - @PostMapping("/receive") - public String receiveMessage(Message message){ - return unifyMessageService.receive(message.getMethod(),message.getMessage()); + @PostMapping("/wsRecordSubmit/do") + @ApiOperation("消息接收测试") + public MessageResponse receiveMessage(@RequestBody Message message) { + System.out.println("wsRecordSubmit" + message); + return new MessageResponse(ResultCode.SUCCESS.getCode(), "成功接收到了!"); } } diff --git a/src/main/java/com/docus/server/message/dto/Message.java b/src/main/java/com/docus/server/message/dto/Message.java index f49e1bf..c3fdd76 100644 --- a/src/main/java/com/docus/server/message/dto/Message.java +++ b/src/main/java/com/docus/server/message/dto/Message.java @@ -11,4 +11,20 @@ import lombok.Setter; public class Message { private String method; private String message; + + public Message() { + } + + public Message(String method, String message) { + this.method = method; + this.message = message; + } + + @Override + public String toString() { + return "Message{" + + "method='" + method + '\'' + + ", message='" + message + '\'' + + '}'; + } } diff --git a/src/main/java/com/docus/server/message/dto/MessageResponse.java b/src/main/java/com/docus/server/message/dto/MessageResponse.java new file mode 100644 index 0000000..0ff8884 --- /dev/null +++ b/src/main/java/com/docus/server/message/dto/MessageResponse.java @@ -0,0 +1,19 @@ +package com.docus.server.message.dto; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author wyb + */ +@Getter +@Setter +public class MessageResponse { + private Integer respCode; + private String respMessage; + + public MessageResponse(Integer respCode, String respMessage) { + this.respCode = respCode; + this.respMessage = respMessage; + } +} diff --git a/src/main/java/com/docus/server/message/enums/DataFormatEnum.java b/src/main/java/com/docus/server/message/enums/DataFormatEnum.java new file mode 100644 index 0000000..4d29bde --- /dev/null +++ b/src/main/java/com/docus/server/message/enums/DataFormatEnum.java @@ -0,0 +1,32 @@ +package com.docus.server.message.enums; + +import com.docus.infrastructure.core.db.enums.IIntegerEnum; + +public enum DataFormatEnum implements IIntegerEnum { + XML(1, "XML"), JSON(2, "JSON"); + Integer value; + String display; + + DataFormatEnum(Integer value, String display) { + this.value = value; + this.display = display; + } + + @Override + public Integer getValue() { + return this.value; + } + + @Override + public String getDisplay() { + return this.display; + } + + public static DataFormatEnum fromValue(Integer value) { + try { + return (DataFormatEnum) IIntegerEnum.fromValue(DataFormatEnum.class, value); + } catch (Exception ex) { + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/message/result/MessageInfo.java b/src/main/java/com/docus/server/message/result/MessageInfo.java new file mode 100644 index 0000000..d3f310f --- /dev/null +++ b/src/main/java/com/docus/server/message/result/MessageInfo.java @@ -0,0 +1,21 @@ +package com.docus.server.message.result; + +import com.docus.server.message.enums.DataFormatEnum; + +public class MessageInfo { + private final DataFormatEnum messageFormat; + private final String message; + + public MessageInfo(DataFormatEnum dataFormatEnum, String message) { + this.messageFormat = dataFormatEnum; + this.message = message; + } + + public DataFormatEnum getMessageFormat() { + return messageFormat; + } + + public String getMessage() { + return message; + } +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/message/result/ParametersEnum.java b/src/main/java/com/docus/server/message/result/ParametersEnum.java new file mode 100644 index 0000000..9716be9 --- /dev/null +++ b/src/main/java/com/docus/server/message/result/ParametersEnum.java @@ -0,0 +1,32 @@ +package com.docus.server.message.result; + +import com.docus.core.util.DateUtil; +import com.docus.core.util.Func; +import com.docus.server.message.util.IdUtil; + +import java.util.Date; + +public enum ParametersEnum { + DATE("DATE", DateUtil.format(new Date(), "yyyy-MM-dd")), + DATE_NO_CONNECT("DATE_NO_CONNECT", DateUtil.format(new Date(), "yyyyMMdd")), + DATE_TIME("DATE_TIME", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")), + DATE_TIME_NO_CONNECT("DATE_TIME_NO_CONNECT", DateUtil.format(new Date(), "yyyyMMddHHmmss")), + STANDARD_UUID("STANDARD_UUID", IdUtil.standardUUID()), + STANDARD_NO_CONNECT("STANDARD_NO_CONNECT", Func.randomUUID()), + ; + String type; + String param; + + ParametersEnum(String type, String param) { + this.type = type; + this.param = param; + } + + public String getParam() { + return param; + } + + public String getType() { + return type; + } +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/message/result/PlaceHolder.java b/src/main/java/com/docus/server/message/result/PlaceHolder.java new file mode 100644 index 0000000..b025458 --- /dev/null +++ b/src/main/java/com/docus/server/message/result/PlaceHolder.java @@ -0,0 +1,33 @@ +package com.docus.server.message.result; + +public class PlaceHolder { + /** + * 表达式路径 + */ + private final String path; + /** + * 完整占位字符 + */ + private final String placeHolder; + + public PlaceHolder(String path, String placeHolder) { + this.path = path; + this.placeHolder = placeHolder; + } + + public String getPath() { + return path; + } + + public String getPlaceHolder() { + return placeHolder; + } + + @Override + public String toString() { + return "PlaceHolder{" + + "path='" + path + '\'' + + ", placeHolder='" + placeHolder + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/docus/server/message/result/ResultUtil.java b/src/main/java/com/docus/server/message/result/ResultUtil.java new file mode 100644 index 0000000..2e57971 --- /dev/null +++ b/src/main/java/com/docus/server/message/result/ResultUtil.java @@ -0,0 +1,207 @@ +package com.docus.server.message.result; + +import com.alibaba.fastjson.JSONObject; +import com.docus.core.util.Func; +import com.docus.server.message.dto.Message; +import com.docus.server.message.enums.DataFormatEnum; +import com.docus.server.message.util.XmlUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Node; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author wyb + */ +public class ResultUtil { + private static final Logger logger = LoggerFactory.getLogger(ResultUtil.class); + + private final static Pattern JSON_PLACE_HOLDER_PATTERN = Pattern.compile("\\$\\{\\{json:([A-Za-z0-9._/@]+)}}"); + private final static Pattern XML_PLACE_HOLDER_PATTERN = Pattern.compile("\\$\\{\\{xpath:([A-Za-z0-9._/@]+)}}"); + private final static Pattern SYSTEM_PLACE_HOLDER_PATTERN = Pattern.compile("\\$\\{\\{system:([A-Za-z0-9._/@]+)}}"); + + + public static String dynamicParameterReplace(MessageInfo messageInfo, String result) { + result = systemDynamicParameterReplace(result); + result = requestDynamicParameterReplace(messageInfo, result); + return result; + } + + private static String requestDynamicParameterReplace(MessageInfo messageInfo, String result) { + try { + switch (messageInfo.getMessageFormat()) { + case JSON: + return dynamicParameterReplaceFromJsonMessage(messageInfo.getMessage(), result); + case XML: + return dynamicParameterReplaceFromXmlMessage(messageInfo.getMessage(), result); + default: + throw new RuntimeException("未实现的message解析填充返回值!"); + } + } catch (Exception ex) { + logger.error(ex.getMessage(), ex); + return result; + } + } + + private static String dynamicParameterReplaceFromXmlMessage(String message, String result) { + XmlUtil xmlUtil = XmlUtil.of(message); + List xmlPlaceHolders = findAllXmlPlaceHolder(result); + for (PlaceHolder placeHolder : xmlPlaceHolders) { + Node node = xmlUtil.getNode(placeHolder.getPath()); + String newPlaceHolder = null; + if (node != null) { + newPlaceHolder = node.getNodeValue() == null ? node.getTextContent() : node.getNodeValue(); + } + newPlaceHolder = newPlaceHolder == null ? "" : newPlaceHolder; + result = result.replace(placeHolder.getPlaceHolder(), newPlaceHolder); + } + return result; + } + + + private static String dynamicParameterReplaceFromJsonMessage(String message, String result) { + JSONObject jsonObject = Func.readJson(message, JSONObject.class); + List jsonPlaceHolderList = findAllJsonPlaceHolder(message); + for (PlaceHolder placeHolder : jsonPlaceHolderList) { + String newPlaceHolder = getVal(jsonObject, placeHolder.getPath()); + newPlaceHolder = newPlaceHolder == null ? "" : newPlaceHolder; + result = result.replace(placeHolder.getPlaceHolder(), newPlaceHolder); + } + return result; + } + + private static String getVal(JSONObject jsonObject, String path) { + try { + String[] split = path.split("\\."); + return getVal(jsonObject, split); + } catch (Exception ex) { + logger.error(ex.getMessage(), ex); + return null; + } + + + } + + private static String getVal(JSONObject jsonObject, String[] keys) { + if (jsonObject == null || jsonObject.size() <= 0) { + return null; + } + if (keys.length == 1) { + return jsonObject.getString(keys[0]); + } + jsonObject = jsonObject.getJSONObject(keys[0]); + keys = cutFirst(keys); + return getVal(jsonObject, keys); + } + + private static String[] cutFirst(String[] oldArrays) { + int newLength = oldArrays.length - 1; + String[] newArray = new String[newLength]; + System.arraycopy(oldArrays, 1, newArray, 0, newLength); + return newArray; + } + + private static List findAllJsonPlaceHolder(String result) { + Matcher matcher = JSON_PLACE_HOLDER_PATTERN.matcher(result); + List placeHolderList = new ArrayList<>(); + while (matcher.find()) { + String placeholder = matcher.group(0); + placeHolderList.add(new PlaceHolder(placeholder.replace("${{json:", "").replace("}}", ""), placeholder)); + } + return placeHolderList; + } + + private static List findAllXmlPlaceHolder(String result) { + Matcher matcher = XML_PLACE_HOLDER_PATTERN.matcher(result); + List placeHolderList = new ArrayList<>(); + while (matcher.find()) { + String placeholder = matcher.group(0); + placeHolderList.add(new PlaceHolder(placeholder.replace("${{xpath:", "").replace("}}", ""), placeholder)); + } + return placeHolderList; + } + + /** + * 根据系统枚举的参数类型替换占位 + * + * @param result 原result + * @return 新的 result + */ + private static String systemDynamicParameterReplace(String result) { + try { + ParametersEnum[] parameters = ParametersEnum.values(); + for (ParametersEnum parameter : parameters) { + result = result.replace("${{system:" + parameter.getType() + "}}", parameter.getParam()); + } + return result; + } catch (Exception ex) { + logger.error(ex.getMessage(), ex); + return result; + } + } + + public static void main(String[] args) { + String message = "10020453230001F南方医科大学顺德医院发热门诊
http://192.168.5.61:16703//2021/12/29/20211229G0506000.pdf
检验Real Time - PCRORF1ab基因 ORF1ab gene阴性 Negative阳性阳性 Positive危急偏高Real Time - PCRN基因 N gene阴性 Negative阳性阳性 Positive危急偏高Real Time - PCR新型冠状病毒核酸 2019-nCOV阴性 Negative阳性阳性 Positive危急偏高合格新冠门诊采集
诊断
"; + String template = " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n"; + System.out.println(findAllXmlPlaceHolder(template)); + System.out.println(findAllJsonPlaceHolder(template)); + System.out.println(template); + System.out.println(dynamicParameterReplace(new MessageInfo(DataFormatEnum.XML, message), template)); + System.out.println(DataFormatEnum.fromValue(2)); + String[] split = "1,2,3,4".split(","); + String[] one = cutFirst(split); + String[] two = cutFirst(one); + + System.out.println(Arrays.toString(split)); + System.out.println(Arrays.toString(one)); + System.out.println(Arrays.toString(two)); + Message obj = new Message("method", "message_str"); + HashMap objectObjectHashMap = new HashMap<>(); + objectObjectHashMap.put("code", 500); + + HashMap objectObjectHashMap1 = new HashMap<>(); + objectObjectHashMap1.put("data", objectObjectHashMap); + String json = Func.toJson(objectObjectHashMap1); + System.out.println(json); + JSONObject jsonObject = Func.readJson(json, JSONObject.class); + System.out.println(getVal(jsonObject, "data")); + System.out.println(getVal(jsonObject, "data.code")); + } + +} diff --git a/src/main/java/com/docus/server/message/service/SdWebServiceUnifyMessageService.java b/src/main/java/com/docus/server/message/service/SdWebServiceUnifyMessageService.java new file mode 100644 index 0000000..1552eae --- /dev/null +++ b/src/main/java/com/docus/server/message/service/SdWebServiceUnifyMessageService.java @@ -0,0 +1,12 @@ +package com.docus.server.message.service; + +import javax.jws.WebService; + +/** + * @author WYBDEV + */ +@WebService +public interface SdWebServiceUnifyMessageService { + + String pushInformation(String message); +} diff --git a/src/main/java/com/docus/server/message/service/UnifyMessageService.java b/src/main/java/com/docus/server/message/service/UnifyMessageService.java index 8ef3d6f..aadff63 100644 --- a/src/main/java/com/docus/server/message/service/UnifyMessageService.java +++ b/src/main/java/com/docus/server/message/service/UnifyMessageService.java @@ -1,5 +1,6 @@ package com.docus.server.message.service; +import javax.jws.WebParam; import javax.jws.WebService; @WebService @@ -10,5 +11,5 @@ public interface UnifyMessageService { * @param message 消息 * @return 处理结果 */ - String receive(String method,String message); + String pushInformation(@WebParam(name = "method") String method,@WebParam(name = "message") String message); } diff --git a/src/main/java/com/docus/server/message/service/impl/HttpUnifyMessageServiceImpl.java b/src/main/java/com/docus/server/message/service/impl/HttpUnifyMessageServiceImpl.java index a3d4d88..bfa2c24 100644 --- a/src/main/java/com/docus/server/message/service/impl/HttpUnifyMessageServiceImpl.java +++ b/src/main/java/com/docus/server/message/service/impl/HttpUnifyMessageServiceImpl.java @@ -10,7 +10,7 @@ import org.springframework.stereotype.Service; @Service(InteractiveMethod.HTTP) public class HttpUnifyMessageServiceImpl implements UnifyMessageService { @Override - public String receive(String method,String message) { + public String pushInformation(String method,String message) { return null; } } diff --git a/src/main/java/com/docus/server/message/service/impl/SdWebServiceUnifyMessageServiceImpl.java b/src/main/java/com/docus/server/message/service/impl/SdWebServiceUnifyMessageServiceImpl.java new file mode 100644 index 0000000..0aee64e --- /dev/null +++ b/src/main/java/com/docus/server/message/service/impl/SdWebServiceUnifyMessageServiceImpl.java @@ -0,0 +1,29 @@ +package com.docus.server.message.service.impl; + +import com.docus.server.message.consts.HospitalWsMethod; +import com.docus.server.message.consts.InteractiveMethod; +import com.docus.server.message.service.SdWebServiceUnifyMessageService; +import com.docus.server.message.service.UnifyMessageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +/** + * @author WYBDEV + */ +@Service(HospitalWsMethod.WS_RECORD_SUBMIT) +public class SdWebServiceUnifyMessageServiceImpl implements SdWebServiceUnifyMessageService { + + private UnifyMessageService unifyMessageService; + + @Autowired + @Qualifier(InteractiveMethod.WS) + public void setUnifyMessageService(UnifyMessageService unifyMessageService) { + this.unifyMessageService = unifyMessageService; + } + + @Override + public String pushInformation(String message) { + return unifyMessageService.pushInformation(HospitalWsMethod.WS_RECORD_SUBMIT,message); + } +} diff --git a/src/main/java/com/docus/server/message/service/impl/WebServiceUnifyMessageServiceImpl.java b/src/main/java/com/docus/server/message/service/impl/WebServiceUnifyMessageServiceImpl.java index e1e48ff..06cdc87 100644 --- a/src/main/java/com/docus/server/message/service/impl/WebServiceUnifyMessageServiceImpl.java +++ b/src/main/java/com/docus/server/message/service/impl/WebServiceUnifyMessageServiceImpl.java @@ -1,16 +1,61 @@ package com.docus.server.message.service.impl; +import cn.hutool.http.HttpUtil; +import com.docus.core.util.Func; +import com.docus.infrastructure.web.api.ResultCode; +import com.docus.server.message.config.WsMessageForwardConfig; import com.docus.server.message.consts.InteractiveMethod; +import com.docus.server.message.dto.Message; +import com.docus.server.message.dto.MessageResponse; +import com.docus.server.message.enums.DataFormatEnum; +import com.docus.server.message.result.MessageInfo; +import com.docus.server.message.result.ResultUtil; import com.docus.server.message.service.UnifyMessageService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + /** * @author WYBDEV */ @Service(InteractiveMethod.WS) +@Slf4j public class WebServiceUnifyMessageServiceImpl implements UnifyMessageService { @Override - public String receive(String method,String message) { - return null; + public String pushInformation(String method, String message) { + Message messageObj = new Message(method, message); + WsMessageForwardConfig.WsMessageForward wsMessageForward = WsMessageForwardConfig.wsMessageForward(method); + if (wsMessageForward == null || Func.isEmpty(wsMessageForward.getUrls())) { + return "方法匹配错误!"; + } + DataFormatEnum dataFormatEnum = DataFormatEnum.fromValue(wsMessageForward.getMessageDataType()); + if (dataFormatEnum == null) { + return "格式匹配错误!"; + } + try { + List responseLis = new ArrayList<>(); + for (String url : wsMessageForward.getUrls()) { + String resp = HttpUtil.post(url, Func.toJson(messageObj)); + responseLis.add(Func.readJson(resp, MessageResponse.class)); + } + for (MessageResponse response : responseLis) { + if (ResultCode.FAILED.getCode().equals(response.getRespCode())) { + return response.getRespMessage(); + } + } + responseLis = responseLis.stream().filter(item -> Func.isNotEmpty(item.getRespCode())).collect(Collectors.toList()); + if (Func.isEmpty(responseLis)) { + throw new RuntimeException("未收到成功和失败的返回结果!"); + } + return responseLis.get(0).getRespMessage(); + } catch (Exception ex) { +// save(method,message); + log.error(ex.getMessage(), ex); + MessageInfo messageInfo = new MessageInfo(dataFormatEnum, message); + return ResultUtil.dynamicParameterReplace(messageInfo, wsMessageForward.getErrorResult()); + } } }