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 objs = new ArrayList(); for (int objIndex = 0; objIndex < svcContArray.size(); objIndex++) { objs.add(svcContArray.getJSONObject(objIndex)); } SvcCont svcCont = new SvcCont(); svcCont.setObjs(objs); return svcCont; } /** * 从报文中获取指定的对象 * * @param svcCont * @param c * @param * @return */ public static T getObject(SvcCont svcCont, Class c) { if (svcCont == null || svcCont.getObjs() == null || svcCont.getObjs().size() == 0) { return null; } for (JSONObject obj : svcCont.getObjs()) { if (c.getClass().getName().equals(obj.getString("beanName"))) { return JSONObject.toJavaObject(obj, c); } } return null; } /** * 从报文中获取指定的对象(list 方式) * * @param svcCont * @param c * @param * @return */ public static List getObjects(SvcCont svcCont, Class c) { if (svcCont == null || svcCont.getObjs() == null || svcCont.getObjs().size() == 0) { return null; } List ts = new ArrayList(); for (JSONObject obj : svcCont.getObjs()) { if (c.getClass().getName().equals(obj.getString("beanName"))) { ts.add(JSONObject.toJavaObject(obj, c)); } } return ts; } /** * 从报文中获取指定的对象 * * @param jsonString * @param c * @param * @return */ public static T getObject(String jsonString, Class c) { SvcCont svcCont = getSvcCont(jsonString); if (svcCont == null || svcCont.getObjs() == null || svcCont.getObjs().size() == 0) { return null; } for (JSONObject obj : svcCont.getObjs()) { if (obj !=null && c.getName().equals(obj.getString("beanName"))) { return JSONObject.toJavaObject(obj, c); } } return null; } /** * 从报文中获取指定的对象(list 方式) * * @param jsonString 请求字符串 * @param c * @param * @return */ public static List getObjects(String jsonString, Class c) { SvcCont svcCont = getSvcCont(jsonString); if (svcCont == null || svcCont.getObjs() == null || svcCont.getObjs().size() == 0) { return null; } List ts = new ArrayList(); for (JSONObject obj : svcCont.getObjs()) { if (c.getClass().getName().equals(obj.getString("beanName"))) { ts.add(JSONObject.toJavaObject(obj, c)); } } return ts; } /** * 创建公用输出 * Controller返回 html 协议 * {'RESULT_CODE':'1999','RESULT_MSG':'失败原因','RESULT_INFO':{...}} * @return */ public static String createResultMsg(String resultCode, String resultMsg, JSONObject resultInfo) { JSONObject data = new JSONObject(); data.put(RESULT_CODE, resultCode); data.put(RESULT_MSG, resultMsg); data.put(RESULT_INFO, resultInfo); return data.toString(); } /** * 校验返回报文 * 如果为true 成功 * false 失败 * @param returnJsonParam * @return */ public static boolean validateReturnJson(String returnJsonParam,JSONObject paramJson){ try{ paramJson = JSONObject.parseObject(returnJsonParam); if(paramJson == null || !paramJson.containsKey(RESULT_CODE)){ return false; } if(ProtocolUtil.RETURN_MSG_SUCCESS.equals(paramJson.getString(RESULT_CODE))){ return true; } }catch (Exception e){ LoggerEngine.error("返回报文必须为json格式,当前格式错误 " + returnJsonParam); return false; } return false; } }