一.導入依賴
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
二.配置
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg>
<bean
class="org.springframework.http.client.SimpleClientHttpRequestFactory">
<property name="connectTimeout" value="10000" />
<property name="readTimeout" value="10000" />
</bean>
</constructor-arg>
</bean>
三.編碼
package com.pz998.app.service.busi.impl;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSONObject;
import com.pz998.rpc.common.utils.HttpClientUtil;
import com.pz998.rpc.model.entity.OrderRpc;
import com.pz998.rpc.model.entity.ServiceRpc;
import com.pz998.rpc.model.entity.TrackerChannelRpc;
import com.pz998.rpc.service.TrackerChannelRpcService;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpRequest;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@Service("restClient")
public class RESTClient {
public static Logger log = Logger.getLogger(RESTClient.class);
@Value("${hys_token_key}")
private String hysTokenKey;
@Value("${hys_token_secret}")
private String hysTokenSecret;
@Value("${api_hys_token}")
private String apiHysToken;
@Value("${api_hys_add_order}")
private String apiHysAddOrder;
@Value("${api_hys_update_order_state}")
private String apiHysUpdateOrderState;
@Value("${api_hys_update_order_amount}")
private String apiHysUpdateOrderAmount;
@Autowired
private TrackerChannelRpcService trackerChannelRpcService;
private static Integer SUCCESS_STATUS = 0;
private static Integer FAILE_STATUS = 1;
private static Map<Integer,String> ORDER_TYPE_MAP = new HashMap<Integer,String>();
static{
ORDER_TYPE_MAP.put(ServiceRpc.YYMY.intValue(), "registered"); //預約名醫
ORDER_TYPE_MAP.put(ServiceRpc.JYPZ.intValue(), "accompany"); //基礎陪診
ORDER_TYPE_MAP.put(ServiceRpc.GHPZ.intValue(), "registered_accompany"); //掛號陪診
ORDER_TYPE_MAP.put(ServiceRpc.JJQH.intValue(), "emergency"); //緊急取號
ORDER_TYPE_MAP.put(ServiceRpc.DQBG.intValue(), "proxy_report"); //代取報告
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_DZ.intValue(),"room_service"); //打針
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_SY.intValue(), "room_service");//輸液
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_MBZ.intValue(), "room_service");//美白針
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_YFHL.intValue(), "room_service");//孕婦護理
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_LZZSY.intValue(), "room_service");//留置針輸液
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_JMCX.intValue(), "room_service");//靜脈採血
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_PTHY.intValue(), "room_service");//普通換藥
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_PICC_HY.intValue(), "room_service");//PICC換藥
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_DN.intValue(), "room_service");//導尿
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_BS.intValue(), "room_service");//鼻飼
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_XT.intValue(), "room_service");//吸痰
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_YCHL.intValue(), "room_service");//壓瘡護理
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_ZKHL.intValue(), "room_service");//造口護理
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_GCHL.intValue(), "room_service");//灌腸護理
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_WKCX.intValue(), "room_service");//外科拆線
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_HYHL.intValue(), "room_service");//會陰護理
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_WHZL.intValue(), "room_service");//霧化治療
ORDER_TYPE_MAP.put(ServiceRpc.YHSM_KQHL.intValue(), "room_service");//口腔護理
}
@Autowired
private RestTemplate restTemplate;
public String getHysToken(){
Map<String,String> param = new HashMap<String,String>();
param.put("companyKey", hysTokenKey);
param.put("companySecret", hysTokenSecret);
JSONObject result = null;
try{
result = restTemplate.postForObject(apiHysToken, param, JSONObject.class);
}catch(Exception e){
log.error("獲取好藥師token異常:"+e.getMessage());
return "";
}
if(result == null){
log.error("獲取好藥師token失敗");
return "";
}
Integer status = result.getInteger("status");
if(!SUCCESS_STATUS.equals(status)){
String msg = result.getString("msg");
log.error("獲取好藥師token失敗:"+msg);
return "";
}
JSONObject dataJo = result.getJSONObject("data");
String token = dataJo.getString("token");
return token;
}
@Async
public void pushOrder(OrderRpc order){
String token = getHysToken();
if(StringUtils.isEmpty(token)){
log.error("好藥師同步訂單["+order.getOrderNo()+"]無法獲取token");
return;
}
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
Integer state = order.getState();
List<TrackerChannelRpc> trackerChannelRpcList =trackerChannelRpcService.getChannelByChannelNo(order.getCh());
TrackerChannelRpc trackerChannelRpc = CollectionUtils.isEmpty(trackerChannelRpcList)?null:trackerChannelRpcList.get(0);
String channelName = trackerChannelRpc==null?"":trackerChannelRpc.getName();
JSONObject jsonObj = new JSONObject();
jsonObj.put("memberId", order.getCustomerId());
jsonObj.put("orderNo", order.getOrderNo());
jsonObj.put("platform", "jk998");
jsonObj.put("orderType", ORDER_TYPE_MAP.get(order.getType()));
jsonObj.put("channel", channelName);
jsonObj.put("subchannel", channelName);
jsonObj.put("orderStatus", state.toString());
jsonObj.put("payment", "online");
jsonObj.put("orderMoney",order.getAmount());
jsonObj.put("orderTime", DateFormatUtils.format(order.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
JSONObject orderDetailJo = new JSONObject();
jsonObj.put("orderDetail",orderDetailJo);
HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
JSONObject result = null;
try{
Map<String,String> urlVariables = new HashMap<String,String>();
urlVariables.put("token", token);
result = restTemplate.postForObject(apiHysAddOrder, formEntity, JSONObject.class,urlVariables);
}catch(Exception e){
log.error("好藥師同步訂單["+order.getOrderNo()+"]異常:"+e.getMessage());
return;
}
Integer status = result.getInteger("status");
String msg = result.getString("msg");
if(SUCCESS_STATUS.equals(status)){
log.info("好藥師同步訂單["+order.getOrderNo()+"]成功");
}else{
log.error("好藥師同步訂單["+order.getOrderNo()+"]失敗:"+msg);
}
}
@Async
public void updateOrderState(OrderRpc order){
String token = getHysToken();
if(StringUtils.isEmpty(token)){
return;
}
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
JSONObject paramJo = new JSONObject();
paramJo.put("platform", "jk998");
paramJo.put("orderStatus", order.getState());
paramJo.put("orderType", ORDER_TYPE_MAP.get(order.getType()));
paramJo.put("orderNo", order.getOrderNo());
JSONObject resultJo = null;
try{
Map<String,String> urlVariables = new HashMap<String,String>();
urlVariables.put("token", token);
HttpEntity<String> requestEntity = new HttpEntity<String>(paramJo.toString(), headers);
ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(apiHysUpdateOrderState, HttpMethod.PUT, requestEntity, JSONObject.class,urlVariables);
resultJo = responseEntity.getBody();
}catch(Exception e){
log.error("好藥師同步訂單["+order.getOrderNo()+"]狀態異常:"+e.getMessage());
return;
}
if(resultJo==null){
log.error("好藥師同步訂單["+order.getOrderNo()+"]狀態失敗");
return;
}
Integer status = resultJo.getInteger("status");
String msg = resultJo.getString("msg");
if(SUCCESS_STATUS.equals(status)){
log.error("好藥師同步訂單["+order.getOrderNo()+"]狀態"+order.getState()+"成功");
}else{
log.error("好藥師同步訂單["+order.getOrderNo()+"]狀態"+order.getState()+"失敗:"+msg);
}
}
public void updateOrderAmount(OrderRpc order){
String token = getHysToken();
if(StringUtils.isEmpty(token)){
return;
}
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
double discountAmount = order.getAmount()-order.getActualAmount();
JSONObject paramJo = new JSONObject();
paramJo.put("platform", "jk998");
paramJo.put("discountAmount", discountAmount);
paramJo.put("orderMoney", order.getActualAmount());
paramJo.put("orderType", ORDER_TYPE_MAP.get(order.getType()));
paramJo.put("orderNo", order.getOrderNo());
JSONObject resultJo = null;
try{
Map<String,String> urlVariables = new HashMap<String,String>();
urlVariables.put("token", token);
HttpEntity<String> requestEntity = new HttpEntity<String>(paramJo.toString(), headers);
ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(apiHysUpdateOrderAmount, HttpMethod.PUT, requestEntity, JSONObject.class,urlVariables);
resultJo = responseEntity.getBody();
}catch(Exception e){
log.error("好藥師同步訂單["+order.getOrderNo()+"]金額異常:"+e.getMessage());
return;
}
if(resultJo==null){
log.error("好藥師同步訂單["+order.getOrderNo()+"]金額失敗");
return;
}
Integer status = resultJo.getInteger("status");
String msg = resultJo.getString("msg");
if(SUCCESS_STATUS.equals(status)){
log.error("好藥師同步訂單["+order.getOrderNo()+"]實際金額"+order.getActualAmount()+",優惠金額"+discountAmount+"成功");
}else{
log.error("好藥師同步訂單["+order.getOrderNo()+"]實際金額"+order.getActualAmount()+",優惠金額"+discountAmount+"失敗:"+msg);
}
}
}
spring mvc+tomcat源碼分析視頻(鏈接複製在瀏覽器打開)
https://study.163.com/course/courseMain.htm?share=2&shareId=480000001919582&courseId=1209399899&_trace_c_p_k2_=6d81bc445e9c462ab8d6345e40f6b0bf