package com.java110.core.context; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.entity.center.Business; import com.java110.entity.center.DataFlowLinksCost; import com.java110.entity.center.DataFlowLog; import org.springframework.http.ResponseEntity; import java.util.*; /** * 数据流上下文 * Created by wuxw on 2018/5/18. */ public abstract class AbstractDataFlowContext extends AbstractTransactionLog implements DataFlowContext, IOrders,TransactionLog{ private String dataFlowId; private String businessType; //交易流水 private String transactionId; private String requestTime; private String orderTypeCd; private String responseTime; private JSONArray resBusiness; private String code; private String message; private String reqData; private JSONObject reqJson; private JSONObject resJson; private String resData; protected List businesses; private Business currentBusiness; private List linksCostDates = new ArrayList(); private List logDatas = new ArrayList(); protected Map requestHeaders = new HashMap(); protected Map requestCurrentHeaders = new HashMap(); protected Map responseHeaders = new HashMap(); protected Map responseCurrentHeaders = new HashMap(); //请求开始时间 private Date startDate; //请求完成时间 private Date endDate; /** * 构建 对象信息 * @param reqInfo * @param headerAll * @return * @throws Exception */ public T builder(String reqInfo, Map headerAll) throws Exception{ //预处理 preBuilder(reqInfo, headerAll); //调用builder T dataFlowContext = (T)doBuilder(reqInfo, headerAll); //后处理 afterBuilder((DataFlowContext) dataFlowContext); return dataFlowContext; } /** * 预处理 * @param reqInfo * @param headerAll */ protected void preBuilder(String reqInfo, Map headerAll) { super.preBuilder(reqInfo,headerAll); } /** * 构建对象 * @param reqInfo * @param headerAll * @return * @throws Exception */ public abstract DataFlowContext doBuilder(String reqInfo, Map headerAll) throws Exception; protected void afterBuilder(DataFlowContext dataFlowContext){ } public void setTransactionId(String transactionId) { this.transactionId = transactionId; } public String getTransactionId() { return transactionId; } public String getDataFlowId() { return dataFlowId; } public void setDataFlowId(String dataFlowId) { this.dataFlowId = dataFlowId; } public List getBusinesses() { return businesses; } public void setBusinesses(List businesses) { this.businesses = businesses; } public void setOrderTypeCd(String orderTypeCd) { this.orderTypeCd = orderTypeCd; } public void setRequestTime(String requestTime) { this.requestTime = requestTime; } public void setResponseTime(String responseTime) { this.responseTime = responseTime; } public void setCode(String code) { this.code = code; } public void setMessage(String message) { this.message = message; } public String getOrderTypeCd() { return orderTypeCd; } public String getRequestTime() { return requestTime; } public String getResponseTime() { return responseTime; } public String getCode() { return code; } public String getMessage() { return message; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } public Map getRequestHeaders() { return requestHeaders; } public Map getResponseHeaders() { return responseHeaders; } public Map getRequestCurrentHeaders() { return requestHeaders; } public Map getResponseCurrentHeaders() { return responseHeaders; } public String getReqData() { return reqData; } public void setReqData(String reqData) { this.reqData = reqData; } public JSONObject getResJson() { return resJson; } public void setResJson(JSONObject resJson) { this.resJson = resJson; this.setResData(resJson.toJSONString()); } public List getLinksCostDates() { return linksCostDates; } public List getLogDatas(){ return logDatas; } public void setResBusiness(JSONArray resBusiness) { this.resBusiness = resBusiness; } public JSONArray getResBusiness() { return resBusiness; } public Business getCurrentBusiness() { return currentBusiness; } public void setCurrentBusiness(Business currentBusiness) { this.currentBusiness = currentBusiness; } /** * 添加各个环节的日志 * @param dataFlowLog */ public void addLogDatas(DataFlowLog dataFlowLog){ this.logDatas.add(dataFlowLog); } /** * 添加各个环节的耗时 * @param dataFlowLinksCost */ public void addLinksCostDates(DataFlowLinksCost dataFlowLinksCost){ this.linksCostDates.add(dataFlowLinksCost); } public String getAppId(){return null;} public String getUserId(){return null;}; @Override public void setAppId(String appId) { } @Override public void setUserId(String userId) { } public String getRemark(){return null;}; public String getReqSign(){return null;}; public JSONArray getAttrs(){return null;}; public String getBusinessType() { return businessType; } public void setBusinessType(String businessType) { this.businessType = businessType; } public Map getParamOut() { return null; } public String getResData() { return resData; } public void setResData(String resData) { this.resData = resData; } public JSONObject getReqJson() { return reqJson; } public void setReqJson(JSONObject reqJson) { this.reqJson = reqJson; } public void addParamOut(String key, Object value) { } public void setPort(String port) { this.port = port; } public String getbId(){ return null; } public String getLogId(){ return getbId(); } /** * 业务编码 当前需要处理的业务编码,可以写将要请求服务提供方的方法名 * 主要用于 日志端展示 * @return 当前服务编码 */ public String getServiceCode(){ if(this.currentBusiness != null){ return currentBusiness.getServiceCode(); } return ""; } /** * 业务名称 当前需要处理的业务名称,可以当前调用的业务名称 如 商品购买 等 * 主要用于 日志端展示 * @return 当前服务名称 */ public String getServiceName(){ if(this.currentBusiness != null){ return currentBusiness.getServiceName(); } return ""; } public abstract IOrders getOrder(); protected AbstractDataFlowContext(Date startDate, String code){ this.setStartDate(startDate); this.setCode(code); } public void setResponseEntity(ResponseEntity responseEntity){ } public ResponseEntity getResponseEntity(){ return null; } }