/**
*
*/
package com.fuzamei.util.blockchain;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.fuzamei.http.HttpRequest;
import com.fuzamei.util.HexStringUtil;
import com.fuzamei.util.JSONUtil;
import com.fuzamei.util.ReadConfUtil;
/**
*
* Description:区块链的操作类
* @Note
* Author:maamin
* @version 1.0
* @Note
* ProjectName: ccb_fund_trusteeship
*
PackageName: com.fuzamei.util.blockchain
*
ClassName: BlockChainUtil
*
Date: 2018年1月10日 下午4:20:50
*/
@Component
public class BlockChainUtil {
/**
*
* Description:将签名转发给区块链
* @param protobufBean
* @return
* @Note
* Author:maamin
*
Date: 2018年1月10日 下午4:21:20
*
Version: 1.0
*/
public static String sendPostParam(ProtobufBean protobufBean){
HttpRequest httpRequest = new HttpRequest();
String blockUrl = ReadConfUtil.getProperty("url_prefix")+"://"+ReadConfUtil.getProperty("block_ip")+":"+ReadConfUtil.getProperty("block_port");
String result = ""; //存放最终区块链放回的结果
String signdata = protobufBean.getSignature();
String[] params = new String[1];
params[0] = signdata;
String jsonstr = JSON.toJSONString(new RequestAccountBean("2.0", "broadcast_tx_commit", null, params));
try {
result = httpRequest.sendPost(blockUrl, jsonstr);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/**
*
* Description:验证区块链返回的结果是否成功,true:成功,false:失败
* @param jsonData
* @return
* @Note
* Author:maamin
*
Date: 2018年1月10日 下午4:22:37
*
Version: 1.0
*/
public static boolean vilaResult(String jsonData){
boolean flag = false;
Map map = JSONUtil.jsonToMap(jsonData); //总的map
String result = map.get("result").toString(); //得到result节点
Map resultMap = JSONUtil.jsonToMap(result);
String check_tx = resultMap.get("check_tx").toString();
Map check_txMap = JSONUtil.jsonToMap(check_tx);
String code1 = check_txMap.get("code").toString();
String deliver_tx = resultMap.get("deliver_tx").toString();
Map deliver_txMap = JSONUtil.jsonToMap(deliver_tx);
String code2 = deliver_txMap.get("code").toString();
if(("0".equals(code1))&&("0".equals(code2))){ //两个都等于0才等于成功
flag = true;
}
return flag;
}
/**
*
* @Title: sendBlockChain
* @Description: TODO 发送签名直接转发到区块链
* @param @param qianming
* @param @return
* @return boolean
* @author: Ma Amin
* @date: 2017-10-15 下午1:44:43
*/
public boolean sendBlockChain(String qianming){
boolean flag = false; //区块链成功返回true,失败返回false,默认返回false
ProtobufBean protobufBean = new ProtobufBean(); //签名对象
Map mma = JSONUtil.jsonToMap(qianming);
long instructionId = Long.parseLong(mma.get("sid").toString());
protobufBean.setInstructionId(instructionId);
protobufBean.setSignature(mma.get("signdata").toString());
String result = sendPostParam(protobufBean);
boolean flag2 = vilaResult(result); //区块链返回过来的结果
if(flag2){
flag = true;
}
return flag;
}
/**
*
* Description:通过sign拿到protobufBean
* @param sign
* @return
* @Note
* Author:maamin
*
Date: 2018年1月10日 下午4:19:21
*
Version: 1.0
*/
public static ProtobufBean getProtobufBean(String sign){
ProtobufBean protobufBean = new ProtobufBean();
Map signMap = JSONUtil.jsonToMap(sign);
long instructionId = Long.parseLong(signMap.get("sid").toString());
protobufBean.setInstructionId(instructionId);
protobufBean.setSignature(signMap.get("signdata").toString());
return protobufBean;
}
/**
* 解析错误信息
* @param qianming
* @return
*/
public Map sendBlockChain2(String qianming){
Map map = new HashMap();
boolean flag = false; //区块链成功返回true,失败返回false,默认返回false
String fruit = "";
ProtobufBean protobufBean = new ProtobufBean(); //签名对象
Map mma = JSONUtil.jsonToMap(qianming);
long instructionId = Long
.parseLong(mma.get("sid").toString());
protobufBean.setInstructionId(instructionId);
protobufBean.setSignature(mma.get("signdata").toString());
String result = sendPostParam(protobufBean);
System.out.println(result);
flag = vilaResult(result); //区块链返回过来的结果
Map signMap = JSONUtil.jsonToMap(result);
Map resultMap = JSONUtil.jsonToMap(signMap.get("result").toString());
Map check_tx = JSONUtil.jsonToMap(resultMap.get("check_tx").toString());
Map deliver_tx = JSONUtil.jsonToMap(resultMap.get("deliver_tx").toString());
if(check_tx.get("data") != null){
if(!"".equals(check_tx.get("data").toString())){
String hexStr = check_tx.get("data").toString();
fruit = HexStringUtil.hexStringToString(hexStr);
}
}
if(deliver_tx.get("data") != null){
if(!"".equals(deliver_tx.get("data").toString())){
String hexStr = deliver_tx.get("data").toString();
fruit = HexStringUtil.hexStringToString(hexStr);
}
}
map.put("flag", flag);
map.put("data", fruit);
return map;
}
}