GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)賽題第2套-2023年全國(guó)職業(yè)院校技能大賽擬設(shè)賽項(xiàng)賽題_第1頁(yè)
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)賽題第2套-2023年全國(guó)職業(yè)院校技能大賽擬設(shè)賽項(xiàng)賽題_第2頁(yè)
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)賽題第2套-2023年全國(guó)職業(yè)院校技能大賽擬設(shè)賽項(xiàng)賽題_第3頁(yè)
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)賽題第2套-2023年全國(guó)職業(yè)院校技能大賽擬設(shè)賽項(xiàng)賽題_第4頁(yè)
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)賽題第2套-2023年全國(guó)職業(yè)院校技能大賽擬設(shè)賽項(xiàng)賽題_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2023年全國(guó)職業(yè)院校技能大賽高職組“區(qū)塊鏈技術(shù)應(yīng)用”賽項(xiàng)賽卷(2卷)任務(wù)書(shū)參賽隊(duì)編號(hào):背景描述在供應(yīng)鏈金融這個(gè)萬(wàn)億級(jí)市場(chǎng)中,區(qū)塊鏈正在快速商業(yè)化落地,助力產(chǎn)業(yè)革新。基于區(qū)塊鏈的供應(yīng)鏈金融業(yè)務(wù)的理念是:以源自企業(yè)的應(yīng)收賬款為底層資產(chǎn),通過(guò)區(qū)塊鏈技術(shù)實(shí)現(xiàn)債券憑證的轉(zhuǎn)讓拆分。其中,在原始資產(chǎn)上鏈時(shí),通過(guò)對(duì)應(yīng)收賬款進(jìn)行審核校驗(yàn),確認(rèn)貿(mào)易關(guān)系和身份真實(shí)有效,和保證上鏈資產(chǎn)的真實(shí)可信。再者,債權(quán)憑證可基于供應(yīng)鏈進(jìn)行層層拆分與流轉(zhuǎn),都可完整追溯到最底層資產(chǎn),以實(shí)現(xiàn)核心企業(yè)和金融機(jī)構(gòu)對(duì)供應(yīng)商的“信用穿透”。某公司規(guī)劃開(kāi)發(fā)一個(gè)區(qū)塊鏈供應(yīng)鏈金融平臺(tái),包括核心企業(yè)、供應(yīng)商、銀行等角色,通過(guò)智能合約代碼逐步構(gòu)建區(qū)塊鏈供應(yīng)鏈金融平臺(tái)的基本功能,實(shí)現(xiàn)銀行向核心企業(yè)提供授信并發(fā)行數(shù)字憑證,企業(yè)與企業(yè)之間轉(zhuǎn)讓數(shù)字憑證。此外需要完成區(qū)塊鏈供應(yīng)鏈金融平臺(tái)的前后端,實(shí)現(xiàn)基本的業(yè)務(wù)邏輯。模塊一:區(qū)塊鏈產(chǎn)品方案設(shè)計(jì)及系統(tǒng)運(yùn)維(35分)選手完成本模塊的任務(wù)后,將任務(wù)中設(shè)計(jì)結(jié)果、運(yùn)行代碼、運(yùn)行結(jié)果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術(shù)應(yīng)用賽\重命名為工位號(hào)\模塊一提交結(jié)果.docx】中對(duì)應(yīng)的任務(wù)序號(hào)下。任務(wù)1-1:區(qū)塊鏈產(chǎn)品需求分析與方案設(shè)計(jì)(10分)本環(huán)節(jié)需要依據(jù)項(xiàng)目背景完成需求分析與方案設(shè)計(jì),具體要求如下:1.依據(jù)給定供應(yīng)鏈金融管理系統(tǒng)的業(yè)務(wù)架構(gòu)圖,對(duì)考題進(jìn)行業(yè)務(wù)分析,盡可能多的去考慮一個(gè)業(yè)務(wù)系統(tǒng)所需要的模塊,使用Visio或思維導(dǎo)圖工具展現(xiàn)本系統(tǒng)的基本設(shè)計(jì)概念和處理流程,要求分為區(qū)塊鏈供應(yīng)鏈業(yè)務(wù)平臺(tái)和支撐平臺(tái)兩個(gè)部分;(4分)2.根據(jù)供應(yīng)鏈系統(tǒng)設(shè)計(jì),在系統(tǒng)中分別包括用戶和憑證票據(jù)管理功能,在融資憑證上鏈過(guò)程中需要包括銀行、核心企業(yè)、供應(yīng)商公司的基本管理功能。根據(jù)描述,設(shè)計(jì)區(qū)塊鏈系統(tǒng)的總體功能概覽圖。(3分)3.整合上述設(shè)計(jì)內(nèi)容,完善“供應(yīng)鏈金融管理系統(tǒng)概要設(shè)計(jì)說(shuō)明書(shū).doc”,具體工作內(nèi)容如下:將設(shè)計(jì)內(nèi)容根據(jù)說(shuō)明書(shū)中模塊需求進(jìn)行補(bǔ)充,并完善概要設(shè)計(jì)說(shuō)明書(shū)中的“需求概要”(1分)完善說(shuō)明書(shū)中接口說(shuō)明部分內(nèi)容。(2分)任務(wù)1-2:區(qū)塊鏈系統(tǒng)部署與運(yùn)維(15分)圍繞供應(yīng)鏈金融區(qū)塊鏈平臺(tái)部署與運(yùn)維需求,進(jìn)行項(xiàng)目相關(guān)系統(tǒng)、節(jié)點(diǎn)以及管理工具的部署工作。通過(guò)通過(guò)監(jiān)控工具完成對(duì)網(wǎng)絡(luò)、節(jié)點(diǎn)服務(wù)的監(jiān)控。最終利用業(yè)務(wù)需求規(guī)范,完成系統(tǒng)日志、網(wǎng)絡(luò)參數(shù)、節(jié)點(diǎn)服務(wù)等系統(tǒng)結(jié)構(gòu)的維護(hù)。1.根據(jù)參數(shù)與端口設(shè)置要求,部署區(qū)塊鏈系統(tǒng)并驗(yàn)證;2.根據(jù)參數(shù)與端口設(shè)置要求,部署區(qū)塊鏈網(wǎng)絡(luò)管理平臺(tái)并驗(yàn)證;3.基于區(qū)塊鏈系統(tǒng)相關(guān)管理平臺(tái),按照任務(wù)指南實(shí)施系統(tǒng)運(yùn)維工作并驗(yàn)證。4.基于區(qū)塊鏈系統(tǒng)相關(guān)監(jiān)管工具,按照任務(wù)指南對(duì)區(qū)塊鏈系統(tǒng)進(jìn)行監(jiān)管。子任務(wù)1-2-1:搭建區(qū)塊鏈系統(tǒng)并驗(yàn)證(4分)基于給定服務(wù)器環(huán)境以及軟件(地址“/root/tools”),使用Docker以默認(rèn)配置安裝單機(jī)4節(jié)點(diǎn)的區(qū)塊鏈系統(tǒng),并完成控制臺(tái)工具的部署:完成系統(tǒng)搭建配置與啟動(dòng)。(1分)使用基于Docker命令查看區(qū)塊鏈系統(tǒng)狀態(tài)。(1分)檢查區(qū)塊鏈系統(tǒng)節(jié)點(diǎn)node0連接狀態(tài)輸出。(1分)配置控制臺(tái),管理相關(guān)證書(shū)并啟動(dòng)。(1分)子任務(wù)1-2-2:區(qū)塊鏈管理平臺(tái)部署與驗(yàn)證(4分)基于給定服務(wù)器環(huán)境以及軟件(地址“/root/tools”),按要求部署區(qū)塊鏈管理平臺(tái),具體工作如下:配置Mysql數(shù)據(jù)庫(kù)(1分)配置管理平臺(tái)連接區(qū)塊鏈系統(tǒng)(1分)使用命令啟動(dòng)管理平臺(tái)服務(wù)(1分)驗(yàn)證管理平臺(tái)啟動(dòng)情況(1分)子任務(wù)1-2-3:區(qū)塊鏈系統(tǒng)節(jié)點(diǎn)運(yùn)維(3分)基于已完成的區(qū)塊鏈系統(tǒng)與管理平臺(tái)搭建工作,開(kāi)展相關(guān)節(jié)點(diǎn)運(yùn)維工作:生成新節(jié)點(diǎn)(node4),啟動(dòng)并檢查(1分)修改新節(jié)點(diǎn)配置,并查看節(jié)點(diǎn)的nodeid(1分)將新節(jié)點(diǎn)作為觀察節(jié)點(diǎn)加入group1當(dāng)中,并檢查是否加入成功(1分)子任務(wù)1-2-4:區(qū)塊鏈系統(tǒng)管理平臺(tái)運(yùn)維(4分)基于已部署的區(qū)塊鏈系統(tǒng)管理平臺(tái),進(jìn)行系統(tǒng)相關(guān)運(yùn)維工作:基于管理平臺(tái)功能頁(yè)面,添加新主機(jī)(2分)基于管理平臺(tái)功能頁(yè)面,修改新節(jié)點(diǎn)(node4)節(jié)點(diǎn)狀態(tài),并監(jiān)控。(2分)任務(wù)1-3:區(qū)塊鏈系統(tǒng)測(cè)試(10分)設(shè)計(jì)對(duì)區(qū)塊鏈系統(tǒng)的測(cè)試流程;結(jié)合實(shí)際業(yè)務(wù)需求,調(diào)用部署的智能合約中進(jìn)行系統(tǒng)測(cè)試、性能測(cè)試等;根據(jù)業(yè)務(wù)需求,分析并且修復(fù)給定智能合約中的安全漏洞。利用模擬業(yè)務(wù)和測(cè)試工具來(lái)完成對(duì)區(qū)塊鏈系統(tǒng)服務(wù)數(shù)據(jù)的測(cè)試。1.基于WeBASE的部署腳本完成WeBASE環(huán)境搭建以及搭建結(jié)果驗(yàn)證,最后將執(zhí)行結(jié)果截圖保存。(3分)實(shí)現(xiàn)WeBASE平臺(tái)部署。(1分)實(shí)現(xiàn)webase.sgin功能啟動(dòng)情況驗(yàn)證。(1分)webase-node-mgr進(jìn)程啟動(dòng)情況驗(yàn)證和瀏覽器驗(yàn)證。(1分)2.智能合約安全漏洞測(cè)試。(7分)有如下智能合約:pragmasolidity^0.7.6;contractTimeLock{mapping(address=>uint)publicbalances;mapping(address=>uint)publiclockTime;functiondeposit()externalpayable{balances[msg.sender]+=msg.value;lockTime[msg.sender]=block.timestamp+1weeks;}functionincreaseLockTime(uint_secondsToIncrease)public{lockTime[msg.sender]+=_secondsToIncrease;}functionwithdraw()public{require(balances[msg.sender]>0,"Insufficientfunds");require(block.timestamp>lockTime[msg.sender],"Locktimenotexpired");uintamount=balances[msg.sender];balances[msg.sender]=0;(boolsent,)=msg.sender.call{value:amount}("");require(sent,"FailedtosendEther");}}contractAttack{TimeLocktimeLock;constructor(TimeLock_timeLock){timeLock=TimeLock(_timeLock);}fallback()externalpayable{}functionattack()publicpayable{timeLock.deposit{value:msg.value}();timeLock.increaseLockTime(type(uint).max+1-timeLock.lockTime(address(this)));timeLock.withdraw();}}如上代碼主要實(shí)現(xiàn)功能為規(guī)定了轉(zhuǎn)賬凍結(jié)時(shí)間,在凍結(jié)時(shí)間內(nèi)用戶不能提取存款的金額。分析智能合約中存在問(wèn)題,并說(shuō)明危害。(2分)根據(jù)truffle工具中的代碼文件,編寫(xiě)測(cè)試用例,復(fù)現(xiàn)智能合約中存在的漏洞。(3分)創(chuàng)建新的智能合約,修復(fù)其中問(wèn)題,說(shuō)明修復(fù)內(nèi)容并測(cè)試。(2分)

模塊二:智能合約開(kāi)發(fā)與測(cè)試(30分)選手完成本模塊的任務(wù)后,將任務(wù)中設(shè)計(jì)結(jié)果、運(yùn)行代碼、運(yùn)行結(jié)果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術(shù)應(yīng)用賽\重命名為工位號(hào)\模塊二提交結(jié)果.docx】中對(duì)應(yīng)的任務(wù)序號(hào)下。任務(wù)2-1:智能合約設(shè)計(jì)(5分)根據(jù)區(qū)塊鏈供應(yīng)鏈金融應(yīng)用需求分析和方案設(shè)計(jì)文檔的描述,編寫(xiě)該區(qū)塊鏈產(chǎn)品的智能合約功能需求文檔,以及設(shè)計(jì)該智能合約UML圖,具體要求如下:1.編寫(xiě)區(qū)塊鏈供應(yīng)鏈金融智能合約功能需求文檔(2分)根據(jù)區(qū)塊鏈供應(yīng)鏈金融產(chǎn)品項(xiàng)目背景和需求分析,編寫(xiě)該區(qū)塊鏈供應(yīng)鏈金融產(chǎn)品的智能合約功能需求文檔;2.完成區(qū)塊鏈供應(yīng)鏈金融智能合約的設(shè)計(jì)圖(3分)設(shè)計(jì)區(qū)塊鏈供應(yīng)鏈金融智能合約接口,畫(huà)出區(qū)塊鏈供應(yīng)鏈金融智能合約的角色UML用例圖,以及畫(huà)出區(qū)塊鏈供應(yīng)鏈金融各角色智能合約關(guān)系的時(shí)序圖。任務(wù)2-2:智能合約開(kāi)發(fā)(20分)使用Solidity語(yǔ)言完成智能合約開(kāi)發(fā)、部署和調(diào)用,要求如下:1.供應(yīng)鏈金融實(shí)體信息編碼(6分)

(1)編寫(xiě)供應(yīng)鏈金融智能合約的實(shí)體接口,完成實(shí)體通用數(shù)據(jù)的初始化,實(shí)現(xiàn)企業(yè)和票據(jù)實(shí)體信息上鏈的功能;(2分)表SupplyChain實(shí)體說(shuō)明名稱類型說(shuō)明companyNamestring公司名稱companyAddressaddress公司地址creditAssetuint信用資產(chǎn)acceptReceiptIndexuint[]接收的憑證sendReceiptIndexuint[]發(fā)送的憑證senderAddressaddress發(fā)送票據(jù)的地址accepterAddressaddress接收票據(jù)的地址receiptTypeuint8憑證類型transferTypeuint8交易類型amountuint交易數(shù)量

//公司信息結(jié)構(gòu)體structCompany{//①公司名稱//②公司地址//③信用資產(chǎn)//④接收的憑證//⑤發(fā)送的憑證}//數(shù)字發(fā)票收據(jù)信息structReceipt{//⑥發(fā)送票據(jù)的地址//⑦接收票據(jù)的地址//⑧憑證類型//⑨交易類型//⑩交易數(shù)量}(2)編寫(xiě)企業(yè)上鏈信息接口,實(shí)現(xiàn)供應(yīng)鏈金融的企業(yè)信息上鏈;(2分)functionaddCompany(stringname,addresscompanyAddress)returns(bool){//①實(shí)例化公司//②添加公司地址//③將實(shí)例化的公司添加到公司映射//④返回添加成功標(biāo)識(shí)}(3)基于給定的智能合約代碼以及注釋,完成銀行向企業(yè)交易的接口函數(shù);(2分)functionbankToCompanyReceipt(addresssenderAddress,addressaccepterAddress,uintamount,uint8receiptType)returns(uint){①判斷接收地址存在②實(shí)例化銀行③實(shí)例化公司if(keccak256(bank.bankName)==keccak256("")){return404001;}//確認(rèn)公司存在if(keccak256(panyName)==④){return404002;}if(bank.creditAsset<amount){return500001;}2.供應(yīng)鏈金融公司與公司接口編碼(6分)

(1)編寫(xiě)公司與公司之間進(jìn)行交易的歷史存證上鏈接口,實(shí)現(xiàn)公司與公司之間的交易功能;(2分)functioncompanyToCompanyReceipt(①,addressaccepterAddress,uintamount,uint8receiptType)returns(uint){//②接收地址判斷CompanymemorysenderCompany=companyMap[③];Companymemory④=companyMap[accepterAddress];//確認(rèn)發(fā)送公司存在if(keccak256(senderCompany.⑤)==keccak256("")){return404001;}//確認(rèn)接收公司存在if(keccak256(accepterCpanyName)==⑥){return404002;}//如果存證接收的公司資產(chǎn)小于存證數(shù)額,那么就不能交易發(fā)送存證if(accepterCompany.creditAsset⑦⑧){return500001;}

(2)編寫(xiě)創(chuàng)建存證的接口,實(shí)現(xiàn)創(chuàng)建存證的功能;(2分)ReceiptmemorynewReceipt=Receipt(①,accepterAddress,receiptType,2,amount);receiptIndex+=1;//記錄存證(存證Map,公司Map對(duì)應(yīng)地址的發(fā)送和接收存證列表)receiptMap[receiptIndex]=②;companyMap[③].sendReceiptIndex.push(receiptIndex);companyMap[accepterAddress].acceptReceiptIndex.push(④);(3)編寫(xiě)交易金額數(shù)量變化的接口,實(shí)現(xiàn)憑證交易雙方資金的變化功能;(2分)companyMap[①].creditAsset②amount;companyMap[③].creditAsset④amount;return200;}3.供應(yīng)鏈金融公司與銀行交易的接口編碼(4分)

(1)編寫(xiě)公司與銀行之間進(jìn)行交易的歷史存證上鏈接口,實(shí)現(xiàn)公司與銀行之間的交易功能;(2分)functioncompanyToBankReceipt(addresssenderAddress,①,uintamount,uint8receiptType)returns(uint){②Bankmemorybank=bankMap[senderAddress];CompanymemoryaccepterCompany=companyMap[③];//確認(rèn)發(fā)送公司存在if(keccak256(bank.bankName)==④){return404001;}//確認(rèn)接收公司存在if(keccak256(accepterCpanyName)==keccak256("")){return404002;}//如果存證接收的公司資產(chǎn)小于存證數(shù)額,那么就不能交易發(fā)送存證if(accepterCompany.creditAsset<amount){return500001;}

(2)編寫(xiě)創(chuàng)建存證的接口,實(shí)現(xiàn)創(chuàng)建存證的功能;(1分)//創(chuàng)建存證ReceiptmemorynewReceipt=Receipt(senderAddress,accepterAddress,①,3,amount);receiptIndex②1;receiptMap[③]=newReceipt;bankMap[senderAddress].sendReceiptIndex.push(receiptIndex);companyMap[accepterAddress].④;(3)編寫(xiě)交易金額數(shù)量變化的接口,實(shí)現(xiàn)憑證交易雙方資金的變化功能;(1分)bankMap[senderAddress].①②amount;companyMap[accepterAddress].③④amount;return200;}

合約編譯、部署和調(diào)用(4分)(1)解決代碼錯(cuò)誤和警告,正確編譯并部署合約,成功獲取部署的合約地址和abi。(1分)(2)調(diào)用食品溯源智能合約的接口,完整驗(yàn)證業(yè)務(wù)流程。(3分)

任務(wù)2-3:智能合約測(cè)試(5分)編寫(xiě)智能合約單元測(cè)試代碼并完成合約功能測(cè)試、性能測(cè)試,具體要求如下:1.配置區(qū)塊鏈網(wǎng)絡(luò)(1分)啟動(dòng)Ganache軟件,創(chuàng)建新的Wordspace,配置對(duì)外訪問(wèn)的RPC接口為7545,配置項(xiàng)目的truffle-config.js實(shí)現(xiàn)與新建Workspace的連接。2.補(bǔ)充給定基礎(chǔ)代碼中注釋提示的部署邏輯(1分)基于VSCODE加載的Truffle項(xiàng)目,補(bǔ)全位于test文件夾中HelloWorld.js文件預(yù)操作的方法。在測(cè)試文件中添加預(yù)定義的方法(在其他方法啟動(dòng)前使用)。3.補(bǔ)充代碼中注釋提示的測(cè)試邏輯(1分)基于VSCODE加載的Truffle項(xiàng)目,補(bǔ)全位于test文件夾中HelloWorld.js文件,添加測(cè)試用例,測(cè)試智能合約的get方法。4.測(cè)試hello.get()方法(1分)基于VSCODE加載的Truffle項(xiàng)目,補(bǔ)全位于test文件夾中HelloWorld.js文件,添加測(cè)試用例,測(cè)試智能合約的hello.get()方法。5.測(cè)試.should.equal進(jìn)行對(duì)比判斷(1分)基于VSCODE加載的Truffle項(xiàng)目,補(bǔ)全位于test文件夾中HelloWorld.js文件,添加測(cè)試用例,測(cè)試智能合約的equal字符串比較方法。

模塊三:區(qū)塊鏈應(yīng)用系統(tǒng)開(kāi)發(fā)(30分)選手完成本模塊的任務(wù)后,將任務(wù)中設(shè)計(jì)結(jié)果、運(yùn)行代碼、運(yùn)行結(jié)果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術(shù)應(yīng)用賽\重命名為工位號(hào)\模塊三提交結(jié)果.docx】中對(duì)應(yīng)的任務(wù)序號(hào)下。任務(wù)3-1:區(qū)塊鏈應(yīng)用前端功能開(kāi)發(fā)(10分)1.請(qǐng)基于前端系統(tǒng)的開(kāi)發(fā)模板,在注冊(cè)組件Register.vue文件中添加對(duì)應(yīng)的注冊(cè)邏輯代碼,實(shí)現(xiàn)對(duì)后端系統(tǒng)的注冊(cè)功能,并測(cè)試功能完整性(3分):本題目的具體要求如下:界面有明確的注冊(cè)相關(guān)提示語(yǔ)需要填寫(xiě)的項(xiàng)有組織名稱、區(qū)塊鏈地址、組織類型頁(yè)面需要有“返回”按鈕,可以跳轉(zhuǎn)到登錄頁(yè)面點(diǎn)擊“注冊(cè)”按鈕時(shí)需要檢查區(qū)塊鏈地址是否已輸入注冊(cè)成功后跳轉(zhuǎn)登錄頁(yè)面Register.vue:代碼片段1:<el-row><el-col:span="16":offset="4"><el-formlabel-width="100px"><h3>選手填寫(xiě)部分</h3><el-form-itemlabel="組織名稱:"><el-inputtype="primary"v-model="選手填寫(xiě)部分"></el-input></el-form-item><el-form-itemlabel="區(qū)塊鏈地址:"><el-inputtype="primary"v-model="選手填寫(xiě)部分"></el-input></el-form-item><el-form-itemlabel="組織類型:"><el-radio-groupv-model="orgType"><el-radio:label="1">公司</el-radio><el-radio:label="2">銀行</el-radio></el-radio-group></el-form-item></el-form></el-col></el-row><el-rowstyle="padding-bottom:20px"><el-buttontype="primary"選手填寫(xiě)部分>注冊(cè)</el-button><el-buttontype="primary"選手填寫(xiě)部分>返回</el-button></el-row>代碼片段2:register:function(){if(this.address==""){alert(選手填寫(xiě)部分)}else{letpostData={orgType:選手填寫(xiě)部分,username:選手填寫(xiě)部分,address:選手填寫(xiě)部分}//和后端交互選手填寫(xiě)部分}},代碼片段3:goback:function(){Type=''this.username=''this.address=''選手填寫(xiě)部分}2.請(qǐng)基于前端系統(tǒng)的開(kāi)發(fā)模板,在登錄組件Login.vue文件中添加對(duì)應(yīng)的登錄邏輯代碼,實(shí)現(xiàn)對(duì)后端系統(tǒng)的登錄功能,并測(cè)試功能完整性(3分):本題目的具體要求如下:界面有明確的登錄相關(guān)提示語(yǔ)需要填寫(xiě)的項(xiàng)有用戶地址、組織類型頁(yè)面需要有“注冊(cè)”按鈕,可以跳轉(zhuǎn)注冊(cè)頁(yè)面點(diǎn)擊“登錄”按鈕時(shí)需要檢查各個(gè)表項(xiàng)是否已輸入登錄成功后跳轉(zhuǎn)首頁(yè),路徑為“/home”Login.vue:代碼片段1:<el-col:span="16":offset="4"><el-formlabel-width="80px"><h1>供應(yīng)鏈金融應(yīng)用</h1><h3>選手填寫(xiě)部分</h3><el-form-itemlabel="用戶地址:"><el-inputtype="primary"v-model="選手填寫(xiě)部分"></el-input></el-form-item><el-form-itemlabel="組織類型:"><el-radio-groupv-model="選手填寫(xiě)部分"><el-radio:label="1">公司</el-radio><el-radio:label="2">銀行</el-radio></el-radio-group></el-form-item></el-form></el-col></el-row><el-rowstyle="margin-bottom:20px"><el-buttontype="primary"選手填寫(xiě)部分>登錄</el-button><el-buttontype="primary"選手填寫(xiě)部分>注冊(cè)</el-button></el-row></el-row>代碼片段2:login:function(){if(this.address==""){alert("選手填寫(xiě)部分")}elseif(Type==""){alert("選手填寫(xiě)部分")}else{letpostData={orgType:選手填寫(xiě)部分,address:選手填寫(xiě)部分}//與后端交互選手填寫(xiě)部分}},代碼片段3:register:function(){選手填寫(xiě)部分},3.請(qǐng)基于前端系統(tǒng)的開(kāi)發(fā)模板,在公司組件Company.vue文件中添加對(duì)應(yīng)的邏輯代碼,實(shí)現(xiàn)對(duì)后端系統(tǒng)的公司相關(guān)業(yè)務(wù)功能,并測(cè)試功能完整性(2分):Company.vue:代碼片段1:<el-row><el-col:span="20":offset="2"><el-table:data="companyList"style="font-size:20px"><el-table-columnprop="address"label="賬戶地址"></el-table-column><el-table-columnprop="name"label="公司名稱"></el-table-column><el-table-columnprop="amount"label="賬戶總額"></el-table-column><el-table-columnlabel="查看詳情"><templateslot-scope="scope"><el-buttontype="primary"@click="選手填寫(xiě)部分">查詢</el-button></template></el-table-column><el-table-columnprop="receiptType"label="轉(zhuǎn)賬"><templateslot-scope="scope"><el-buttontype="primary"@click="transfer(scope.row)">操作</el-button></template></el-table-column></el-table></el-col></el-row><el-row>代碼片段2:<el-dialogtitle="公司詳情":visible.sync="dialogVisible"><el-formlabel-width="100px"><el-form-itemlabel="賬戶地址:">{{選手填寫(xiě)部分}}</el-form-item><el-form-itemlabel="公司名稱:">{{選手填寫(xiě)部分}}</el-form-item><el-form-itemlabel="賬戶總額:">{{選手填寫(xiě)部分}}</el-form-item></el-form>代碼片段3:detail:function(queryAddress){this.dialogVisible=trueletaddress=選手填寫(xiě)部分this.axios.get(`選手填寫(xiě)部分?address=${address}&queryAddress=${queryAddress}`).then((response)=>{console.log(response)if(response.data.code==200){letinAddress=panyVO.address;letinName=選手填寫(xiě)部分;letinAmount=panyVO.amount;panyDetail={address:選手填寫(xiě)部分,name:選手填寫(xiě)部分,amount:選手填寫(xiě)部分,senderReceiptList:response.data.data.senderReceiptList,accepterReceiptList:response.data.data.accepterReceiptList}}else{alert(`請(qǐng)求內(nèi)容有誤,${response.data.data}`)}})},4.請(qǐng)基于前端系統(tǒng)的開(kāi)發(fā)模板,在銀行組件Bank.vue文件中添加對(duì)應(yīng)的邏輯代碼,實(shí)現(xiàn)對(duì)后端系統(tǒng)的銀行相關(guān)業(yè)務(wù)功能,并測(cè)試功能完整性(2分):Bank.vue:代碼片段1:<el-row><el-dialogtitle="交易(發(fā)送憑證)頁(yè)":visible.sync="transDialogVisible"width="30%"><el-formlabel-width="100px"><el-form-itemlabel="發(fā)送賬戶地址:">{{選手填寫(xiě)部分}}</el-form-item><el-form-itemlabel="接收賬戶地址:">{{選手填寫(xiě)部分}}</el-form-item><el-form-itemlabel="交易額:"><el-col:span="16":offset="4"><el-inputtype="primary"v-model="選手填寫(xiě)部分"></el-input></el-col></el-form-item><el-form-itemlabel="憑證類型:"><el-selectv-model="選手填寫(xiě)部分"placeholder="請(qǐng)選擇"><el-optionv-for="iteminoptions":key="item.value":label="item.label":value="item.value"></el-option></el-select></el-form-item></el-form><el-row><el-buttontype="primary"size="medium"@click="選手填寫(xiě)部分">確定</el-button></el-row></el-dialog></el-row>代碼片段2:executeTransaction:function(){letfuncName="companyToBankReceipt";if(this.transDetail.amount==選手填寫(xiě)部分){alert('交易額不能為空!')return}if(this.$cookies.get('orgType')==選手填寫(xiě)部分){alert('銀行不能給銀行發(fā)送憑證!')return}if(選手填寫(xiě)部分){alert("憑證發(fā)送賬戶和接收賬戶不能相一致!")return}this.axios.post(`/finance/transaction/${funcName}`,選手填寫(xiě)部分).then((response)=>{if(response.data.code==200){alert('憑證發(fā)送成功')this.query()this.transDialogVisible=false}else{alert(`憑證發(fā)送失敗,${response.data.data}`)}})},任務(wù)3-2:區(qū)塊鏈應(yīng)用后端功能開(kāi)發(fā)(20分)1.開(kāi)發(fā)區(qū)塊鏈供應(yīng)鏈金融應(yīng)用中后端系統(tǒng)中用戶功能模塊對(duì)應(yīng)的用戶注冊(cè)功能,根據(jù)前后代碼補(bǔ)充最合適的代碼,并測(cè)試功能完整性。(4分)OrgServiceImpl.java:/***注冊(cè)Service*RegisterBOregisterBO**/@OverridepublicResult<String>register(RegisterBOregisterBO){if(StrUtil.isEmpty(選手填寫(xiě)部分)||StrUtil.isEmpty(選手填寫(xiě)部分)||registerBO.getOrgType()==選手填寫(xiě)部分){returnResult.error(ResultVO.PARAM_EMPTY);}ListfuncParam=newArrayList();funcParam.add(選手填寫(xiě)部分);funcParam.add(選手填寫(xiě)部分);if(registerBO.getOrgType()==2){funcParam.add(BigInteger.valueOf(1000));}StringfuncName;if(registerBO.getOrgType()==2){funcName=選手填寫(xiě)部分;}else{funcName=選手填寫(xiě)部分;}String_result=weBASEUtils.funcPost(OWNER_ADDRESS,funcName,funcParam);JSONObject_resultJson=JSONUtil.parseObj(_result);if(_resultJson.containsKey("statusOK")==false||_resultJson.getBool("statusOK")!=true){//_resultJson.getInt("code")>0returnResult.error(ResultVO.選手填寫(xiě)部分);}returnResult.success("ok");}2.開(kāi)發(fā)區(qū)塊鏈供應(yīng)鏈金融應(yīng)用中后端系統(tǒng)中用戶功能模塊對(duì)應(yīng)的用戶登錄功能,根據(jù)前后代碼補(bǔ)充最合適的代碼,并測(cè)試功能完整性。(4分)OrgServiceImpl.java:/***登錄Service*LoginBOloginBO**/@OverridepublicResult<String>login(@RequestBodyLoginBOloginBO){if(StrUtil.isEmpty(loginBO.getAddress())){returnResult.error(ResultVO.PARAM_EMPTY);}ListfuncParam=newArrayList();funcParam.add(選手填寫(xiě)部分);StringfuncName;if(loginBO.getOrgType()==2){funcName=選手填寫(xiě)部分;}else{funcName=選手填寫(xiě)部分;}String_result=weBASEUtils.funcPost(選手填寫(xiě)部分,funcName,funcParam);JSONArray_resultJson=JSONUtil.parseArray(_result);if(StrUtil.isEmpty(_resultJson.get(0).toString())){returnResult.error(ResultVO.選手填寫(xiě)部分);}returnResult.success("ok");}3.開(kāi)發(fā)區(qū)塊鏈供應(yīng)鏈金融應(yīng)用的后端系統(tǒng)中查詢功能模塊對(duì)應(yīng)的查詢所有公司信息功能,根據(jù)前后代碼補(bǔ)充最合適的代碼,并測(cè)試功能完整性。(4分)QueryServiceImpl.java:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論