版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于HyperledgerFabric的供应链溯源系统设计方案1.系统总体架构1.1架构概览text┌─────────────────────────────────────────────────────────────┐│前端展示层(Vue.js)│├─────────────────────────────────────────────────────────────┤│RESTAPI网关层(Node.js)│├─────────────────────────────────────────────────────────────┤│HyperledgerFabric联盟链网络││├─────────────────────────────────────────────────────┤│││•排序服务(Orderer)││││•Peer节点(组织:生产商/物流商/销售商/监管机构)││││•证书颁发机构(CA)│││└─────────────────────────────────────────────────────┤│├─────────────────────────────────────────────────────────────┤│IPFS分布式文件存储││├─────────────────────────────────────────────────────┤│││•质检报告││││•产品高清图片││││•物流凭证│││└─────────────────────────────────────────────────────┤│└─────────────────────────────────────────────────────────────┘2.技术栈详细设计2.1区块链网络配置```yamlfabric-network.yaml核心配置version:'2.4'networks:supplychain-net:services:排序服务:image:hyperledger/fabric-orderer:2.4environment:-ORDERER_GENERAL_LISTENPORT=7050-ORDERER_GENERAL_LOCALMSPID=OrdererMSP各组织Peer节点:image:hyperledger/fabric-peer:2.4environment:-CORE_PEER_ID=-CORE_PEER_ADDRESS=:7051-CORE_PEER_LOCALMSPID=ProducerMSPCA服务:image:hyperledger/fabric-ca:1.5environment:-FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server```2.2链码(智能合约)设计```go//supplychain_chaincode.go-主链码实现packagemainimport("encoding/json""fmt""/hyperledger/fabric-contract-api-go/contractapi")//产品溯源结构typeProductTracestruct{ProductIDstring`json:"productId"`Namestring`json:"name"`BatchNumberstring`json:"batchNumber"`ProductionInfoProductionRecord`json:"productionInfo"`LogisticsInfo[]LogisticsRecord`json:"logisticsInfo"`SalesInfoSalesRecord`json:"salesInfo"`Timestampstring`json:"timestamp"`CurrentOwnerstring`json:"currentOwner"`IPFSHashstring`json:"ipfsHash"`//关联IPFS文件}typeProductionRecordstruct{ProducerIDstring`json:"producerId"`ProductionDatestring`json:"productionDate"`QualityScorefloat64`json:"qualityScore"`Inspectorstring`json:"inspector"`RawMaterials[]string`json:"rawMaterials"`}typeLogisticsRecordstruct{LogisticIDstring`json:"logisticId"`Fromstring`json:"from"`Tostring`json:"to"`StartTimestring`json:"startTime"`EndTimestring`json:"endTime"`Temperaturestring`json:"temperature"`//冷链运输Humiditystring`json:"humidity"`}//智能合约主体typeSupplyChainContractstruct{contractapi.Contract}//创建产品溯源记录func(sSupplyChainContract)CreateProduct(ctxcontractapi.TransactionContextInterface,productIdstring,namestring,batchNumberstring)error{trace:=ProductTrace{ProductID:productId,Name:name,BatchNumber:batchNumber,Timestamp:ctx.GetStub().GetTxTimestamp().String(),}traceAsBytes,_:=json.Marshal(trace)returnctx.GetStub().PutState(productId,traceAsBytes)}//更新生产信息func(sSupplyChainContract)UpdateProductionInfo(ctxcontractapi.TransactionContextInterface,productIdstring,producerIdstring,qualityScorefloat64)error{trace,err:=s.GetProduct(ctx,productId)iferr!=nil{returnerr}trace.ProductionInfo=ProductionRecord{ProducerID:producerId,ProductionDate:ctx.GetStub().GetTxTimestamp().String(),QualityScore:qualityScore,}trace.CurrentOwner=producerIdtraceAsBytes,_:=json.Marshal(trace)returnctx.GetStub().PutState(productId,traceAsBytes)}//添加物流记录func(sSupplyChainContract)AddLogisticsRecord(ctxcontractapi.TransactionContextInterface,productIdstring,logisticIdstring,fromstring,tostring)error{trace,err:=s.GetProduct(ctx,productId)iferr!=nil{returnerr}record:=LogisticsRecord{LogisticID:logisticId,From:from,To:to,StartTime:ctx.GetStub().GetTxTimestamp().String(),}trace.LogisticsInfo=append(trace.LogisticsInfo,record)traceAsBytes,_:=json.Marshal(trace)returnctx.GetStub().PutState(productId,traceAsBytes)}//查询产品完整溯源信息func(sSupplyChainContract)GetProduct(ctxcontractapi.TransactionContextInterface,productIdstring)(ProductTrace,error){traceAsBytes,err:=ctx.GetStub().GetState(productId)iferr!=nil{returnnil,fmt.Errorf("failedtoreadfromworldstate:%v",err)}iftraceAsBytes==nil{returnnil,fmt.Errorf("product%sdoesnotexist",productId)}trace:=new(ProductTrace)_=json.Unmarshal(traceAsBytes,trace)returntrace,nil}//隐私保护:属性级加密记录func(sSupplyChainContract)CreatePrivateRecord(ctxcontractapi.TransactionContextInterface,collectionstring,keystring,valuestring)error{returnctx.GetStub().PutPrivateData(collection,key,[]byte(value))}```2.3IPFS集成服务```javascript//ipfs-service.jsconstIPFS=require('ipfs-http-client');constfs=require('fs');classIPFSService{constructor(){this.ipfs=IPFS.create({host:'ipfs.infura.io',port:5001,protocol:'https',headers:{authorization:`Bearer${process.env.IPFS_API_KEY}`}});}//上传文件到IPFSasyncuploadFile(filePath){constfile=fs.readFileSync(filePath);constadded=awaitthis.ipfs.add({path:filePath,content:file});//返回CID(内容标识符)return{cid:added.cid.toString(),size:added.size,path:added.path};}//从IPFS获取文件asyncgetFile(cid){constchunks=[];forawait(constchunkofthis.ipfs.cat(cid)){chunks.push(chunk);}returnBuffer.concat(chunks);}//存储JSON数据asyncstoreJSON(data){constcontent=JSON.stringify(data);constresult=awaitthis.ipfs.add(content);returnresult.cid.toString();}}module.exports=IPFSService;```2.4防伪二维码系统```javascript//qrcode-service.jsconstQRCode=require('qrcode');constCryptoJS=require('crypto-js');classQRCodeService{constructor(secretKey){this.secretKey=secretKey;}//生成防伪二维码asyncgenerateAntiFakeQR(productId,producerId,timestamp){//构造防伪数据constdata={productId:productId,producerId:producerId,timestamp:timestamp,nonce:this.generateNonce()};//计算防伪签名constsignature=this.generateSignature(data);data.signature=signature;//生成二维码constqrData=JSON.stringify(data);constqrCodeUrl=awaitQRCode.toDataURL(qrData,{width:300,margin:2,color:{dark:'000000',light:'ffffff'}});//将二维码数据上链consttxData={productId:productId,qrHash:CryptoJS.SHA256(qrData).toString(),timestamp:timestamp,status:'ACTIVE'};return{qrCodeUrl:qrCodeUrl,qrData:qrData,txData:txData};}//验证二维码verifyQRCode(qrData,signature){constdata=JSON.parse(qrData);constexpectedSignature=this.generateSignature(data);//验证签名if(signature!==expectedSignature){return{valid:false,reason:'签名无效'};}//验证时间戳(防止重放攻击)constnow=Date.now();constqrTime=newDate(data.timestamp).getTime();if(now-qrTime>2460601000){return{valid:false,reason:'二维码已过期'};}//检查链上状态constchainStatus=this.checkChainStatus(ductId);return{valid:chainStatus.active,productId:ductId,producerId:ducerId,verifyTime:newDate().toISOString()};}generateSignature(data){conststr=`${ductId}${ducerId}${data.timestamp}${data.nonce}`;returnCryptoJS.HmacSHA256(str,this.secretKey).toString();}generateNonce(){returnCryptoJS.lib.WordArray.random(16).toString();}}```2.5前端Vue.js组件设计```vue<!--ProductTrace.vue--><template><divclass="product-trace-container"><!--溯源信息展示--><divclass="trace-timeline"><divv-for="(step,index)intraceSteps":key="index"class="timeline-step":class="step.status"><divclass="step-icon">{{step.icon}}</div><divclass="step-content"><h4>{{step.title}}</h4><p>{{step.description}}</p><spanclass="step-time">{{step.time}}</span><!--质检报告预览--><divv-if="step.reportCID"class="report-preview"><button@click="viewReport(step.reportCID)">📄查看质检报告</button></div></div></div></div><!--二维码验证--><divclass="verification-section"><h3>产品验证</h3><divclass="qr-scanner"><videoref="qrVideo"width="300"height="300"></video><button@click="startScan">开始扫描</button></div><divclass="verification-result"v-if="verifyResult"><h4:class="verifyResult.valid?'valid':'invalid'">{{verifyResult.valid?'✓验证通过':'✗验证失败'}}</h4><pv-if="!verifyResult.valid">{{verifyResult.reason}}</p></div></div><!--供应链地图--><divclass="supply-chain-map"><h3>物流轨迹</h3><divref="mapContainer"class="map-container"></div></div></div></template><script>import{QrScanner}from'qr-scanner';importLfrom'leaflet';import'leaflet/dist/leaflet.css';import{fabricAPI}from'@/api/fabric';import{ipfsAPI}from'@/api/ipfs';exportdefault{name:'ProductTrace',props:['productId'],data(){return{traceSteps:[],verifyResult:null,map:null};},asyncmounted(){awaitthis.loadTraceInfo();this.initMap();},methods:{asyncloadTraceInfo(){try{consttrace=awaitfabricAPI.getProductTrace(ductId);this.traceSteps=this.formatTraceSteps(trace);//加载IPFS文件if(trace.IPFSHash){awaitthis.loadIPFSFiles(trace.IPFSHash);}}catch(error){console.error('加载溯源信息失败:',error);}},formatTraceSteps(trace){return[{title:'原材料采购',description:`供应商:${ductionInfo?.rawMaterials?.join(',')}`,time:ductionInfo?.productionDate,status:'completed',icon:'🏭'},{title:'生产加工',description:`生产商:${ductionInfo?.producerId}`,time:ductionInfo?.productionDate,status:'completed',reportCID:ductionInfo?.qualityReportCID,icon:'⚙️'},//...其他步骤];},asyncviewReport(cid){constreport=awaitipfsAPI.getFile(cid);this.openPDF(report);},asyncstartScan(){constqrScanner=newQrScanner(this.$refs.qrVideo,result=>this.handleScan(result),{highlightScanRegion:true});awaitqrScanner.start();},asynchandleScan(result){constverifyResult=awaitfabricAPI.verifyProductQR(result);this.verifyResult=verifyResult;if(verifyResult.valid){awaitthis.loadTraceInfo();}},initMap(){this.map=L.map(this.$refs.mapContainer).setView([39.9042,116.4074],5);L.tileLayer('https://{s}./{z}/{x}/{y}.png',{attribution:'©OpenStreetMapcontributors'}).addTo(this.map);//添加物流轨迹this.addLogisticsTrack();},addLogisticsTrack(){//根据物流信息添加轨迹this.traceSteps.forEach(step=>{if(step.location){L.marker(step.location.coords).bindPopup(step.title).addTo(this.map);}});}}};</script><stylescoped>.product-trace-container{max-width:1200px;margin:0auto;padding:20px;}.trace-timeline{position:relative;padding-left:30px;}.timeline-step{position:relative;margin-bottom:30px;padding:20px;border-left:3pxsolid3498db;background:f8f9fa;border-radius:8px;}.step-icon{position:absolute;left:-20px;top:20px;width:40px;height:40px;background:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:20px;border:2pxsolid3498db;}.verification-section{margin-top:40px;padding:20px;border:1pxsolide0e0e0;border-radius:10px;}.qr-scanner{margin:20px0;}.valid{color:27ae60;}.invalid{color:e74c3c;}.map-container{height:400px;border-radius:10px;margin-top:20px;}</style>```2.6API网关设计```javascript//app.js-ExpressAPI网关constexpress=require('express');constbodyParser=require('body-parser');const{Gateway,Wallets}=require('fabric-network');constIPFSService=require('./services/ipfs-service');constQRCodeService=require('./services/qrcode-service');constapp=express();app.use(bodyParser.json());//Fabric连接池constfabricConnections=newMap();//初始化Fabric网关asyncfunctioninitGateway(orgName){constwallet=awaitWallets.newFileSystemWallet(`./wallet/${orgName}`);constgateway=newGateway();constconnectionProfile=require(`./profiles/connection-${orgName}.json`);awaitgateway.connect(connectionProfile,{wallet,identity:'admin',discovery:{enabled:true,asLocalhost:true}});returngateway;}//RESTfulAPI端点app.post('/api/product/create',async(req,res)=>{try{const{productId,name,batchNumber,producerId}=req.body;constgateway=awaitinitGateway('producer');constnetwork=awaitgateway.getNetwork('supplychain-channel');constcontract=network.getContract('supplychain-contract');//调用链码awaitcontract.submitTransaction('CreateProduct',productId,name,batchNumber);//生成二维码constqrService=newQRCodeService(process.env.SECRET_KEY);constqrResult=awaitqrService.generateAntiFakeQR(productId,producerId,newDate().toISOString());res.json({success:true,productId,qrCode:qrResult.qrCodeUrl,txId:contract.getTransactionId()});}catch(error){res.status(500).json({error:error.message});}});app.get('/api/product/trace/:productId',async(req,res)=>{try{const{productId}=req.params;constgateway=awaitinitGateway('consumer');constnetwork=awaitgateway.getNetwork('supplychain-channel');constcontract=network.getContract('supplychain-contract');constresult=awaitcontract.evaluateTransaction('GetProduct',productId);consttraceInfo=JSON.parse(result.toString());//如果需要,从IPFS加载文件if(traceInfo.IPFSHash){constipfs=newIPFSService();constfile=awaitipfs.getFile(traceInfo.IPFSHash);traceInfo.attachments=file;}res.json(traceInfo);}catch(error){res.status(500).json({error:error.message});}});//文件上传到IPFSapp.post('/api/ipfs/upload',async(req,res)=>{try{constipfs=newIPFSService();const{file}=req.body;constresult=awaitipfs.uploadFile(file);res.json({cid:result.cid,url:`https://ipfs.io/ipfs/${result.cid}`});}catch(error){res.status(500).json({error:error.message});}});//二维码验证app.post('/api/product/verify',async(req,res)=>{try{const{qrData,signature}=req.body;constqrService=newQRCodeService(process.env.SECRET_KEY);constresult=qrService.verifyQRCode(qrData,signature);res.json(result);}catch(error){res.status(500).json({error:error.message});}});//启动服务器constPORT=process.env.PORT||3000;app.listen(PORT,()=>{console.log(`APIServerrunningonport${PORT}`);});```2.7隐私保护机制```go//privacy_contract.go-隐私保护链码packagemainimport("encoding/json""/hyperledger/fabric-contract-api-go/contractapi")typePrivacyContractstruct{contractapi.Contract}//私有数据集合配置varprivateDataCollections=[]contractapi.CollectionConfig{{Name:"collectionProducerPrivate",Policy:"OR('ProducerMSP.member')",//仅生产商可见RequiredPeerCount:0,MaxPeerCount:3,BlockToLive:1000000,},{Name:"collectionLogisticsPrivate",Policy:"OR('LogisticsMSP.member')",//仅物流商可见RequiredPeerCount:0,MaxPeerCount:3,BlockToLive:1000000,},}//存储私有数据func(pcPrivacyContract)StorePrivateProductionData(ctxcontractapi.TransactionContextInterface,productIdstring,coststring,formulastring)error{privateData:=map[string]string{"productionCost":cost,"secretFormula":formula,}dataJSON,_:=json.Marshal(privateData)//存储到私有数据集合returnctx.GetStub().PutPrivateData("collectionProducerPrivate",productId,dataJSON)}//零知识证明验证func(pcPrivacyContract)VerifyQualityWithZKP(ctxcontractapi.TransactionContextInterface,productIdstring,proofstring)(bool,error){//验证零知识证明(简化示例)//实际应集成zk-SNARKs或BulletproofsisValid:=pc.verifyZKProof(proof)ifisValid{//在公开账本上记录验证结果publicData:=map[string]interface{}{"productId":productId,"qualityVerified":true,"verificationTime":ctx.GetStub().GetTxTimestamp().String(),"proofHash":pc.hashProof(proof),}dataJSON,_:=json.Marshal(publicData)ctx.GetStub().PutState(productId+"_quality",dataJSON)}returnisValid,nil}```3.部署与运维方案3.1Docker编排文件```docker-composedocker-compose.yamlversion:'3.8'services:FabricCA服务ca-producer:image:hyperledger/fabric-ca:1.5environment:-FABRIC_CA_SERVER_CA_NAME=ca-producer-FABRIC_CA_SERVER_TLS_ENABLED=trueports:-"7054:7054"volumes:-./organizations/fabric-ca/producer:/etc/hyperledger/fabric-ca-serverPeer节点peer0-producer:image:hyperledger/fabric-peer:2.4environment:-CORE_PEER_ID=peer0-producer-CORE_PEER_ADDRESS=peer0-producer:7051-CORE_PEER_CHAINCODEADDRESS=peer0-producer:7052depends_on:-ca-producerIPFS节点ipfs-node:image:ipfs/go-ipfs:latestports:-"4001:4001"P2P-"5001:5001"API-"8080:8080"Gatewayvolumes:-./ipfs-data:/data/ipfs应用后端backend-api:build:./backendports:-"3000:3000"environment:-FABRIC_GATEWAY_URL=grpc://peer0-producer:7051-IPFS_API_URL=http://ipfs-node:5001depends_on:-peer0-producer-ipfs-node前端应用frontend-app:build:./frontendports:-"8080:80"depends_on:-backend-api```3.2系统监控```yamlprometheus.ymlscrape_configs:-job_name:'fabric'static_configs:-targets:['peer0-producer:9443']labels:group:'fabric-peers'-job_name:'application'static_configs:-targets:['backend-api:3000']labels:service:'supplychain-api'```4.安全设计4.1安全策略1.TLS加密通信:所有节点间通信使用TLS1.32.属性基加密(ABE):敏感数据字段级加密3.访问控制:基于角色的链码访问控制4.审计日志:所有操作记录到不可篡改的审计链5.防DDOS:API网关集成速率限制4.2密钥管理```javascript//key-management.jsconst{KeyManagementServiceClient}=require('@google-cloud/kms');classKeyManager{constructor(){this.kmsClient=newKeyManagementServiceClient();this.keyRingId='supplychain-keyring';this.locationId='global';}//轮换加密密钥asyncrotateKey(keyId){const[newVersion]=awaitthis.kmsClient.createCryptoKeyVersion({parent:this.kmsClient.cryptoKeyPath(process.env.GCP_PROJECT,this.locationId,this.keyRingId,keyId)});returnnewV;}//数据加密asyncencryptData(plaintext,keyId){const[result]=awaitthis.kmsClient.encrypt({name:keyId,plaintext:Buffer.from(plaintext)});returnresult.ciphertext.toString('base64');}}```5.性能优化5.1缓存策略```javascript//cache-service.jsconstRedis=require('redis');constclient=Redis.createClient();classCacheService{constructor(){this.client=client;}//缓存溯源查询结果asynccacheTrace(productId,traceData,ttl=300){constkey=`trace:${productId}`;awaitthis.client.setex(key,ttl,JSON.stringify(traceData));}//读取缓存asyncgetCachedTrace(productId){constkey=`trace:${productId}`;constdata=awaitthis.client.get(key);returndata?JSON.parse(data):null;}}```5.2批量处理```go//batch_operations.gofunc(sSupplyChainContract)BatchCreateProducts(ctxcontractapi.TransactionContextInterface,products[]ProductTrace)error{for_,product:=rangeproducts{productAsBytes,_:=json.Marshal(product)ctx.GetStub().PutState(product.ProductID,productAsBytes)}returnnil}```6.测试方案6.1单元测试```javascript//chaincode.test.jsconst{ChaincodeMockStub}=require('@theledger/fabric-mock-stub');const{SupplyChainContract}=require('./chaincode');describe('SupplyChainChaincode',()=>{letchaincode;letmockStub;beforeEach(()=>{chaincode=newSupplyChainContract();mockStub=newChaincodeMockStub('mock-stub',chaincode);});it('shouldcreateproducttrace',async()=>{constresponse=awaitmockStub.mockInvoke('tx1',['CreateProduct','PROD001','iPhone13','BATCH2023-001']);expect(response.status).toBe(200);conststate=awaitmockStub.getState('PROD001');expect(JSON.parse(state.toString()).ProductID).toBe('PROD001');});});```7.实施路线图阶段1:基础搭建(1-2个月)1.搭建Fabric测试网络2.实现核心链码3.开发基础API接口4.集成IPFS存储阶段2:功能完善(2-3个月)1.实现隐私保护机制2.开发二维码系统3.完成前端界面4.集成企业身份认证阶段3:优化扩展(1-2个月)1.性能优化和压力测试2.多链架构扩展3.AI质检报告分析集成4.移动端应用开发阶段4:生产部署(1个月)1.生产环境部署2.安全审计3.运维监控搭建4.用户培训8.成本估算项目预估成本基础设施(云服务器)$2000/月Fabric证书服务$500/月IPFS存储网络$300/月开发人力(6人月)$120,000安全审计$20,000总计首年投入~$150,0009.风险与应对风险概率影响应对策略链码漏洞中高第三方安全审计,漏洞奖励计划性能瓶颈中中水平扩展,缓存优化数据隐私法规高高GDPR合规设计,数据本地化企业采纳度低中高试点项目,ROI分析展示基于区块链的供应链溯源系统-软件介绍📋系统概述链源通是基于HyperledgerFabric联盟链技术构建的企业级供应链溯源解决方案,致力于为生产制造、物流运输、零售销售等企业提供安全、可信、透明的商品全生命周期追踪服务。系统将区块链的不可篡改性、IPFS分布式存储的高效性以及先进的加密技术相结合,打造新一代智慧供应链管理平台。🎯核心价值建立信任体系-不可篡改的记录:所有溯源信息上链存储,确保数据真实可靠-全流程透明:从原料采购到最终消费,完整追溯路径可视化展示-多方共识验证:供应链各参与方共同维护,数据可信度最大化提升运营效率-自动化流程:智能合约自动执行业务规则,减少人工干预-实时状态追踪:物流节点实时更新,异常情况及时预警-数据统一管理:打破信息孤岛,实现供应链数据协同增强品牌价值-防伪保真:唯一二维码验证,有效打击假冒伪劣-品质证明:权威质检报告上链,提升消费者信任度-绿色透明:展示环保和社会责任实践,增强品牌形象✨核心功能1.商品全链路溯源-生产环节:记录原材料来源、生产工艺、质量检测-物流环节:追踪运输轨迹、环境条件(温湿度)、交接验证-销售环节:记录经销商信息、销售时间、消费者查询-可视化展示:时间轴方式直观展示商品流转全过程2.智能合约管理-自动化执行:自动触发物流状态更新、支付结算等操作-规则自定义:企业可根据业务需求灵活配置合约规则-多方协作:不同参与方按照预设权限协同操作3.防伪验证系统-动态二维码:每件商品生成唯一加密二维码-多重验证:支持扫码验证、网站查询、APP验证多种方式-防复制设计:采用时间戳和一次性随机数防止重放攻击4.数据隐私保护-分层权限:不同角色查
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年广东广州龙涛学校九年级(上)期末化学试题含答案
- SRE工程师面试题及答案详解
- 航空机务维修工程师面试流程与考试要点解析
- 水利设施防雷检测岗位考试题库
- 广药集团供应链经理供应链管理知识考试题含答案
- 能源设施管理考试题库
- 困难职工帮扶中心副主任面试题库含答案
- 市场营销策划经理面试题详解
- 县局返聘协议书
- 工服供销合同范本
- 羊的品种课件
- GB/T 19867.6-2016激光-电弧复合焊接工艺规程
- 第八章散粮装卸工艺
- PET-成像原理扫描模式和图像分析-课件
- 体外诊断试剂工作程序-全套
- 施工企业管理课件
- 《大卫-不可以》绘本
- DB32 4181-2021 行政执法案卷制作及评查规范
- JJF (苏) 178-2015 防潮柜温度、湿度校准规范-(现行有效)
- 创伤急救四大技术共46张课件
- 航海基础知识基础概念
评论
0/150
提交评论