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 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如软件工程、计科、区块链、人工智能、电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计 基于区块链的仓库溯源系统的设计与实现+部署文档+项目资料齐全 优秀项目.zip (58个子文件)
教程文档.md 4KB
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
共 58 条
- 1
资源评论
IT狂飙
- 粉丝: 4771
- 资源: 2300
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Javascript和微信小程序的Anna设计源码
- 基于Java的仿制品设计源码 - bilibili
- 基于Javascript的影视动画设计源码 - cad
- 基于Java和深度学习的瓦斯浓度预测系统后端设计源码 - 瓦斯浓度预测后端
- Screenshot_20240528_103010.jpg
- 基于Python的新能源承载力计算及界面设计源码 - HAINING-DG
- 基于Java的本科探索学习项目设计源码 - 本科探索
- 基于Javascript和Python的微商城项目设计源码 - MicroMall
- 基于Java的网上订餐系统设计源码 - online ordering system
- 基于Javascript的超级美眉网络资源管理应用模块设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功