BaseRequestHandler.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package handler.yongyou;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.platform.common.cache.DictCache;
  5. import com.platform.common.constant.CommonConstants;
  6. import com.platform.common.enums.DictTypeEnum;
  7. import com.platform.common.util.BeanUtils;
  8. import com.platform.common.util.HttpUtil;
  9. import com.platform.common.util.JsonUtils;
  10. import com.platform.common.util.R;
  11. import com.platform.common.yongyou.request.BaseRequest;
  12. import com.platform.common.yongyou.response.BaseResponse;
  13. import com.platform.dao.dto.upms.ThirdInfoLogDTO;
  14. import com.platform.dao.entity.upms.ThirdInfoLog;
  15. import com.platform.service.upms.ThirdInfoLogService;
  16. import lombok.extern.slf4j.Slf4j;
  17. import java.util.Map;
  18. /**
  19. * 1:给用友发送消息
  20. * 1: 封装消息
  21. * 2:发送请求
  22. * 3:
  23. */
  24. @Slf4j
  25. public abstract class BaseRequestHandler {
  26. private BaseRequest request;
  27. private ThirdInfoLogService infoService;
  28. /**
  29. * service name
  30. */
  31. private String serviceType;
  32. public void setRequest(BaseRequest request){
  33. this.request = request;
  34. }
  35. /**
  36. * gain the thirdLogService bean,just prevent many bean
  37. * @return
  38. */
  39. public synchronized ThirdInfoLogService getLogService(){
  40. if(this.infoService == null){
  41. this.infoService = (ThirdInfoLogService) BeanUtils.getBean("thirdInfoLogService");
  42. }
  43. return this.infoService;
  44. }
  45. /**
  46. * handle post request,this method is used to our system request xindian System
  47. * 我们请求新点数据处理
  48. * @return
  49. */
  50. public R handler() {
  51. R r = new R();
  52. BaseResponse response = null;
  53. String logId = generateLogRequest(request, this.serviceType);
  54. // post请求返回值 the request return value
  55. String responseStr = "";
  56. try {
  57. responseStr = sendRequest(request);
  58. } catch (Exception e) {
  59. log.info("请求异常 request exception:" + e.getMessage() + e.getCause());
  60. e.printStackTrace();
  61. }
  62. log.info("返回结果 result:" + responseStr);
  63. try {
  64. response = JSONObject.parseObject(responseStr, BaseResponse.class);
  65. r.setData(response);
  66. ThirdInfoLog log = new ThirdInfoLog();
  67. log.setId(logId);
  68. if(!"true".equals(response.getResult())){
  69. log.setErrorMsg(response.getMsg());
  70. log.setErrorStatus(1);
  71. }else{
  72. log.setErrorStatus(0);
  73. successResponse(request, response);
  74. }
  75. getLogService().modModelByPrimaryKey(log);
  76. } catch (Exception e) {
  77. log.info("返回结果异常");
  78. e.printStackTrace();
  79. }
  80. return r;
  81. }
  82. /**
  83. * 生成request log
  84. *
  85. * @param request
  86. */
  87. private String generateLogRequest(BaseRequest request,String serviceType) {
  88. if (request != null) {
  89. ThirdInfoLogDTO dto = new ThirdInfoLogDTO();
  90. String requestJson = "";
  91. // 保函文件传送,日志不存储文件内容,太大了
  92. requestJson = JSONObject.toJSONString(request);
  93. dto.setContent(requestJson);
  94. dto.setType(ThirdInfoLogDTO.TYPE_REQUEST);
  95. dto.setThirdName(CommonConstants.THIRD_PARTY_YONGYOU);
  96. //dto.setApplicationId(request.getApplyno());
  97. dto.setServiceType(serviceType);
  98. dto.setErrorStatus(1);
  99. return addInfoLog(dto);
  100. }
  101. return null;
  102. }
  103. /**
  104. * 保存日志
  105. * @param dto
  106. */
  107. private String addInfoLog(ThirdInfoLogDTO dto) {
  108. return getLogService().saveByDTO(dto).getId();
  109. }
  110. /**
  111. * @return
  112. * @throws Exception
  113. */
  114. public String sendRequest(BaseRequest request) throws Exception {
  115. // 获取推送的接口地址
  116. String url = DictCache.getValueByCode(DictTypeEnum.THIRD_PARTY_YONGYOU.getType(), this.serviceType);
  117. log.info("请求URL----------------"+url);
  118. // 获取请求体
  119. String bodyString = JSON.toJSONString(request);
  120. Map<String, String> bodyMap = JsonUtils.jsonToMap(bodyString);
  121. String resStr = HttpUtil.post(url, JsonUtils.objectToJson(bodyMap));
  122. try {
  123. log.info("用友中心响应数据---"+resStr);
  124. } catch (Exception e) {
  125. throw new Exception("响应失败:" + e);
  126. }
  127. return resStr;
  128. }
  129. /**
  130. * 推送给用友成功后,对用友的返回数据进行本地处理
  131. * 子类自行实现
  132. * @param req
  133. */
  134. public abstract void successResponse(BaseRequest req, BaseResponse response);
  135. }