package com.java110.core.base.smo; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.common.constant.CommonConstant; import com.java110.common.constant.ServiceConstant; import com.java110.common.log.LoggerEngine; import com.java110.common.util.Assert; import com.java110.common.util.ProtocolUtil; import com.java110.core.base.AppBase; import com.java110.core.context.AppContext; import com.java110.core.context.BusinessServiceDataFlow; import com.java110.core.context.DataFlowContext; import com.java110.core.context.IPageData; import com.java110.core.factory.AuthenticationFactory; import com.java110.core.factory.DataFlowFactory; import com.java110.feign.base.IPrimaryKeyService; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.http.*; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; import java.util.List; import java.util.Map; /** * 所有服务端的基类 * 1、报文分装 * 2、报文解析 * Created by wuxw on 2017/2/28. */ public class BaseServiceSMO extends AppBase { /** * 主键生成 * @param iPrimaryKeyService 主键生成服务对象 * @param type 主键类型 如 OL_ID , CUST_ID * @return * @throws Exception */ protected String queryPrimaryKey(IPrimaryKeyService iPrimaryKeyService,String type) throws Exception{ JSONObject data = new JSONObject(); data.put("type",type); //生成的ID String targetId = "-1"; //要求接口返回 {"RESULT_CODE":"0000","RESULT_INFO":{"user_id":"7020170411000041"},"RESULT_MSG":"成功"} String custIdJSONStr = iPrimaryKeyService.queryPrimaryKey(data.toJSONString()); JSONObject custIdJSONTmp = JSONObject.parseObject(custIdJSONStr); if(custIdJSONTmp.containsKey("RESULT_CODE") && ProtocolUtil.RETURN_MSG_SUCCESS.equals(custIdJSONTmp.getString("RESULT_CODE")) && custIdJSONTmp.containsKey("RESULT_INFO")){ //从接口生成olId targetId = custIdJSONTmp.getJSONObject("RESULT_INFO").getString(type); } if("-1".equals(targetId)) { throw new RuntimeException("调用主键生成服务服务失败," + custIdJSONStr); } return targetId; } /** * 调用中心服务 * @return */ protected ResponseEntity callCenterService(RestTemplate restTemplate,IPageData pd, String param, String url, HttpMethod httpMethod){ ResponseEntity responseEntity = null; HttpHeaders header = new HttpHeaders(); header.add(CommonConstant.HTTP_APP_ID.toLowerCase(), CommonConstant.HC_WEB_APP_ID); header.add(CommonConstant.HTTP_USER_ID.toLowerCase(), CommonConstant.ORDER_DEFAULT_USER_ID); header.add(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), pd.getTransactionId()); header.add(CommonConstant.HTTP_REQ_TIME.toLowerCase(), pd.getRequestTime()); header.add(CommonConstant.HTTP_SIGN.toLowerCase(), ""); HttpEntity httpEntity = new HttpEntity(param, header); try{ responseEntity = restTemplate.exchange(url, httpMethod, httpEntity, String.class); }catch (HttpStatusCodeException e){ //这里spring 框架 在4XX 或 5XX 时抛出 HttpServerErrorException 异常,需要重新封装一下 responseEntity = new ResponseEntity("请求下游系统异常,"+e.getResponseBodyAsString(),e.getStatusCode()); }catch (Exception e){ responseEntity = new ResponseEntity(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); }finally { return responseEntity; } } /** * 创建上下文对象 * @return */ protected AppContext createApplicationContext(){ return AppContext.newInstance(); } }