




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2024年“中銀杯”甘肅省職業(yè)院校技能大賽
高職學生組電子與信息大類
區(qū)塊鏈技術(shù)應(yīng)用賽項競賽樣題(1)
背景描述
在供應(yīng)鏈金融這個萬億級市場中,區(qū)塊鏈正在快速商業(yè)化落地,
助力產(chǎn)業(yè)革新。基于區(qū)塊鏈的供應(yīng)鏈金融業(yè)務(wù)的理念是:以源自企業(yè)
的應(yīng)收賬款為底層資產(chǎn),通過區(qū)塊鏈技術(shù)實現(xiàn)債券憑證的轉(zhuǎn)讓拆分。
其中,在原始資產(chǎn)上鏈時,通過對應(yīng)收賬款進行審核校驗,確認貿(mào)易
關(guān)系和身份真實有效,和保證上鏈資產(chǎn)的真實可信。再者,債權(quán)憑證
可基于供應(yīng)鏈進行層層拆分與流轉(zhuǎn),都可完整追溯到最底層資產(chǎn),以
實現(xiàn)核心企業(yè)和金融機構(gòu)對供應(yīng)商的“信用穿透”。
某公司規(guī)劃開發(fā)一個區(qū)塊鏈供應(yīng)鏈金融平臺,包括核心企業(yè)、供
應(yīng)商、銀行等角色,通過智能合約代碼逐步構(gòu)建區(qū)塊鏈供應(yīng)鏈金融平
臺的基本功能,實現(xiàn)銀行向核心企業(yè)提供授信并發(fā)行數(shù)字憑證,企業(yè)
與企業(yè)之間轉(zhuǎn)讓數(shù)字憑證。此外需要完成區(qū)塊鏈供應(yīng)鏈金融平臺的前
后端,實現(xiàn)基本的業(yè)務(wù)邏輯。
2
模塊一:區(qū)塊鏈產(chǎn)品方案設(shè)計及系統(tǒng)運維(35分)
任務(wù)1-1:區(qū)塊鏈系統(tǒng)部署與運維(25分)
圍繞供應(yīng)鏈金融區(qū)塊鏈平臺部署與運維需求,進行項目相關(guān)系統(tǒng)、節(jié)點以及
管理工具的部署工作。通過監(jiān)控工具完成對網(wǎng)絡(luò)、節(jié)點服務(wù)的監(jiān)控。最終根據(jù)業(yè)
務(wù)需求規(guī)范,完成系統(tǒng)日志、網(wǎng)絡(luò)參數(shù)、節(jié)點服務(wù)等系統(tǒng)結(jié)構(gòu)的維護。
1.根據(jù)參數(shù)與端口設(shè)置要求,部署區(qū)塊鏈系統(tǒng)并驗證;
2.根據(jù)參數(shù)與端口設(shè)置要求,部署區(qū)塊鏈網(wǎng)絡(luò)管理平臺并驗證;
3.基于區(qū)塊鏈系統(tǒng)相關(guān)管理平臺,按照任務(wù)指南實施系統(tǒng)運維工作并驗證。
4.基于區(qū)塊鏈系統(tǒng)相關(guān)監(jiān)管工具,按照任務(wù)指南對區(qū)塊鏈系統(tǒng)進行監(jiān)管。
子任務(wù)1-1-1:搭建區(qū)塊鏈系統(tǒng)并驗證(8分)
基于給定服務(wù)器環(huán)境以及軟件(地址“/root/tools”),使用Docker以默認
配置安裝單機4節(jié)點的區(qū)塊鏈系統(tǒng),并完成控制臺工具的部署:
(1)完成系統(tǒng)搭建配置與啟動。(2分)
(2)使用基于Docker命令查看區(qū)塊鏈系統(tǒng)狀態(tài)。(2分)
(3)檢查區(qū)塊鏈系統(tǒng)節(jié)點node0連接狀態(tài)輸出。(2分)
(4)配置控制臺,管理相關(guān)證書并啟動。(2分)
子任務(wù)1-1-2:區(qū)塊鏈管理平臺部署與驗證(8分)
基于給定服務(wù)器環(huán)境以及軟件(地址“/root/tools”),按要求部署區(qū)塊鏈
管理平臺,具體工作如下:
(1)配置Mysql數(shù)據(jù)庫(2分)
(2)配置管理平臺連接區(qū)塊鏈系統(tǒng)(2分)
(3)使用命令啟動管理平臺服務(wù)(2分)
(4)驗證管理平臺啟動情況(2分)
子任務(wù)1-1-3:區(qū)塊鏈系統(tǒng)節(jié)點運維(5分)
基于已完成的區(qū)塊鏈系統(tǒng)與管理平臺搭建工作,開展相關(guān)節(jié)點運維工作:
(1)生成新節(jié)點(node4),啟動并檢查(2分)
3
(2)修改新節(jié)點配置,并查看節(jié)點的nodeid(2分)
(3)將新節(jié)點作為觀察節(jié)點加入group1當中,并檢查是否加入成功(1分)
子任務(wù)1-1-4:區(qū)塊鏈系統(tǒng)管理平臺運維(4分)
基于已部署的區(qū)塊鏈系統(tǒng)管理平臺,進行系統(tǒng)相關(guān)運維工作:
(1)基于管理平臺功能頁面,添加新主機(2分)
(2)基于管理平臺功能頁面,修改新節(jié)點(node4)節(jié)點狀態(tài),并監(jiān)控。(2
分)
任務(wù)1-2:區(qū)塊鏈系統(tǒng)測試(10分)
設(shè)計對區(qū)塊鏈系統(tǒng)的測試流程;結(jié)合實際業(yè)務(wù)需求,調(diào)用部署的智能合約中
進行系統(tǒng)測試、性能測試等;根據(jù)業(yè)務(wù)需求,分析并且修復(fù)給定智能合約中的安
全漏洞。利用模擬業(yè)務(wù)和測試工具來完成對區(qū)塊鏈系統(tǒng)服務(wù)數(shù)據(jù)的測試。
1.基于區(qū)塊鏈系統(tǒng)的中間件服務(wù)的部署腳本完成中間件服務(wù)環(huán)境搭建以
及搭建結(jié)果驗證,最后將執(zhí)行結(jié)果截圖保存。(3分)
(1)實現(xiàn)區(qū)塊鏈系統(tǒng)中間件服務(wù)平臺部署。(1分)
(2)實現(xiàn)區(qū)塊鏈系統(tǒng)中間件服務(wù)簽名功能啟動情況驗證。(1分)
(3)區(qū)塊鏈中間件服務(wù)節(jié)點管理進程啟動情況驗證和瀏覽器驗證。(1分)
2.智能合約安全漏洞測試。(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;
4
}
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();
}
}
如上代碼主要實現(xiàn)功能為規(guī)定了轉(zhuǎn)賬凍結(jié)時間,在凍結(jié)時間內(nèi)用戶不能提取存款
的金額。
(1)分析智能合約中存在問題,并說明危害。(2分)
(2)根據(jù)測試工具中的代碼文件,編寫測試用例,復(fù)現(xiàn)智能合約中存在的
漏洞。(3分)
(3)創(chuàng)建新的智能合約,修復(fù)其中問題,說明修復(fù)內(nèi)容并測試。(2分)
5
模塊二:智能合約開發(fā)與測試(30分)
任務(wù)2-1:智能合約開發(fā)(20分)
使用Solidity語言完成智能合約開發(fā)、部署和調(diào)用,要求如下:
1.供應(yīng)鏈金融實體信息編碼(6分)
(1)編寫供應(yīng)鏈金融智能合約的實體接口,完成實體通用數(shù)據(jù)的初始化,
實現(xiàn)企業(yè)和票據(jù)實體信息上鏈的功能;(2分)
表SupplyChain實體說明
名稱類型說明
companyNamestring公司名稱
companyAddressaddress公司地址
creditAssetuint信用資產(chǎn)
acceptReceiptIndexuint[]接收的憑證
sendReceiptIndexuint[]發(fā)送的憑證
senderAddressaddress發(fā)送票據(jù)的地址
accepterAddressaddress接收票據(jù)的地址
receiptTypeuint8憑證類型
transferTypeuint8交易類型
amountuint交易數(shù)量
//公司信息結(jié)構(gòu)體
structCompany{
//①公司名稱
//②公司地址
//③信用資產(chǎn)
//④接收的憑證
//⑤發(fā)送的憑證
6
}
//數(shù)字發(fā)票收據(jù)信息
structReceipt{
//⑥發(fā)送票據(jù)的地址
//⑦接收票據(jù)的地址
//⑧憑證類型
//⑨交易類型
//⑩交易數(shù)量
}
(2)編寫企業(yè)上鏈信息接口,實現(xiàn)供應(yīng)鏈金融的企業(yè)信息上鏈;(2分)
functionaddCompany(stringname,addresscompanyAddress)
returns(bool){
//①實例化公司
//②添加公司地址
//③將實例化的公司添加到公司映射
//④返回添加成功標識
}
(3)基于給定的智能合約代碼以及注釋,完成銀行向企業(yè)交易的接口函數(shù);
(2分)
functionbankToCompanyReceipt(addresssenderAddress,address
accepterAddress,uintamount,uint8receiptType)returns(uint){
①判斷接收地址存在
②實例化銀行
③實例化公司
if(keccak256(bank.bankName)==keccak256("")){
return404001;
7
}
//確認公司存在
if(keccak256(panyName)==④){
return404002;
}
if(bank.creditAsset<amount){
return500001;
}
2.供應(yīng)鏈金融公司與公司接口編碼(6分)
(1)編寫公司與公司之間進行交易的歷史存證上鏈接口,實現(xiàn)公司與公
司之間的交易功能;(2分)
functioncompanyToCompanyReceipt(①,addressaccepterAddress,uint
amount,uint8receiptType)returns(uint){
//②接收地址判斷
CompanymemorysenderCompany=companyMap[③];
Companymemory④=companyMap[accepterAddress];
//確認發(fā)送公司存在
if(keccak256(senderCompany.⑤)==keccak256("")){
return404001;
}
//確認接收公司存在
if(keccak256(accepterCpanyName)==⑥){
return404002;
}
8
//如果存證接收的公司資產(chǎn)小于存證數(shù)額,那么就不能交易發(fā)送存
證
if(accepterCompany.creditAsset⑦⑧){
return500001;
}
(2)編寫創(chuàng)建存證的接口,實現(xiàn)創(chuàng)建存證的功能;(2分)
ReceiptmemorynewReceipt=Receipt(①,accepterAddress,receiptType,
2,amount);
receiptIndex+=1;
//記錄存證(存證Map,公司Map對應(yīng)地址的發(fā)送和接收存證列表)
receiptMap[receiptIndex]=②;
companyMap[③].sendReceiptIndex.push(receiptIndex);
companyMap[accepterAddress].acceptReceiptIndex.push(④);
(3)編寫交易金額數(shù)量變化的接口,實現(xiàn)憑證交易雙方資金的變化功能;
(2分)
companyMap[①].creditAsset②amount;
companyMap[③].creditAsset④amount;
return200;
}
3.供應(yīng)鏈金融公司與銀行交易的接口編碼(4分)
(1)編寫公司與銀行之間進行交易的歷史存證上鏈接口,實現(xiàn)公司與銀行
之間的交易功能;(2分)
functioncompanyToBankReceipt(addresssenderAddress,①,uint
amount,uint8receiptType)returns(uint){
②
9
Bankmemorybank=bankMap[senderAddress];
CompanymemoryaccepterCompany=companyMap[③];
//確認發(fā)送公司存在
if(keccak256(bank.bankName)==④){
return404001;
}
//確認接收公司存在
if(keccak256(accepterCpanyName)==
keccak256("")){
return404002;
}
//如果存證接收的公司資產(chǎn)小于存證數(shù)額,那么就不能交易發(fā)送存
證
if(accepterCompany.creditAsset<amount){
return500001;
}
(2)編寫創(chuàng)建存證的接口,實現(xiàn)創(chuàng)建存證的功能;(1分)
//創(chuàng)建存證
ReceiptmemorynewReceipt=Receipt(senderAddress,
accepterAddress,①,3,amount);
receiptIndex②1;
receiptMap[③]=newReceipt;
bankMap[senderAddress].sendReceiptIndex.push(receiptIndex);
10
companyMap[accepterAddress].④;
(3)編寫交易金額數(shù)量變化的接口,實現(xiàn)憑證交易雙方資金的變化功能;
(1分)
bankMap[senderAddress].①②amount;
companyMap[accepterAddress].③④amount;
return200;
}
4.合約編譯、部署和調(diào)用(4分)
(1)解決代碼錯誤和警告,正確編譯并部署合約,成功獲取部署的合約地
址和abi。(1分)
(2)調(diào)用食品溯源智能合約的接口,完整驗證業(yè)務(wù)流程。(3分)
任務(wù)2-2:智能合約測試(10分)
編寫智能合約單元測試代碼并完成合約功能測試、性能測試,具體要求如下:
1.配置區(qū)塊鏈網(wǎng)絡(luò)(2分)
啟動區(qū)塊鏈網(wǎng)絡(luò),創(chuàng)建新的Workspace,配置對外訪問的RPC接口為7545,
配置項目的配置文件config.js實現(xiàn)與新建Workspace的連接。
2.補充給定基礎(chǔ)代碼中注釋提示的部署邏輯(2分)
基于VSCODE加載的測試項目,補全位于test文件夾中HelloWorld.js文件
預(yù)操作的方法。在測試文件中添加預(yù)定義的方法(在其他方法啟動前使用)。
3.補充代碼中注釋提示的測試邏輯(2分)
基于VSCODE加載的測試項目,補全位于test文件夾中HelloWorld.js文件,
添加測試用例,測試智能合約的get方法。
4.測試hello.get()方法(2分)
基于VSCODE加載的測試項目,補全位于test文件夾中HelloWorld.js文件,
11
添加測試用例,測試智能合約的hello.get()方法。
5.測試.should.equal進行對比判斷(2分)
基于VSCODE加載的測試項目,補全位于test文件夾中HelloWorld.js文件,
添加測試用例,測試智能合約的equal字符串比較方法。
12
模塊三:區(qū)塊鏈應(yīng)用系統(tǒng)開發(fā)(30分)
任務(wù)3-1:區(qū)塊鏈應(yīng)用前端功能開發(fā)(10分)
1.請基于前端系統(tǒng)的開發(fā)模板,在注冊組件Register.vue文件中添加對應(yīng)
的注冊邏輯代碼,實現(xiàn)對后端系統(tǒng)的注冊功能,并測試功能完整性(3分):
本題目的具體要求如下:
(1)界面有明確的注冊相關(guān)提示語
(2)需要填寫的部分有組織名稱、區(qū)塊鏈地址、組織類型
(3)頁面需要有“返回”按鈕,可以跳轉(zhuǎn)到登錄頁面
(4)點擊“注冊”按鈕時需要檢查區(qū)塊鏈地址是否已輸入
(5)注冊成功后跳轉(zhuǎn)登錄頁面
Register.vue:
代碼片段1:
<el-row>
<el-col:span="16":offset="4">
<el-formlabel-width="100px">
<h3>選手填寫部分</h3>
<el-form-itemlabel="組織名稱:">
<el-inputtype="primary"v-model="選手填寫部分
"></el-input>
</el-form-item>
<el-form-itemlabel="區(qū)塊鏈地址:">
<el-inputtype="primary"v-model="選手填寫部分
"></el-input>
</el-form-item>
<el-form-itemlabel="組織類型:">
<el-radio-groupv-model="orgType">
13
<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"選手填寫部分>注冊</el-button>
<el-buttontype="primary"選手填寫部分>返回</el-button>
</el-row>
代碼片段2:
register:function(){
if(this.address==""){
alert(選手填寫部分)
}else{
letpostData={
orgType:選手填寫部分,
username:選手填寫部分,
address:選手填寫部分
}
//和后端交互
選手填寫部分
}
},
代碼片段3:
goback:function(){
14
Type=''
this.username=''
this.address=''
選手填寫部分
}
2.請基于前端系統(tǒng)的開發(fā)模板,在登錄組件Login.vue文件中添加對應(yīng)的登
錄邏輯代碼,實現(xiàn)對后端系統(tǒng)的登錄功能,并測試功能完整性(3分):
本題目的具體要求如下:
(1)界面有明確的登錄相關(guān)提示語
(2)需要填寫的項有用戶地址、組織類型
(3)頁面需要有“注冊”按鈕,可以跳轉(zhuǎn)注冊頁面
(4)點擊“登錄”按鈕時需要檢查各個表項是否已輸入
(5)登錄成功后跳轉(zhuǎn)首頁,路徑為“/home”
Login.vue:
代碼片段1:
<el-col:span="16":offset="4">
<el-formlabel-width="80px">
<h1>供應(yīng)鏈金融應(yīng)用</h1>
<h3>選手填寫部分</h3>
<el-form-itemlabel="用戶地址:">
<el-inputtype="primary"v-model="選手填寫部分
"></el-input>
</el-form-item>
<el-form-itemlabel="組織類型:">
<el-radio-groupv-model="選手填寫部分">
<el-radio:label="1">公司</el-radio>
<el-radio:label="2">銀行</el-radio>
</el-radio-group>
15
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-rowstyle="margin-bottom:20px">
<el-buttontype="primary"選手填寫部分>登錄</el-button>
<el-buttontype="primary"選手填寫部分>注冊</el-button>
</el-row></el-row>
代碼片段2:
login:function(){
if(this.address==""){
alert("選手填寫部分")
}elseif(Type==""){
alert("選手填寫部分")
}else{
letpostData={
orgType:選手填寫部分,
address:選手填寫部分
}
//與后端交互
選手填寫部分
}
},
代碼片段3:
register:function(){
選手填寫部分
16
},
3.請基于前端系統(tǒng)的開發(fā)模板,在公司組件Company.vue文件中添加對應(yīng)的
邏輯代碼,實現(xiàn)對后端系統(tǒng)的公司相關(guān)業(yè)務(wù)功能,并測試功能完整性(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="選手填寫部分">
查詢</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>
17
</el-row>
<el-row>
代碼片段2:
<el-dialogtitle="公司詳情":visible.sync="dialogVisible">
<el-formlabel-width="100px">
<el-form-itemlabel="賬戶地址:">
{{選手填寫部分}}
</el-form-item>
<el-form-itemlabel="公司名稱:">
{{選手填寫部分}}
</el-form-item>
<el-form-itemlabel="賬戶總額:">
{{選手填寫部分}}
</el-form-item>
</el-form>
代碼片段3:
detail:function(queryAddress){
this.dialogVisible=true
letaddress=選手填寫部分
this.axios.get(`選手填寫部
分?address=${address}&queryAddress=${queryAddress}`)
.then((response)=>{
console.log(response)
if(response.data.code==200){
letinAddress=
panyVO.address;
letinName=選手填寫部分;
18
letinAmount=panyVO.amount;
panyDetail={
address:選手填寫部分,
name:選手填寫部分,
amount:選手填寫部分,
senderReceiptList:
response.data.data.senderReceiptList,
accepterReceiptList:
response.data.data.accepterReceiptList
}
}else{
alert(`請求內(nèi)容有誤,${response.data.data}`)
}
})
},
4.請基于前端系統(tǒng)的開發(fā)模板,在銀行組件Bank.vue文件中添加對應(yīng)的邏
輯代碼,實現(xiàn)對后端系統(tǒng)的銀行相關(guān)業(yè)務(wù)功能,并測試功能完整性(2分):
Bank.vue:
代碼片段1:
<el-row>
<el-dialogtitle="交易(發(fā)送憑證)頁
":visible.sync="transDialogVisible"width="30%">
<el-formlabel-width="100px">
<el-form-itemlabel="發(fā)送賬戶地址:">
{{選手填寫部分}}
</el-form-item>
19
<el-form-itemlabel="接收賬戶地址:">
{{選手填寫部分}}
</el-form-item>
<el-form-itemlabel="交易額:">
<el-col:span="16":offset="4">
<el-inputtype="primary"v-model="選手填寫部分
"></el-input>
</el-col>
</el-form-item>
<el-form-itemlabel="憑證類型:">
<el-selectv-model="選手填寫部分"placeholder="請選擇
">
<el-option
v-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="選手填寫
部分">確定</el-button>
</el-row>
</el-dialog>
</el-row>
代碼片段2:
20
executeTransaction:function(){
letfuncName="companyToBankReceipt";
if(this.transDetail.amount==選手填寫部分){
alert('交易額不能為空!')
return
}
if(this.$cookies.get('orgType')==選手填寫部分){
alert('銀行不能給銀行發(fā)送憑證!')
return
}
if(選手填寫部分){
alert("憑證發(fā)送賬戶和接收賬戶不能相一致!")
return
}
this.axios.post(`/finance/transaction/${funcName}`,選手填
寫部分).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)用后端功能開發(fā)(20分)
1.開發(fā)區(qū)塊鏈供應(yīng)鏈金融應(yīng)用后端系統(tǒng)中用戶功能模塊對應(yīng)的用戶注冊功
21
能,根據(jù)前后代碼補充最合適的代碼,并測試功能完整性。(4分)
OrgServiceImpl.java:
/**
*注冊Service
*RegisterBOregisterBO
**/
@Override
publicResult<String>register(RegisterBOregisterBO){
if(StrUtil.isEmpty(選手填寫部分)||
StrUtil.isEmpty(選手填寫部分)||
registerBO.getOrgType()==選手填寫部分
){
returnResult.error(ResultVO.PARAM_EMPTY);
}
ListfuncParam=newArrayList();
funcParam.add(選手填寫部分);
funcParam.add(選手填寫部分);
if(registerBO.getOrgType()==2){
funcParam.add(BigInteger.valueOf(1000));
}
StringfuncName;
if(registerBO.getOrgType()==2){
funcName=選手填寫部分;
}else{
funcName=選手填寫部分;
}
22
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")>0
returnResult.error(ResultVO.選手填寫部分);
}
returnResult.success("ok");
}
2.開發(fā)區(qū)塊鏈供應(yīng)鏈金融應(yīng)用中后端系統(tǒng)中用戶功能模塊對應(yīng)的用戶登錄
功能,根據(jù)前后代碼補充最合適的代碼,并測試功能完整性。(4分)
OrgServiceImpl.java:
/**
*登錄Service
*LoginBOloginBO
**/
@Override
publicResult<String>login(@RequestBodyLoginBOloginBO){
if(StrUtil.isEmpty(loginBO.getAddress())
){
returnResult.error(ResultVO.PARAM_EMPTY);
}
23
ListfuncParam=newArrayList();
funcParam.add(選手填寫部分);
StringfuncName;
if(loginBO.getOrgType()==2){
funcName=選手填寫部分;
}else{
funcName=選手填寫部分;
}
String_result=weBASEUtils.funcPost(選手填寫部
分,funcName,funcParam);
JSONArray_resultJson=JSONUtil.parseArray(_result);
if(StrUtil.isEmpty(_resultJson.get(0).toString())){
returnResult.error(ResultVO.選手填寫部分);
}
returnResult.success("ok");
}
3.開發(fā)區(qū)塊鏈供應(yīng)鏈金融應(yīng)用后端系統(tǒng)中查詢功能模塊對應(yīng)的查詢所有公
司信息功能,根據(jù)前后代碼補充最合適的代碼,并測試功能完整性。(4分)
QueryServiceImpl.java:
/**
*獲取所有公司數(shù)據(jù),不包含存證詳細信息
**/
@Override
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB31/T 699-2013政府系統(tǒng)值守應(yīng)急管理要求
- DB31/T 378-2018旅館服務(wù)質(zhì)量要求
- DB31/T 1386-2022穴位貼敷服務(wù)規(guī)范
- DB31/T 1110.2-2018食品和食用農(nóng)產(chǎn)品信息追溯第2部分:數(shù)據(jù)元
- CAB 1018-2013汽車皮革類方向盤套
- CAB 1001-2013水性聚氨酯(PU)合成革
- 2025股票發(fā)行合同范本下載
- 2024年有機磷系阻燃劑資金申請報告代可行性研究報告
- 智能教育機器人展示屏幕租賃與智能教學方案設(shè)計服務(wù)協(xié)議
- 高端市場汽車LED車燈模組定制合作協(xié)議
- 2023年科技特長生招生考試試卷
- 超聲波清洗機日常點檢表
- 無刷雙饋電機的功率因數(shù)控制
- 公司員工借款合同
- 國家開放大學《財務(wù)管理#》章節(jié)測試參考答案
- 記賬憑證的填制方法和要求教案
- 光伏電站組件清洗方案說明
- DL-T 2226-2021 電力用閥控式鉛酸蓄電池組在線監(jiān)測系統(tǒng)技術(shù)條件
- GB/T 5650-1985擴口式管接頭空心螺栓
- GB/T 39239-2020無損檢測超聲檢測不連續(xù)的特征和定量
- GB/T 24610.1-2019滾動軸承振動測量方法第1部分:基礎(chǔ)
評論
0/150
提交評論