diff --git a/data-config/ws-message-forward-config.json b/data-config/message-forward-config.json similarity index 75% rename from data-config/ws-message-forward-config.json rename to data-config/message-forward-config.json index 0e3f128..fc32b6e 100644 --- a/data-config/ws-message-forward-config.json +++ b/data-config/message-forward-config.json @@ -1,7 +1,7 @@ [ { "method": "WS_RECORD_SUBMIT", - "urls": ["http://127.0.0.1:9312/message/receive1/wsRecordSubmit/do"], + "urls": ["http://127.0.0.1:9312/message/receive/wsRecordSubmit/do"], "errorResult": "${{system:STANDARD_NO_CONNECT}} ${{xpath:/A/B/C/@val}}系统错误!", "messageDataType": 1 } diff --git a/src/main/java/com/docus/server/CxfConfig.java b/src/main/java/com/docus/server/CxfConfig.java index 166d5c6..c2b554c 100644 --- a/src/main/java/com/docus/server/CxfConfig.java +++ b/src/main/java/com/docus/server/CxfConfig.java @@ -1,7 +1,6 @@ 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; @@ -24,7 +23,6 @@ public class CxfConfig { private SdWebServiceUnifyMessageService sdWebServiceUnifyMessageService; @Autowired - @Qualifier(InteractiveMethod.WS) public void setUnifyMessageService(UnifyMessageService unifyMessageService) { this.unifyMessageService = unifyMessageService; } diff --git a/src/main/java/com/docus/server/message/config/WsMessageForwardConfig.java b/src/main/java/com/docus/server/message/config/MessageForwardConfig.java similarity index 61% rename from src/main/java/com/docus/server/message/config/WsMessageForwardConfig.java rename to src/main/java/com/docus/server/message/config/MessageForwardConfig.java index 4b9424c..ff3deb6 100644 --- a/src/main/java/com/docus/server/message/config/WsMessageForwardConfig.java +++ b/src/main/java/com/docus/server/message/config/MessageForwardConfig.java @@ -11,31 +11,31 @@ import java.util.Objects; /** * @author wyb */ -public class WsMessageForwardConfig { +public class MessageForwardConfig { private final static String CONFIG_FILE_PATH = "data-config"; - private final static String CONFIG_FILE_NAME = "ws-message-forward-config.json"; + private final static String CONFIG_FILE_NAME = "message-forward-config.json"; - public static WsMessageForward wsMessageForward(String method) { + public static MessageForward 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)) { + List messageForwardList = Func.parseJsonArray(wsMessageForwardConfigJson, MessageForward.class); + if (Func.isEmpty(messageForwardList)) { return null; } - for (WsMessageForward wsMessageForward : wsMessageForwardList) { - if (method.equals(wsMessageForward.getMethod())) { - return wsMessageForward; + for (MessageForward messageForward : messageForwardList) { + if (method.equals(messageForward.getMethod())) { + return messageForward; } } return null; } @Data - public static class WsMessageForward { + public static class MessageForward { private String method; private List urls; private String errorResult; diff --git a/src/main/java/com/docus/server/message/consts/InteractiveMethod.java b/src/main/java/com/docus/server/message/consts/InteractiveMethod.java index f2ab7d5..e70cd12 100644 --- a/src/main/java/com/docus/server/message/consts/InteractiveMethod.java +++ b/src/main/java/com/docus/server/message/consts/InteractiveMethod.java @@ -5,13 +5,13 @@ package com.docus.server.message.consts; * @author wyb */ public interface InteractiveMethod { - /** - * Http接收消息统一服务处理方式 - */ - String HTTP = "HttpUnifyMessageService"; - /** - * WebService接收消息统一服务处理方式" - */ - String WS = "WebServiceUnifyMessageService"; +// /** +// * Http接收消息统一服务处理方式 +// */ +// String HTTP = "HTTP"; +// /** +// * WebService接收消息统一服务处理方式" +// */ +// String WS = "WS"; } diff --git a/src/main/java/com/docus/server/message/controller/MessagePushController.java b/src/main/java/com/docus/server/message/controller/MessagePushController.java index adcd2af..b0614dc 100644 --- a/src/main/java/com/docus/server/message/controller/MessagePushController.java +++ b/src/main/java/com/docus/server/message/controller/MessagePushController.java @@ -1,12 +1,10 @@ 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; @@ -25,7 +23,6 @@ public class MessagePushController { private UnifyMessageService unifyMessageService; @Autowired - @Qualifier(InteractiveMethod.HTTP) public void setUnifyMessageService(UnifyMessageService unifyMessageService) { this.unifyMessageService = unifyMessageService; } diff --git a/src/main/java/com/docus/server/message/entity/UnifyMessage.java b/src/main/java/com/docus/server/message/entity/UnifyMessage.java new file mode 100644 index 0000000..2180f27 --- /dev/null +++ b/src/main/java/com/docus/server/message/entity/UnifyMessage.java @@ -0,0 +1,39 @@ +package com.docus.server.message.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "消息对象", description = "消息对象") +public class UnifyMessage implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "id 主键") + @TableId(value = "id") + private Long id; + + @ApiModelProperty(value = "接收到的消息") + @TableField(value = "message") + private String message; + + @ApiModelProperty(value = "转发方法") + @TableField(value = "method") + private String method; + + @ApiModelProperty(value = "消息接收时间") + @TableField(value = "create_time") + private Date createTime; + + @ApiModelProperty(value = "状态 0:失败 1:成功") + @TableField(value = "state") + private Integer state; + +} diff --git a/src/main/java/com/docus/server/message/mapper/UnifyMessageMapper.java b/src/main/java/com/docus/server/message/mapper/UnifyMessageMapper.java new file mode 100644 index 0000000..e410116 --- /dev/null +++ b/src/main/java/com/docus/server/message/mapper/UnifyMessageMapper.java @@ -0,0 +1,8 @@ +package com.docus.server.message.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.docus.server.message.entity.UnifyMessage; + +public interface UnifyMessageMapper extends BaseMapper { +} diff --git a/src/main/java/com/docus/server/message/service/MessageCarrier.java b/src/main/java/com/docus/server/message/service/MessageCarrier.java new file mode 100644 index 0000000..1713223 --- /dev/null +++ b/src/main/java/com/docus/server/message/service/MessageCarrier.java @@ -0,0 +1,25 @@ +package com.docus.server.message.service; + +import cn.hutool.http.HttpUtil; +import com.docus.core.util.Func; +import com.docus.server.message.config.MessageForwardConfig; +import com.docus.server.message.dto.Message; +import com.docus.server.message.dto.MessageResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +@Slf4j +public class MessageCarrier { + public List send(Message message, MessageForwardConfig.MessageForward messageForward) { + List responseLis = new ArrayList<>(); + for (String url : messageForward.getUrls()) { + String resp = HttpUtil.post(url, Func.toJson(message)); + responseLis.add(Func.readJson(resp, MessageResponse.class)); + } + return responseLis; + } +} 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 aadff63..dd64e61 100644 --- a/src/main/java/com/docus/server/message/service/UnifyMessageService.java +++ b/src/main/java/com/docus/server/message/service/UnifyMessageService.java @@ -12,4 +12,5 @@ public interface UnifyMessageService { * @return 处理结果 */ 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 deleted file mode 100644 index bfa2c24..0000000 --- a/src/main/java/com/docus/server/message/service/impl/HttpUnifyMessageServiceImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.docus.server.message.service.impl; - -import com.docus.server.message.consts.InteractiveMethod; -import com.docus.server.message.service.UnifyMessageService; -import org.springframework.stereotype.Service; - -/** - * @author wyb - */ -@Service(InteractiveMethod.HTTP) -public class HttpUnifyMessageServiceImpl implements UnifyMessageService { - @Override - 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 index 0aee64e..c7aa500 100644 --- a/src/main/java/com/docus/server/message/service/impl/SdWebServiceUnifyMessageServiceImpl.java +++ b/src/main/java/com/docus/server/message/service/impl/SdWebServiceUnifyMessageServiceImpl.java @@ -1,14 +1,13 @@ 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; /** + * 一般统一使用UnifyMessageService即可,因为文档已经先给了第三方,所以在这里开发 * @author WYBDEV */ @Service(HospitalWsMethod.WS_RECORD_SUBMIT) @@ -17,7 +16,6 @@ public class SdWebServiceUnifyMessageServiceImpl implements SdWebServiceUnifyMes private UnifyMessageService unifyMessageService; @Autowired - @Qualifier(InteractiveMethod.WS) public void setUnifyMessageService(UnifyMessageService unifyMessageService) { this.unifyMessageService = unifyMessageService; } diff --git a/src/main/java/com/docus/server/message/service/impl/UnifyMessageServiceImpl.java b/src/main/java/com/docus/server/message/service/impl/UnifyMessageServiceImpl.java new file mode 100644 index 0000000..5a8a252 --- /dev/null +++ b/src/main/java/com/docus/server/message/service/impl/UnifyMessageServiceImpl.java @@ -0,0 +1,103 @@ +package com.docus.server.message.service.impl; + +import com.docus.core.util.Func; +import com.docus.infrastructure.redis.service.IdService; +import com.docus.infrastructure.web.api.ResultCode; +import com.docus.server.message.config.MessageForwardConfig; +import com.docus.server.message.dto.Message; +import com.docus.server.message.dto.MessageResponse; +import com.docus.server.message.entity.UnifyMessage; +import com.docus.server.message.enums.DataFormatEnum; +import com.docus.server.message.mapper.UnifyMessageMapper; +import com.docus.server.message.result.MessageInfo; +import com.docus.server.message.result.ResultUtil; +import com.docus.server.message.service.MessageCarrier; +import com.docus.server.message.service.UnifyMessageService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author WYBDEV + */ +@Service +@Slf4j +public class UnifyMessageServiceImpl implements UnifyMessageService { + private UnifyMessageMapper unifyMessageMapper; + private IdService idService; + private MessageCarrier messageCarrier; + + @Autowired + public void setUnifyMessageMapper(UnifyMessageMapper unifyMessageMapper) { + this.unifyMessageMapper = unifyMessageMapper; + } + + @Autowired + public void setIdService(IdService idService) { + this.idService = idService; + } + + @Autowired + public void setMessageCarrier(MessageCarrier messageCarrier) { + this.messageCarrier = messageCarrier; + } + + @Override + public String pushInformation(String method, String message) { + MessageForwardConfig.MessageForward messageForward = MessageForwardConfig.wsMessageForward(method); + if (messageForward == null || Func.isEmpty(messageForward.getUrls())) { + return "方法匹配错误!"; + } + DataFormatEnum dataFormatEnum = DataFormatEnum.fromValue(messageForward.getMessageDataType()); + if (dataFormatEnum == null) { + return "格式匹配错误!"; + } + UnifyMessage unifyMessage = saveMessage(method, message); + try { + List responseLis = messageCarrier.send(new Message(method, message), messageForward); + return verifyMessageResponseAndGetReturnMessage(responseLis); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + messageFailed(unifyMessage); + MessageInfo messageInfo = new MessageInfo(dataFormatEnum, message); + return ResultUtil.dynamicParameterReplace(messageInfo, messageForward.getErrorResult()); + } + } + + private void messageFailed(UnifyMessage unifyMessage) { + UnifyMessage updateMessage = new UnifyMessage(); + updateMessage.setId(unifyMessage.getId()); + updateMessage.setState(0); + unifyMessageMapper.updateById(updateMessage); + } + + private String verifyMessageResponseAndGetReturnMessage(List responseLis) { + responseLis = responseLis.stream().filter(item -> Func.isNotEmpty(item.getRespCode())).collect(Collectors.toList()); + if (Func.isEmpty(responseLis)) { + throw new RuntimeException("未收到成功和失败的返回结果!"); + } + for (MessageResponse response : responseLis) { + if (ResultCode.FAILED.getCode().equals(response.getRespCode())) { + return response.getRespMessage(); + } + } + return responseLis.get(0).getRespMessage(); + } + + private UnifyMessage saveMessage(String method, String message) { + UnifyMessage unifyMessage = new UnifyMessage(); + unifyMessage.setId(idService.getDateSeq()); + unifyMessage.setMessage(message); + unifyMessage.setMethod(method); + unifyMessage.setState(1); + unifyMessage.setCreateTime(new Date()); + unifyMessageMapper.insert(unifyMessage); + return unifyMessage; + } + + +} 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 deleted file mode 100644 index 06cdc87..0000000 --- a/src/main/java/com/docus/server/message/service/impl/WebServiceUnifyMessageServiceImpl.java +++ /dev/null @@ -1,61 +0,0 @@ -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 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()); - } - } -}