package com.tracingchain.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.tracingchain.p2p.P2PService;
import com.tracingchain.p2p.P2PTracingService;
import com.tracingchain.pojo.bitcoin.Block;
import com.tracingchain.pojo.tracing.*;
import com.tracingchain.service.TracingService;
import com.tracingchain.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* 仓库溯源服务
*/
@Controller
public class TracingController {
@Autowired
TracingService tracingService;
@Autowired
P2PService p2pService;
@Autowired
P2PTracingService p2pTracingService;
@PostMapping("/storehouse/create")
public String createStorehouse(StorehouseParam storehouseParam, Model model) {
ResponseResult result = new ResponseResult();
if (storehouseParam.storehouseAddress == null || storehouseParam.management == null || storehouseParam.phone == null) {
result.msg = "请填写完成信息";
model.addAttribute("result", result);
return "storehouse/storehouse";
}
Storehouse storehouse = tracingService.createStorehouse(storehouseParam);
result.msg = "创建成功: 生成的仓库地址为:" + storehouse.getAddress();
result.ok = true;
//将仓库传给其他节点
//将钱包传给其他节点
Storehouse[] storehouses = {storehouse.clone()};
String msg = JSON.toJSONString(new Message(P2PTracingService.RESPONSE_STOREHOUSE, JSON.toJSONString(storehouses)));
p2pTracingService.broatcast(msg);
model.addAttribute("result", result);
model.addAttribute("storehouse", storehouse);
return "storehouse/storehouse";
}
/**
* 查询所有仓库信息
*
* @return
*/
@GetMapping("/storehouse/getAll")
public String queryAllStorehouse(Model model) {
model.addAttribute("storehouses", tracingService.queryAllStorehouse());
return "storehouse/storehouses";
}
/**
* 根据仓库地址查找仓库信息
*
* @param address
* @return
*/
@GetMapping("/storehouse/get")
@ResponseBody
public ResponseResult queryStorehouse(@RequestParam String address) {
ResponseResult result = new ResponseResult();
Storehouse storehouse = tracingService.queryStoerhouse(address);
if (storehouse == null) {
result.msg = "找不到该仓库";
return result;
}
result.msg = "查找成功";
result.data = storehouse;
return result;
}
/**
* 查询溯源区块链
*
* @return
*/
@GetMapping("/tracingChain")
public String queryTracingChain(Model model) {
model.addAttribute("blocks", tracingService.queryTracingChain());
return "storehouse/chain";
}
/**
* @PostMapping("/storehouse/input")
* @ResponseBody public ResponseResult inputGoods(@RequestBody StorehouseInputParam storehouseInputParam){
* String address = storehouseInputParam.getAddress();
* List<Goods> goodsList = storehouseInputParam.getGoodsList();
* ResponseResult result = new ResponseResult();
* List<Goods> goods = tracingService.inputGoods(address, goodsList);
* if(goods!=null){
* result.msg="录入成功";
* result.data=goods;
* }else{
* result.msg="录入失败";
* }
* return result;
* }
**/
//为了前端方便,这里一次只能录入一种商品
@PostMapping("/storehouse/input")
public String inputGoods(String address, Goods goods, Model model) {
ArrayList<Goods> goodsList = new ArrayList<>();
goodsList.add(goods);
ResponseResult result = new ResponseResult();
List<Goods> goodsInput = tracingService.inputGoods(address, goodsList);
if (goodsInput != null) {
result.msg = "录入成功,录入的货物ID为:" + goodsInput.get(0).getId();
result.ok = true;
model.addAttribute("result", result);
return "storehouse/storehouseInput";
} else {
result.msg = "录入失败,请检查仓库地址";
result.ok = false;
model.addAttribute("result", result);
return "storehouse/storehouseInput";
}
}
@PostMapping("/storehouse/queryGoods")
public String queryStorehouseGoods(@RequestParam String address, Model model) {
address = address.trim();
List<Goods> goodsList = tracingService.queryGoods(address);
ResponseResult result = new ResponseResult();
if (goodsList != null) {
result.msg = "查找成功";
result.ok = true;
model.addAttribute("goodsList", goodsList);
} else {
result.msg = "查找失败,请检查仓库地址";
result.ok = false;
model.addAttribute("result", result);
}
model.addAttribute("result", result);
return "storehouse/goods";
}
/**
* @PostMapping("/storehouse/createTransaction")
* @ResponseBody public ResponseResult creteTransaction(@RequestBody TxParam txParam){
* ResponseResult result= tracingService.createTransaction(txParam.getSenderAddress(),txParam.getRecipientAddress(),txParam.getIds());
* //交易成功,向其他节点广播
* if(result.data!=null){
* TracingTransaction tracingTransaction = (TracingTransaction) result.data;
* TracingTransaction[] txs = {tracingTransaction};
* String msg = JSON.toJSONString(new Message(P2PTracingService.RESPONSE_TRANSACTION, JSON
* .toJSONString(txs)));
* p2pTracingService.broatcast(msg);
* }
* return result;
* }
**/
@PostMapping("/storehouse/createTransaction")
public String creteTransaction(String senderAddress, String recipientAddress, String id, Model model) {
ResponseResult result = tracingService.createTransaction(senderAddress.trim(), recipientAddress.trim(), new String[]{id.trim()});
//交易成功,向其他节点广播
if (result.data != null) {
TracingTransaction tracingTransaction = (TracingTransaction) result.data;
TracingTransaction[] txs = {tracingTransaction};
String msg = JSON.toJSONString(new Message(P2PTracingService.RESPONSE_TRANSACTION, JSON
.toJSONString(txs)),SerializerFeature.DisableCircularReferenceDetect);
p2pTracingService.broatcast(msg);
}
model.addAttribute("result", result);
return "storehouse/transaction";
}
/**
* 生成区块
*
* @return
*/
@RequestMapping("/storehouse/createTracingBolck")
public String createTracingBlock(@ModelAttribute("result") ResponseResult result, Model model) {
if (result.msg.equals("挖矿成功")) {
Block block = (Block) result.data;
TracingBlock tracingBlock = tracingService.createTracingBlock(block);
if (tracingBlock != null) {
block.setTracingBlockHash(tracingBlock.getHash());
}
//主链要先广播,不然验证溯源链时会出错
//挖矿成功,向其他节点广播新区块
Block[] blocks = {block};
Message message = new Message(P2PService.RESPONSE_BLOCKCHAIN, JSON.toJSONString(blocks));
String msg = JSON.toJSONString(message);
p2pService.broatcast(msg);
if (tracingBlock != null) {
if (tracingService.addBlock(tracingBlock)) {
System.out.println("溯源块加入成功");
//向其他节点广播新溯源区块
TracingBlo
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 毕业设计 基于区块链的仓库溯源系统源码+详细文档+全部资料(高分项目).zip毕业设计 基于区块链的仓库溯源系统源码+详细文档+全部资料(高分项目).zip毕业设计 基于区块链的仓库溯源系统源码+详细文档+全部资料(高分项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕设项目、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 3、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计 基于区块链的仓库溯源系统源码+详细文档+全部资料(高分项目).zip (57个子文件)
tracingChain-master
pom.xml 2KB
src
main
resources
templates
index.ftl 3KB
bitcoin
wallet.ftl 4KB
balance.ftl 7KB
transaction.ftl 6KB
wallets.ftl 7KB
chain.ftl 10KB
mine.ftl 7KB
storehouse
storehouses.ftl 8KB
storehouseInput.ftl 9KB
transaction.ftl 6KB
storehouse.ftl 9KB
goods.ftl 9KB
tracing.ftl 14KB
chain.ftl 12KB
peers.ftl 6KB
static
img
logo.png 2KB
index.png 48KB
bg.png 3KB
css
me.css 3KB
application.yml 84B
java
com
tracingchain
controller
IndexController.java 1KB
TracingController.java 15KB
BlockController.java 5KB
pojo
tracing
Goods.java 2KB
TracingBlock.java 2KB
Storehouse.java 3KB
TracingOutput.java 1KB
TracingInput.java 831B
TracingTransaction.java 4KB
bitcoin
Transaction.java 4KB
Block.java 2KB
Wallet.java 2KB
TransactionInput.java 1KB
TransactionOutput.java 2KB
service
TrcingServiceImpl.java 9KB
BlockServiceImpl.java 14KB
BlockService.java 2KB
TracingService.java 2KB
util
CryptoUtil.java 1KB
SpringContextUtils.java 2KB
Coder.java 2KB
RSACoder.java 6KB
p2p
P2PTracingService.java 10KB
P2PServer.java 2KB
P2PClient.java 3KB
P2PService.java 8KB
vo
Message.java 606B
PeerInfo.java 596B
TxParam.java 966B
StorehouseInputParam.java 560B
StorehouseParam.java 802B
TracingInfo.java 2KB
ResponseResult.java 613B
TracingchainApplication.java 1KB
.gitignore 161B
171265889347208773632.zip 416B
共 57 条
- 1
资源评论
不走小道
- 粉丝: 3234
- 资源: 5113
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于FPGA控制28BYJ48型四相八拍电机步进电机实验Verilog逻辑源码Quartus工程文件+文档说明资料.zip
- 机智云-植物宝制作stm32单片机程序源码+ android app源码+文档说明资料.zip
- php-leetcode题解之整数反转.zip
- php-leetcode题解之只出现一次的数字.zip
- php-leetcode题解之重复N次的元素.zip
- php-leetcode题解之找出第K大的异或坐标值.zip
- php-leetcode题解之移动零.zip
- php-leetcode题解之有效的数独.zip
- php-leetcode题解之寻找旋转排序数组中的最小值.zip
- php-leetcode题解之验证二叉搜索树.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功