华为区块链开发,处方流转合约Java代码示例

这篇具有很好参考价值的文章主要介绍了华为区块链开发,处方流转合约Java代码示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

https://wheart.cn/
package org.hyperledger.fabric.example;

import java.util.List;

import com.google.gson.Gson;
import com.google.protobuf.ByteString;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hyperledger.fabric.shim.ChaincodeBase;
import org.hyperledger.fabric.shim.ChaincodeStub;

import static java.nio.charset.StandardCharsets.UTF_8;

public class SimpleChaincode extends ChaincodeBase {
    // 药品对象定义
    class Drug {
        // 药品名称
        String drugName;
        // 用法
        String drugUsage;
        // 用量
        String drugAmount;
        // 频率
        String drugRate;
        // 数量
        int drugNumber;
    }

    // 签章对象定义
    class Signature {
        // 签章机构
        String signCompany;
        // 签章内容
        String signInfo;
        // 签章时间
        String signTime;
        // 存证信息
        String certificateInfo;
    }

    // 患者授权对象定义
    class Accredit {
        // 被授权机构名称
        String toAccreditCompany;
        // 被授权机构社会信用代码
        String toAccreditCompanyId;
        // 被授权机构分支机构
        String toAccreditCompanyBranch;
        // 授权开始时间
        String beginTime;
        // 授权结束时间
        String endTime;
        // 授权状态(0-未用;1-使用;9-取消)
        int accreditState;
    }

    // 处方登记对象定义
    class Prescription {
        // 处方ID
        String prescriptionId;
        // 开具时间
        String signTime;
        // 医生姓名
        String dName;
        // 医生身份证
        String dIdentityNumber;
        // 医院名称
        String hospitalName;
        // 医院社会信用代码
        String hospitalId;
        // 患者姓名
        String name;
        // 患者身份证
        String identityNumber;
        // 处方状态
        String state;
        // 诊断信息
        String diagnosticInfo;
        // 药品信息 (数组)
        Drug[] drugInfo;
        // 医生签章 (JSON字符串)
        Signature doctorSignature;
        // 医院签章 (JSON字符串)
        Signature hospitaSignature;
        // 药师签章 (JSON字符串)
        Signature pharmacistSignature;
        // 患者授权信息 (数组)
        Accredit[] accreditInfo;
        // 药师姓名
        String pharmacistName;
        // 药师身份证
        String pharmacistIdentityNumber;
        // 第三方审方机构名称
        String auditName;
        // 第三方审方机构社会信用代码
        String auditId;
        // 配药机构名称
        String dispensingName;
        // 配药机构社会信用代码
        String dispensingId;
    }

    // 处方审核对象定义
    class PscrpAudit {
        // 处方ID
        String prescriptionId;
        // 处方状态
        String state;
        // 药师签章 (JSON字符串)
        Signature pharmacistSignature;
        // 药师姓名
        String pharmacistName;
        // 药师身份证
        String pharmacistIdentityNumber;
        // 第三方审方机构名称
        String auditName;
        // 第三方审方机构社会信用代码
        String auditId;
    }

    // 患者授权对象定义
    class PscrpAccredit {
        // 处方ID
        String prescriptionId;
        // 患者姓名
        String name;
        // 患者身份证
        String identityNumber;
        // 处方状态
        String state;
        // 患者授权信息 (数组)
        Accredit[] accreditInfo;
    }

    // 处方配药对象定义
    class PscrpDispensation {
        // 处方ID
        String prescriptionId;
        // 处方状态
        String state;
        // 配药机构名称
        String dispensingName;
        // 配药机构社会信用代码
        String dispensingId;
    }


    private static Log logger = LogFactory.getLog(SimpleChaincode.class);

    @Override
    public Response init(ChaincodeStub stub) {

        logger.info("Init");
        return newSuccessResponse();
    }

    @Override
    public Response invoke(ChaincodeStub stub) {
        try {
            logger.info("Invoke java simple chaincode");
            String func = stub.getFunction();
            List<String> params = stub.getParameters();
            if (func.equals("register")) {
                return register(stub, params);
            } else if (func.equals("audit")) {
                return audit(stub, params);
            } else if (func.equals("accredit")) {
                return accredit(stub, params);
            } else if (func.equals("dispense")) {
                return dispense(stub, params);
            } else if (func.equals("query")) {
                return query(stub, params);
            }
            return newErrorResponse("Invalid invoke function name.");
        } catch (Throwable e) {
            return newErrorResponse(e);
        }
    }

    /**
     * 登记处方信息
     * 参数1:处方登记对象
     */
    private Response register(ChaincodeStub stub, List<String> args) {
        if (args.size() != 1) {
            return newErrorResponse("Incorrect number of arguments. Expecting 1");
        }
        String prescriptionMsg = args.get(0);
        Prescription prescription;
        Gson gson = new Gson();
        prescription = gson.fromJson(prescriptionMsg, Prescription.class);
        String prescriptionId = prescription.prescriptionId;

        if (prescriptionId.equals("")) {
            logger.info("The arguments is invalid - " + prescriptionMsg + ", no prescriptionId.");
            return newErrorResponse("The arguments is invalid - " + prescriptionMsg + ", no prescriptionId.");
        }

        stub.putState(prescriptionId, ByteString.copyFrom(prescriptionMsg, UTF_8).toByteArray());
        return newSuccessResponse();
    }

    /**
     * 处方审核
     * 参数1:处方审核对象
     */
    private Response audit(ChaincodeStub stub, List<String> args) {
        if (args.size() != 1) {
            return newErrorResponse("Incorrect number of arguments. Expecting 1");
        }

        String pscrpAuditMsg = args.get(0);
        PscrpAudit pscrpAudit;
        Gson gson = new Gson();
        pscrpAudit = gson.fromJson(pscrpAuditMsg, PscrpAudit.class);


        String prescriptionId = pscrpAudit.prescriptionId;
        if (prescriptionId.equals("")) {
            logger.info("The arguments is invalid - " + pscrpAuditMsg + ", no prescriptionId.");
            return newErrorResponse("The arguments is invalid - " + pscrpAuditMsg + ", no prescriptionId.");
        }

        Prescription prescription = getPrescription(stub, prescriptionId);
        String state = prescription.state;
        if (!state.equals("register")) {
            logger.info("Current State of the prescription is invalid, state=" + state + ", prescriptionId=" + prescriptionId);
            return newErrorResponse("Current State of the prescription is invalid, state=" + state + ", prescriptionId=" + prescriptionId);
        }

        prescription.state = pscrpAudit.state;
        prescription.pharmacistSignature = pscrpAudit.pharmacistSignature;
        prescription.pharmacistName = pscrpAudit.pharmacistName;
        prescription.pharmacistIdentityNumber = pscrpAudit.pharmacistIdentityNumber;
        prescription.auditName = pscrpAudit.auditName;
        prescription.auditId = pscrpAudit.auditId;

        String prescriptionStr = gson.toJson(prescription);
        stub.putState(prescriptionId, ByteString.copyFrom(prescriptionStr, UTF_8).toByteArray());

        return newSuccessResponse();
    }

    /**
     * 患者授权
     * 参数1:患者授权对象
     */
    private Response accredit(ChaincodeStub stub, List<String> args) {
        if (args.size() != 1) {
            return newErrorResponse("Incorrect number of arguments. Expecting 1");
        }
        String pscrpAccreditMsg = args.get(0);
        Gson gson = new Gson();
        PscrpAccredit pscrpAccredit = gson.fromJson(pscrpAccreditMsg, PscrpAccredit.class);
        String prescriptionId = pscrpAccredit.prescriptionId;
        if (prescriptionId.equals("")) {
            logger.info("The arguments is invalid - " + pscrpAccreditMsg + ", no prescriptionId.");
            return newErrorResponse("The arguments is invalid - " + pscrpAccreditMsg + ", no prescriptionId.");
        }

        Prescription prescription = getPrescription(stub, prescriptionId);

        String state = prescription.state;
        if (!state.equals("audit")) {
            logger.info("Current State of the prescription is invalid, state=" + state + ", prescriptionId=" + prescriptionId);
            return newErrorResponse("Current State of the prescription is invalid, state=" + state + ", prescriptionId=" + prescriptionId);
        }

        prescription.state = pscrpAccredit.state;
        prescription.name = pscrpAccredit.name;
        prescription.identityNumber = pscrpAccredit.identityNumber;
        prescription.accreditInfo = pscrpAccredit.accreditInfo;
        String prescriptionStr = gson.toJson(prescription);

        stub.putState(prescriptionId, ByteString.copyFrom(prescriptionStr, UTF_8).toByteArray());

        return newSuccessResponse();
    }

    /**
     * 处方配药
     * 参数1:处方配药对象
     */
    private Response dispense(ChaincodeStub stub, List<String> args) {
        if (args.size() != 1) {
            return newErrorResponse("Incorrect number of arguments. Expecting 1");
        }
        String pscrpDispenseMsg = args.get(0);
        Gson gson = new Gson();
        PscrpDispensation pscrpDispense = gson.fromJson(pscrpDispenseMsg, PscrpDispensation.class);

        String prescriptionId = pscrpDispense.prescriptionId;
        if (prescriptionId.equals("")) {
            logger.info("The arguments is invalid - " + pscrpDispenseMsg + ", no prescriptionId.");
            return newErrorResponse("The arguments is invalid - " + pscrpDispenseMsg + ", no prescriptionId.");
        }

        Prescription prescription = getPrescription(stub, prescriptionId);


        String state = prescription.state;
        if (!state.equals("accredit")) {
            logger.info("Current State of the prescription is invalid, state=" + state + ", prescriptionId=" + prescriptionId);
            return newErrorResponse("Current State of the prescription is invalid, state=" + state + ", prescriptionId=" + prescriptionId);
        }

        prescription.state = pscrpDispense.state;
        prescription.dispensingName = pscrpDispense.dispensingName;
        prescription.dispensingId = pscrpDispense.dispensingId;

        String prescriptionStr = gson.toJson(prescription);
        stub.putState(prescriptionId, ByteString.copyFrom(prescriptionStr, UTF_8).toByteArray());
        return newSuccessResponse();
    }


    private Prescription getPrescription(ChaincodeStub stub, String prescriptionId) {
        Prescription prescription;
        String prescriptionStr = stub.getStringState(prescriptionId);
        Gson gson = new Gson();
        prescription = gson.fromJson(prescriptionStr, Prescription.class);

        return prescription;
    }

    /*
查询处方信息
参数1:处方登记对象
 */
    private Response query(ChaincodeStub stub, List<String> args) {
        if (args.size() != 1) {
            return newErrorResponse("Incorrect number of arguments. Expecting 1");
        }

        String prescriptionId = args.get(0);

        Prescription prescription = getPrescription(stub, prescriptionId);

        Gson gson = new Gson();
        String prescriptionStr = gson.toJson(prescription);


        return newSuccessResponse(prescriptionStr, ByteString.copyFrom(prescriptionStr, UTF_8).toByteArray());
    }

    public static void main(String[] args) {
        new SimpleChaincode().start(args);
    }
}

文章来源地址https://www.toymoban.com/news/detail-775363.html

到了这里,关于华为区块链开发,处方流转合约Java代码示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教你区块链java开发智能合约nft-第五篇(铸造第一个NFT)

    初学区块链,那真叫一个痛苦并无助。如果没有人带你的话 今天写的这篇是在前面文章基础上写的,初学区块链的朋友建议先看我前面写的文章 手把手教你区块链java开发智能合约nft-第一篇 手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约) 手把手教你

    2023年04月08日
    浏览(90)
  • 智慧构思:智能合约技术精髓与价值转化 ——华为云BCS区块链服务

    在金融、供应链、医疗、版权管理等项目中,涉及数据与价值传输的地方,均存在区块链技术支持。行业领先者早已把握风潮,积极探索实践,部署区块链,推动整个产业进步。 想象即将发生在世界各地的一幕:交易无需经由复杂的审批流程或中介,而由数码契约处理,并自

    2024年02月04日
    浏览(44)
  • 【华为OD机试真题】区块链文件转储系统(java&python)100%通过率 超详细代码注释 代码解读

    【华为OD机试真题 20222023】真题目录 @点这里@ 【华为OD机试真题】信号发射和接收 试读 @点这里@ 【华为OD机试真题】租车骑绿道 试读 @点这里@ 知识点栈链表单调栈Q滑窗 时间限制:2s空间限制:256MB限定语言:不限 区块链底层存储是一个链式文件系统,由顺序的N个文件组成,

    2024年02月04日
    浏览(38)
  • 【区块链 | 智能合约】Ethereum源代码 - 智能合约地址生成算法

    当提交智能合约部署后,会返回智能合约的地址。智能合约地址的生成逻辑在eth.api.go的submitTransaction函数中:

    2024年02月13日
    浏览(47)
  • 区块链浏览器与合约代码

    此文系:Vue3.0 +Quasar+ ethers.js 和以太坊智能合约交互 系列教程之一。 区块链浏览器 在本教程中,我一直在说区块链是去中心化的,它想打造的是一个数据永不可篡改且公开透明的数据世界。 那么这样的区块链它最重要的一环就是,需要一个简单易懂,普通用户就能随时查看

    2024年02月03日
    浏览(65)
  • 区块链智能合约开发学习

    最近正在肝区块链知识学习,入手学习智能合约的开发,由于网上资料实在是太少了,好不容易东拼西凑完成了智能合约的开发、编译、部署、web3js调用(网页页面)和web3j调用(java调用),赶紧趁热把重点提炼出来。 先上图,是我最近学习知识点的一个概括总结,此外还包

    2023年04月18日
    浏览(39)
  • 区块链2——Solidity智能合约开发

    区块链 索引目录 智能合约是一种以代码形式编写的自动执行合约,它们运行在区块链上。这些合约定义了在特定条件下发生的事件以及相应的行为。 1.1 智能合约结构 版本声明(Version Declaration): 智能合约通常以声明版本开始,指定合约应该使用的Solidity编译器版本。例如

    2024年02月05日
    浏览(65)
  • 蚂蚁区块链投票案例(二)---投票合约设计开发

    计划用三篇文章,一个月左右的时间来实现一个蚂蚁开放联盟链上的区块链投票案例,本文是系列第二篇。 蚂蚁区块链投票案例(一)—蚂蚁链简介 蚂蚁区块链投票案例(二)—投票合约设计开发 蚂蚁区块链投票案例(三)—Java调用部分实现(整理中) 本文将结合具体的投票案例

    2024年02月04日
    浏览(45)
  • 区块链之java(六.1) 合约监听

    之前写的那一篇呢,好像有点点问题。就是在设定监听的时候,没有编写具体监听的方法。 今天带来一篇新的方式的合约监听 前面的就不赘述了。合约上的监听是一样的。 在java中。根据abi生产的文件,其实在里面是有监听方法的 代码如下: 实际上呢,在初始化合约后,直

    2024年02月04日
    浏览(44)
  • 区块链DAPP开发 以太坊智能合约框架有哪些

    Truffle 是一个在以太坊进行 DApp 开发的世界级开发环境、测试框架。 使用 Truffle 开发有一以下优点: 内置智能合约编译,链接,部署和二进制(文件)管理。 可快速开发自动化智能合约测试框架。 可脚本化、可扩展的部署和迁移框架。 可管理多个不同的以太坊网络,可部署

    2024年02月02日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包