package com.java110.utils.util; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.utils.log.LoggerEngine; import com.java110.dto.system.SvcCont; import com.java110.dto.system.TcpCont; import org.springframework.util.StringUtils; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * ProtocolUtil 类 定义 服务之间协议 * TcpCont头部协议 * SvcCont内容协议 * 此协议为JSON格式协议 * { * "tcpCont":{ * "transactionId":"1000000001201702145112526000", * "serviceCode":"FS_001", * "reqTime":"20170214112526", * }, * "svcCont":{ * .....各个交互对象 * } * } * transactionId 表示交易流水 * serviceCode 服务类型,FS_001 用户查询服务 FS_002 用户增加服务 *
* Created by wuxw on 2017/2/27.
*/
public class ProtocolUtil {
public static final String SERVICE_CODE_USER_QUERY = "FS_001"; //用户查询服务
public static final String SERVICE_CODE_USER_SAVE = "FS_002"; //用户保存
public static final String SERVICE_CODE_USER_DELETE = "FS_003"; //删除用户
public static final String SERVICE_CODE_USER_DEL = "FS_003";//用户删除
public static final String SERVICE_CODE_INIT_CACHE = "FS_004";//加载缓存
public static final String SERVICE_CODE_SEND_CODE = "FS_005";//发送验证码
public static final String SERVICE_CODE_OFFER_QUERY = "FS_006";//销售品查询
public static final String SERVICE_CODE_ADD_OFFER = "FS_007"; //销售品订购
public static final String RESULT_CODE = "RESULT_CODE"; //接口返回 编码key
public static final String RESULT_MSG = "RESULT_MSG"; // 接口返回 描述key
public static final String RESULT_INFO = "RESULT_INFO"; //接口返回 信息 key
private static JSONObject tcpContJson = null;
private static JSONObject svcContJson = null;
private static JSONObject requestJson = null;
private static DateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss");
public static final String RETURN_MSG_ERROR = "1999";//通用错误
public static final String RETURN_MSG_REMOTE_TIMEOUT = "1998";// 调用远程服务超时,失败
public static final String RETURN_MSG_SUCCESS = "0000"; //处理成功
/**
* 创建请求报文头部信息
*
* @param serviceCode
* @return
*/
public static JSONObject createRequestTcpCont(String serviceCode) {
return createRequestTcpContJson(serviceCode);
}
public static JSONObject createRequestTcpContJson(String serviceCode) {
//获取交易流水
String transactionId = "-1";
tcpContJson = new JSONObject();
tcpContJson.put("transactionId", transactionId);
tcpContJson.put("serviceCode", serviceCode);
tcpContJson.put("reqTime", dateFormat.format(new Date()));
return tcpContJson;
}
/**
* 创建报文体信息
*
* @param objs
* @return
*/
public static String createSvcCont(Object... objs) {
JSONArray svcContArray = new JSONArray();
for (int objIndex = 0; objIndex < objs.length; objIndex++) {
svcContArray.add(JSONObject.parseObject(JSONObject.toJSONString(objs[objIndex])));
}
return svcContArray.toString();
}
public static JSONArray createSvcContJsonArray(Object... objs) {
return JSONArray.parseArray(createSvcCont(objs));
}
/**
* 创建请求报文(返回JSONObject)
*
* @param serviceCode 服务编码
* @param objs 请求对象,多个
* @return
*/
public static JSONObject createRequestJsonObject(String serviceCode, Object... objs) {
requestJson = new JSONObject();
requestJson.put("tcpCont", createRequestTcpCont(serviceCode));
if (objs == null || objs.length == 0) {
requestJson.put("svcCont", "");
} else {
requestJson.put("svcCont", createSvcContJsonArray(objs));
}
return requestJson;
}
/**
* 创建请求报文(返回String)
*
* @param serviceCode 服务编码
* @param objs 请求对象,多个
* @return
*/
public static String createRequestJsonString(String serviceCode, Object... objs) {
return createRequestJsonObject(serviceCode, objs).toString();
}
/**
* 创建返回报文头部信息
*
* @param serviceCode
* @return
*/
public static JSONObject createResponseTcpCont(String transactionId, String serviceCode, String resultCode, String resultMsg) {
return createResponseTcpContJson(transactionId, serviceCode, resultCode, resultMsg);
}
public static JSONObject createResponseTcpContJson(String transactionId, String serviceCode, String resultCode, String resultMsg) {
tcpContJson = new JSONObject();
tcpContJson.put("transactionId", transactionId);
tcpContJson.put("serviceCode", serviceCode);
tcpContJson.put("resTime", dateFormat.format(new Date()));
tcpContJson.put("resultCode", resultCode);
tcpContJson.put("resultMsg", resultMsg);
return tcpContJson;
}
/**
* 创建返回报文(返回JSONObject)
*
* @param serviceCode 服务编码
* @param objs 请求对象,多个
* @return
*/
public static JSONObject createResponseJsonObject(String transactionId, String serviceCode, String resultCode, String resultMsg, Object... objs) {
requestJson = new JSONObject();
requestJson.put("tcpCont", createResponseTcpCont(transactionId, serviceCode, resultCode, resultMsg));
if (objs == null || objs.length == 0) {
requestJson.put("svcCont", "");
} else {
requestJson.put("svcCont", createSvcContJsonArray(objs));
}
return requestJson;
}
/**
* 创建返回报文(返回String)
*
* @param serviceCode 服务编码
* @param objs 请求对象,多个
* @return
*/
public static String createResponseJsonString(String transactionId, String serviceCode, String resultCode, String resultMsg, Object... objs) {
return createResponseJsonObject(transactionId, serviceCode, resultCode, resultMsg, objs).toString();
}
/**
* 根据请求报文创建返回报文(返回 String )
*
* @param jsonString 请求报文
* @param resultCode 返回编码
* @param resultMsg 返回信息描述
* @param objs 返回对象
* @return
*/
public static String createResponseJsonString(String jsonString, String resultCode, String resultMsg, Object... objs) {
TcpCont tcpCont = getTcpCont(jsonString);
return createResponseJsonString(tcpCont.getTransactionId(), tcpCont.getServiceCode(), resultCode, resultMsg, objs);
}
/**
* 将报文头部信息放入封装成TcpCont对象
*
* @param jsonString 报文
* @return
*/
public static TcpCont getTcpCont(String jsonString) {
//校验空
if (StringUtils.isEmpty(jsonString)) {
return null;
}
tcpContJson = JSONObject.parseObject(jsonString).getJSONObject("tcpCont");
return JSONObject.parseObject(tcpContJson.toString(), TcpCont.class);
}
/**
* 将报文体内容分装到SvcCont对象
*
* @param jsonString 报文
* @return
*/
public static SvcCont getSvcCont(String jsonString) {
JSONArray svcContArray = JSONObject.parseObject(jsonString).getJSONArray("svcCont");
if (svcContArray == null || svcContArray.size() == 0) {
return null;
}
List