BlockChainUtil.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /**
  2. *
  3. */
  4. package com.fuzamei.util.blockchain;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import org.springframework.stereotype.Component;
  8. import com.alibaba.fastjson.JSON;
  9. import com.fuzamei.http.HttpRequest;
  10. import com.fuzamei.util.HexStringUtil;
  11. import com.fuzamei.util.JSONUtil;
  12. import com.fuzamei.util.ReadConfUtil;
  13. /**
  14. *
  15. * <b>Description:区块链的操作类</b><br>
  16. * @Note
  17. * <b>Author:maamin
  18. * @version 1.0
  19. * @Note
  20. * <b>ProjectName:</b> ccb_fund_trusteeship
  21. * <br><b>PackageName:</b> com.fuzamei.util.blockchain
  22. * <br><b>ClassName:</b> BlockChainUtil
  23. * <br><b>Date:</b> 2018年1月10日 下午4:20:50
  24. */
  25. @Component
  26. public class BlockChainUtil {
  27. /**
  28. *
  29. * <b>Description:将签名转发给区块链</b><br>
  30. * @param protobufBean
  31. * @return
  32. * @Note
  33. * <b>Author:maamin
  34. * <br><b>Date:</b> 2018年1月10日 下午4:21:20
  35. * <br><b>Version:</b> 1.0
  36. */
  37. public static String sendPostParam(ProtobufBean protobufBean){
  38. HttpRequest httpRequest = new HttpRequest();
  39. String blockUrl = ReadConfUtil.getProperty("url_prefix")+"://"+ReadConfUtil.getProperty("block_ip")+":"+ReadConfUtil.getProperty("block_port");
  40. String result = ""; //存放最终区块链放回的结果
  41. String signdata = protobufBean.getSignature();
  42. String[] params = new String[1];
  43. params[0] = signdata;
  44. String jsonstr = JSON.toJSONString(new RequestAccountBean("2.0", "broadcast_tx_commit", null, params));
  45. try {
  46. result = httpRequest.sendPost(blockUrl, jsonstr);
  47. } catch (Exception e) {
  48. // TODO Auto-generated catch block
  49. e.printStackTrace();
  50. }
  51. return result;
  52. }
  53. /**
  54. *
  55. * <b>Description:验证区块链返回的结果是否成功,true:成功,false:失败</b><br>
  56. * @param jsonData
  57. * @return
  58. * @Note
  59. * <b>Author:maamin
  60. * <br><b>Date:</b> 2018年1月10日 下午4:22:37
  61. * <br><b>Version:</b> 1.0
  62. */
  63. public static boolean vilaResult(String jsonData){
  64. boolean flag = false;
  65. Map<String,Object> map = JSONUtil.jsonToMap(jsonData); //总的map
  66. String result = map.get("result").toString(); //得到result节点
  67. Map<String,Object> resultMap = JSONUtil.jsonToMap(result);
  68. String check_tx = resultMap.get("check_tx").toString();
  69. Map<String,Object> check_txMap = JSONUtil.jsonToMap(check_tx);
  70. String code1 = check_txMap.get("code").toString();
  71. String deliver_tx = resultMap.get("deliver_tx").toString();
  72. Map<String,Object> deliver_txMap = JSONUtil.jsonToMap(deliver_tx);
  73. String code2 = deliver_txMap.get("code").toString();
  74. if(("0".equals(code1))&&("0".equals(code2))){ //两个都等于0才等于成功
  75. flag = true;
  76. }
  77. return flag;
  78. }
  79. /**
  80. *
  81. * @Title: sendBlockChain
  82. * @Description: TODO 发送签名直接转发到区块链
  83. * @param @param qianming
  84. * @param @return
  85. * @return boolean
  86. * @author: Ma Amin
  87. * @date: 2017-10-15 下午1:44:43
  88. */
  89. public boolean sendBlockChain(String qianming){
  90. boolean flag = false; //区块链成功返回true,失败返回false,默认返回false
  91. ProtobufBean protobufBean = new ProtobufBean(); //签名对象
  92. Map<String, Object> mma = JSONUtil.jsonToMap(qianming);
  93. long instructionId = Long.parseLong(mma.get("sid").toString());
  94. protobufBean.setInstructionId(instructionId);
  95. protobufBean.setSignature(mma.get("signdata").toString());
  96. String result = sendPostParam(protobufBean);
  97. boolean flag2 = vilaResult(result); //区块链返回过来的结果
  98. if(flag2){
  99. flag = true;
  100. }
  101. return flag;
  102. }
  103. /**
  104. *
  105. * <b>Description:通过sign拿到protobufBean</b><br>
  106. * @param sign
  107. * @return
  108. * @Note
  109. * <b>Author:maamin
  110. * <br><b>Date:</b> 2018年1月10日 下午4:19:21
  111. * <br><b>Version:</b> 1.0
  112. */
  113. public static ProtobufBean getProtobufBean(String sign){
  114. ProtobufBean protobufBean = new ProtobufBean();
  115. Map<String, Object> signMap = JSONUtil.jsonToMap(sign);
  116. long instructionId = Long.parseLong(signMap.get("sid").toString());
  117. protobufBean.setInstructionId(instructionId);
  118. protobufBean.setSignature(signMap.get("signdata").toString());
  119. return protobufBean;
  120. }
  121. /**
  122. * 解析错误信息
  123. * @param qianming
  124. * @return
  125. */
  126. public Map<String, Object> sendBlockChain2(String qianming){
  127. Map<String, Object> map = new HashMap<String, Object>();
  128. boolean flag = false; //区块链成功返回true,失败返回false,默认返回false
  129. String fruit = "";
  130. ProtobufBean protobufBean = new ProtobufBean(); //签名对象
  131. Map<String, Object> mma = JSONUtil.jsonToMap(qianming);
  132. long instructionId = Long
  133. .parseLong(mma.get("sid").toString());
  134. protobufBean.setInstructionId(instructionId);
  135. protobufBean.setSignature(mma.get("signdata").toString());
  136. String result = sendPostParam(protobufBean);
  137. System.out.println(result);
  138. flag = vilaResult(result); //区块链返回过来的结果
  139. Map<String, Object> signMap = JSONUtil.jsonToMap(result);
  140. Map<String, Object> resultMap = JSONUtil.jsonToMap(signMap.get("result").toString());
  141. Map<String, Object> check_tx = JSONUtil.jsonToMap(resultMap.get("check_tx").toString());
  142. Map<String, Object> deliver_tx = JSONUtil.jsonToMap(resultMap.get("deliver_tx").toString());
  143. if(check_tx.get("data") != null){
  144. if(!"".equals(check_tx.get("data").toString())){
  145. String hexStr = check_tx.get("data").toString();
  146. fruit = HexStringUtil.hexStringToString(hexStr);
  147. }
  148. }
  149. if(deliver_tx.get("data") != null){
  150. if(!"".equals(deliver_tx.get("data").toString())){
  151. String hexStr = deliver_tx.get("data").toString();
  152. fruit = HexStringUtil.hexStringToString(hexStr);
  153. }
  154. }
  155. map.put("flag", flag);
  156. map.put("data", fruit);
  157. return map;
  158. }
  159. }