From 52a1c70ecc6bf983149f20e9e601567a46d1071d Mon Sep 17 00:00:00 2001 From: "DESKTOP-74M199N\\qniao" Date: Thu, 2 Dec 2021 19:29:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1-Client(Test)/1-APPlogin(Test).robot | 37 + .../2.1-CreateRegularorder.robot | 87 + .../1-Client(Test)/__init__.robot | 2 + 000-Regularorder/1-Client(Test)/log.html | 2192 +++++++++++ .../1-Client(Test)/output.xml | 335 ++ .../1-Client(Test)/report.html | 2461 ++++++++++++ .../1-WebLogin/weblogin.robot | 21 + .../1-appointment.robot | 57 + .../2.1-RegularUpload-weightnote.robot | 211 ++ .../3.1-Operation_audit.robot | 144 + .../2.1-Consignment management/__init__.robot | 0 .../台账查询.txt | 21 + .../提交磅单.txt | 172 + .../运营审核驳回.txt | 61 + .../4-Financial_audit.robot | 54 + .../5-Sales_receivables.robot | 36 + .../3-Withdrawal_application/台账查询.txt | 20 + .../财务审核驳回.txt | 30 + .../运营审核通过.txt | 72 + .../1-Client(Test)/1-APPlogin(Test).robot | 37 + .../2.2createActiveorder-1.robot | 75 + .../1-Client(Test)/__init__.robot | 2 + .../1-WebLogin/weblogin.robot | 21 + .../1-appointment.robot | 57 + .../2.2-RegularUpload-weightnote-1.robot | 205 + .../3.2-Operation_audit.robot | 80 + .../2.1-Consignment management/__init__.robot | 0 .../台账查询.txt | 21 + .../提交磅单.txt | 172 + .../运营审核驳回.txt | 61 + .../4-Financial_audit.robot | 41 + .../5-Sales_receivables.robot | 36 + .../3-Withdrawal_application/台账查询.txt | 20 + .../财务审核驳回.txt | 30 + .../运营审核通过.txt | 72 + .../1-Client(Test)/1-APPlogin(Test).robot | 37 + .../2.3createActiveorder-2.robot | 74 + .../1-Client(Test)/__init__.robot | 2 + .../1-WebLogin/weblogin.robot | 21 + .../1-appointment.robot | 57 + .../2.3-ActiveUpload-deliverynote.robot | 190 + .../3.3-Operation_audit.robot | 135 + .../2.1-Consignment management/__init__.robot | 0 .../台账查询.txt | 21 + .../提交磅单.txt | 172 + .../运营审核驳回.txt | 61 + .../4-Financial_audit.robot | 41 + .../5-Sales_receivables.robot | 36 + .../3-Withdrawal_application/台账查询.txt | 20 + .../财务审核驳回.txt | 30 + .../运营审核通过.txt | 72 + .../2.3-ActiveUpload-weightnote.robot | 207 + .../3.3--Operation_audit.robot | 81 + .../4.3-Financial_audit.robot | 36 + .../5.3-sales_receivable.robot | 34 + .../4-Consignment_management/__init__.robot | 0 .../4-Consignment_management/台账查询.txt | 11 + .../4-Consignment_management/更新磅单.txt | 84 + .../运营审核驳回.txt | 53 + 16pic_6879381_b.jpg | Bin 0 -> 243901 bytes 20210803.jpg | Bin 0 -> 13005 bytes 21042217001449712.png | Bin 0 -> 71739 bytes log.html | 320 +- output.xml | 3376 +++++++++++++++-- report.html | 411 +- 65 files changed, 11716 insertions(+), 809 deletions(-) create mode 100644 000-Regularorder/1-Client(Test)/1-APPlogin(Test).robot create mode 100644 000-Regularorder/1-Client(Test)/2.1-CreateRegularorder.robot create mode 100644 000-Regularorder/1-Client(Test)/__init__.robot create mode 100644 000-Regularorder/1-Client(Test)/log.html create mode 100644 000-Regularorder/1-Client(Test)/output.xml create mode 100644 000-Regularorder/1-Client(Test)/report.html create mode 100644 000-Regularorder/2-Background_system(Test)/1-WebLogin/weblogin.robot create mode 100644 000-Regularorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot create mode 100644 000-Regularorder/2-Background_system(Test)/2.1-Consignment management/2.1-RegularUpload-weightnote.robot create mode 100644 000-Regularorder/2-Background_system(Test)/2.1-Consignment management/3.1-Operation_audit.robot create mode 100644 000-Regularorder/2-Background_system(Test)/2.1-Consignment management/__init__.robot create mode 100644 000-Regularorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt create mode 100644 000-Regularorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt create mode 100644 000-Regularorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt create mode 100644 000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot create mode 100644 000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot create mode 100644 000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt create mode 100644 000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt create mode 100644 000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt create mode 100644 001-Activeorder/1-Client(Test)/1-APPlogin(Test).robot create mode 100644 001-Activeorder/1-Client(Test)/2.2createActiveorder-1.robot create mode 100644 001-Activeorder/1-Client(Test)/__init__.robot create mode 100644 001-Activeorder/2-Background_system(Test)/1-WebLogin/weblogin.robot create mode 100644 001-Activeorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot create mode 100644 001-Activeorder/2-Background_system(Test)/2.1-Consignment management/2.2-RegularUpload-weightnote-1.robot create mode 100644 001-Activeorder/2-Background_system(Test)/2.1-Consignment management/3.2-Operation_audit.robot create mode 100644 001-Activeorder/2-Background_system(Test)/2.1-Consignment management/__init__.robot create mode 100644 001-Activeorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt create mode 100644 001-Activeorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt create mode 100644 001-Activeorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt create mode 100644 001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot create mode 100644 001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot create mode 100644 001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt create mode 100644 001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt create mode 100644 001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt create mode 100644 002-Activeorder/1-Client(Test)/1-APPlogin(Test).robot create mode 100644 002-Activeorder/1-Client(Test)/2.3createActiveorder-2.robot create mode 100644 002-Activeorder/1-Client(Test)/__init__.robot create mode 100644 002-Activeorder/2-Background_system(Test)/1-WebLogin/weblogin.robot create mode 100644 002-Activeorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot create mode 100644 002-Activeorder/2-Background_system(Test)/2.1-Consignment management/2.3-ActiveUpload-deliverynote.robot create mode 100644 002-Activeorder/2-Background_system(Test)/2.1-Consignment management/3.3-Operation_audit.robot create mode 100644 002-Activeorder/2-Background_system(Test)/2.1-Consignment management/__init__.robot create mode 100644 002-Activeorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt create mode 100644 002-Activeorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt create mode 100644 002-Activeorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt create mode 100644 002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot create mode 100644 002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot create mode 100644 002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt create mode 100644 002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt create mode 100644 002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt create mode 100644 002-Activeorder/2-Background_system(Test)/4-Consignment_management/2.3-ActiveUpload-weightnote.robot create mode 100644 002-Activeorder/2-Background_system(Test)/4-Consignment_management/3.3--Operation_audit.robot create mode 100644 002-Activeorder/2-Background_system(Test)/4-Consignment_management/4.3-Financial_audit.robot create mode 100644 002-Activeorder/2-Background_system(Test)/4-Consignment_management/5.3-sales_receivable.robot create mode 100644 002-Activeorder/2-Background_system(Test)/4-Consignment_management/__init__.robot create mode 100644 002-Activeorder/2-Background_system(Test)/4-Consignment_management/台账查询.txt create mode 100644 002-Activeorder/2-Background_system(Test)/4-Consignment_management/更新磅单.txt create mode 100644 002-Activeorder/2-Background_system(Test)/4-Consignment_management/运营审核驳回.txt create mode 100644 16pic_6879381_b.jpg create mode 100644 20210803.jpg create mode 100644 21042217001449712.png diff --git a/000-Regularorder/1-Client(Test)/1-APPlogin(Test).robot b/000-Regularorder/1-Client(Test)/1-APPlogin(Test).robot new file mode 100644 index 0000000..5e7cc34 --- /dev/null +++ b/000-Regularorder/1-Client(Test)/1-APPlogin(Test).robot @@ -0,0 +1,37 @@ +*** Settings *** +Library RequestsLibrary +Library Collections +Library urllib3 +Library DatabaseLibrary + +*** Variables *** +${header} {'content-type':'application/json','X-APP-ID':'470236309865238528'} +${url} http://api-client-ztb-test.qniao.cn + +*** Test Cases *** +userlogin + [Setup] + #验证码登录 + Disable Warnings + Create Session ZTBT https://api-client-uec-test.qniao.cn ${header} + ${data} Create Dictionary account=18888888888 captcha=888888 accountType=2 + ${account} Set Variable 18888888888 + #${data} Set Variable {"accountType":2,"account":"${account}","captcha":888888} + ${respones} POST On Session ZTBT uec/authorize/by-captcha json=${data} + log ${respones.status_code} + log ${respones.json()} + ${token} Get From Dictionary ${respones.json()["data"]} token + Set Global Variable ${token} + Set Global Variable ${account} + [Teardown] + +login-token + #${header} Create Dictionary content-type=application/json X-APP-ID=470236309865238528 + Create Session ZTBT ${url} ${header} + ${token1} Create Dictionary loginToken=${token} + ${reps} Post On Session ZTBT recycle-user-center/authorize/get/product-line-token/by/login-token json=${token1} + ${gettoken} Get From Dictionary ${reps.json()["data"]} token #获取token + ${userId} Get From Dictionary ${reps.json()["data"]} userId #获取用户id + log ${reps.json()["data"]["token"]} + Set Global Variable ${gettoken} + Set Global Variable ${userId} diff --git a/000-Regularorder/1-Client(Test)/2.1-CreateRegularorder.robot b/000-Regularorder/1-Client(Test)/2.1-CreateRegularorder.robot new file mode 100644 index 0000000..a9af6da --- /dev/null +++ b/000-Regularorder/1-Client(Test)/2.1-CreateRegularorder.robot @@ -0,0 +1,87 @@ +*** Settings *** +Documentation 创建常规订单 +Test Teardown Run Keyword If Test Failed Fatal Error +Test Timeout +Library RequestsLibrary +Library Collections +Library DateTime +Library urllib3 +Library String + +*** Variables *** +${header} {'content-type':'application/json','X-APP-ID':'470236309865238528','Authorization':'QNT ${gettoken}'} +${url} https://api-client-ztb-test.qniao.cn + +*** Test Cases *** +get_paper-mill-city + #获取纸厂所在城市 + Create Session ZTBT ${url} ${header} + ${reps} Get On Session ZTBT recycle-service/get/paper-mill-city + ${data} Get From Dictionary ${reps.json()} data #城市列表 + FOR ${items} IN @{data} + ${cityName} Get From Dictionary ${items} cityName #城市name + ${cityId} Get From Dictionary ${items} cityId #城市id + Exit For Loop If '${cityName}'=='大同市' + END + Set Global Variable ${cityId} + +get-factorylist + #获取代卖列表 + #${header} Create Dictionary content-type=application/json X-APP-ID=470236309865238528 Authorization=${gettoken} + Create Session factorylist http://api-client-ztb-test.qniao.cn ${header} + ${reps} Get On Session factorylist recycle-service/get/paper-mill-paper-category-price-list params=cityId=${cityId}&enableSalesAgent=1&pageNum=1&pageSize=20&listType=0 + Should Be Equal As Strings ${reps.json()["message"]} successful + ${records} Get From Dictionary ${reps.json()["data"]} records #获取代卖纸厂列表 + FOR ${item} IN @{records} + ${name} Get From Dictionary ${item} name #获取纸厂name + ${paperCategoryList} Get From Dictionary ${item} paperCategoryList #获取纸厂品类列表 + ${cumulativeWeight} Get From Dictionary ${item} cumulativeWeight #累计已代卖吨数 + ${paperMillId} Get From Dictionary ${item} paperMillId #获取纸厂id + ${locProvinceName} Get From Dictionary ${item} locProvinceName #纸厂所在省 + ${locCityName} Get From Dictionary ${item} locCityName #纸厂所在市 + ${locDistrictName} Get From Dictionary ${item} locDistrictName #纸厂所在区 + Exit For Loop If '${name}'=='Ceshi_factory' + END + ${value} Evaluate random.choice(${paperCategoryList}) random + log to console \nvalue: ${value} + ${categoryid} Get From Dictionary ${value} categoryId #纸厂品类id + ${categoryName} Get From Dictionary ${value} categoryName #纸厂品类name + ${unitPrice} Get From Dictionary ${value} unitPrice #纸厂品类价格 + ${paperMillAddress} Catenate ${locProvinceName} ${locCityName} ${locDistrictName} + Set Global Variable ${categoryid} + Set Global Variable ${unitPrice} + Set Global Variable ${paperMillId} + Set Global Variable ${paperMillAddress} + Set Global Variable ${categoryName} + Set Global Variable ${name} + +get-carinfo + #获取使用过的车辆信息 + #${header} Create Dictionary content-type=application/json X-APP-ID=470236309865238528 Authorization=${gettoken} + Create Session get-carinfo http://api-client-ztb-test.qniao.cn ${header} + ${reps} Get On Session get-carinfo recycle-service/proxy-sell/get/his-car-info + log ${reps.json()} + ${carNumber} Get From Dictionary ${reps.json()["data"]} records #获取车辆列表 + ${plateNumber1} Evaluate random.choice(${carNumber}) random + log to console \nvalue:${plateNumber1} + ${plateNumber} Get From Dictionary ${plateNumber1} plateNumber #车辆信息 + Set Global Variable ${plateNumber} + +createorder + #创建下单 + #${header} Create Dictionary content-type=application/json X-APP-ID=470236309865238528 Authorization=QNT ${gettoken} + ${datatime} get current date result_format=%Y-%m-%d + #${DT} Add Time To Date ${datatime} -1 day + #${str} Get Substring ${DT} 0 10 + log ${datatime} + ${data} Set Variable {"paperCategoryId":"${categoryid}" ,"unitPrice":${unitPrice},"totalEstimatedWeight":30000,"customerName":"赖勇兰","deliveryTime":"${datatime}","carInfos":[{"plateNumber":"${plateNumber}"}]} + log ${data} + Create Session createorder http://api-client-ztb-test.qniao.cn ${header} + ${reps} Post On Session createorder recycle-service/proxy-sell/create/order ${data.encode('utf-8')} + ${orderId} Get From Dictionary ${reps.json()["data"]} orderId #获取订单编号 + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful + Set Global Variable ${datatime} + Set Global Variable ${orderId} + +*** Keywords *** diff --git a/000-Regularorder/1-Client(Test)/__init__.robot b/000-Regularorder/1-Client(Test)/__init__.robot new file mode 100644 index 0000000..4d46599 --- /dev/null +++ b/000-Regularorder/1-Client(Test)/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Test Setup diff --git a/000-Regularorder/1-Client(Test)/log.html b/000-Regularorder/1-Client(Test)/log.html new file mode 100644 index 0000000..a767195 --- /dev/null +++ b/000-Regularorder/1-Client(Test)/log.html @@ -0,0 +1,2192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Opening Robot Framework log failed

+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/000-Regularorder/1-Client(Test)/output.xml b/000-Regularorder/1-Client(Test)/output.xml new file mode 100644 index 0000000..f0ff275 --- /dev/null +++ b/000-Regularorder/1-Client(Test)/output.xml @@ -0,0 +1,335 @@ + + + + + +ZTBT +${url} +${headers} +Create Session: create a HTTP session to a server +Variable '${headers}' not found. + + + +${repsponse} +ZTBT +recycle-service/proxy-sell-activity/list +params=pageNum=1&pageSize=15 +Sends a GET request on a previously created HTTP Session. + + + +${records} +${repsponse.json()["data"]} +records +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${item} +@{records} + +${item} + +${activityName} +${item} +activityName +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${paperCategoryList} +${item} +paperCategoryList +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${paperMillId} +${item} +paperMillId +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${activityId} +${item} +activityId +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +'${activityName}'=='无账期活动一次' +Stops executing the enclosing for loop if the ``condition`` is true. + + + + + + + +${Category_value} +random.choice(${paperCategoryList}) +random +Evaluates the given expression in Python and returns the result. + + + +\nvalue: ${Category_value} +Logs the given message to the console. + + + +${categoryId} +${Category_value} +categoryId +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${categoryName} +${Category_value} +categoryName +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${unitPrice} +${Category_value} +unitPrice +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${paperMillId} +Makes a variable available globally in all tests and suites. + + + +${activityId} +Makes a variable available globally in all tests and suites. + + + +${categoryId} +Makes a variable available globally in all tests and suites. + + + +${categoryName} +Makes a variable available globally in all tests and suites. + + + +${unitPrice} +Makes a variable available globally in all tests and suites. + + +Variable '${headers}' not found. + + + +get-carinfo +${url} +${headers} +Create Session: create a HTTP session to a server +Variable '${headers}' not found. + + + +${reps} +get-carinfo +recycle-service/proxy-sell/get/his-car-info +Sends a GET request on a previously created HTTP Session. + + + +${reps.json()} +Logs the given message with the given level. + + + +${carNumber} +${reps.json()["data"]} +records +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${plateNumber_value} +random.sample(${carNumber},1) +random +Evaluates the given expression in Python and returns the result. + + + +\nvalue:${plateNumber_value} +Logs the given message to the console. + + + +${plateNumber1} +${plateNumber_value[0]} +plateNumber +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${plateNumber1} +Makes a variable available globally in all tests and suites. + + +Variable '${headers}' not found. + + + +ZTBT +${url} +${headers} +Create Session: create a HTTP session to a server +Variable '${headers}' not found. + + + +${reps} +ZTBT +recycle-service/get/paper-mill-paper-category-price-details/${paperMillId} +Sends a GET request on a previously created HTTP Session. + + + +${reps.json()} +Logs the given message with the given level. + + +Variable '${headers}' not found. + + + +ZTBT +${url} +${headers} +Create Session: create a HTTP session to a server +Variable '${headers}' not found. + + + +${reps} +ZTBT +recycle-service/proxy-sell/get/relation +Sends a GET request on a previously created HTTP Session. + + + +${bizUserId} +${reps.json()["data"]} +bizUserId +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${cusormerId} +${reps.json()["data"]} +cusormerId +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${customerName} +${reps.json()["data"]} +customerName +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${bizUserId} +Makes a variable available globally in all tests and suites. + + + +${cusormerId} +Makes a variable available globally in all tests and suites. + + + +${customerName} +Makes a variable available globally in all tests and suites. + + +Variable '${headers}' not found. + + + +ZTBT +${url} +${headers} +Create Session: create a HTTP session to a server +Variable '${headers}' not found. + + + +${datatime} +result_format=%Y-%m-%d +Returns current local or UTC time with an optional increment. + + + +${order_data} +{ \ \ \ \ "paperCategoryId":"${categoryId}", \ \ \ \ "unitPrice":"${unitPrice}", \ \ \ \ "totalEstimatedWeight":30000, \ \ \ \ "activityId":"${activityId}", \ \ \ \ "customerName":"${customerName}", \ \ \ \ "deliveryTime":"${datatime}", \ \ \ \ "carInfos":[ \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "plateNumber":"${plateNumber1}" \ \ \ \ \ \ \ \ } \ \ \ \ ] } +Returns the given values which can then be assigned to a variables. + + + +${reps} +ZTBT +recycle-service/proxy-sell/create/order +${order_data.encode('utf-8')} +Sends a POST request on a previously created HTTP Session. + + + +${reps.json()} +Logs the given message with the given level. + + + +${orderId} +${reps.json()["data"]} +orderId +Returns a value from the given ``dictionary`` based on the given ``key``. + + + +${reps.json()["message"]} +successful +Fails if objects are unequal after converting them to strings. + + + +${orderId} +Makes a variable available globally in all tests and suites. + + + +${datatime} +Makes a variable available globally in all tests and suites. + + +Variable '${headers}' not found. + + + + + +All Tests + + + + +2.2createActiveorder-1 + + + +Error in file '/root/ztb-trading-rf-api/ztb-trading-rf-api/1-Client(Test)/2.2createActiveorder-1.robot' on line 8: Setting variable '${headers}' failed: Variable '${gettoken}' not found. + + diff --git a/000-Regularorder/1-Client(Test)/report.html b/000-Regularorder/1-Client(Test)/report.html new file mode 100644 index 0000000..cf9d1a3 --- /dev/null +++ b/000-Regularorder/1-Client(Test)/report.html @@ -0,0 +1,2461 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Opening Robot Framework report failed

+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/000-Regularorder/2-Background_system(Test)/1-WebLogin/weblogin.robot b/000-Regularorder/2-Background_system(Test)/1-WebLogin/weblogin.robot new file mode 100644 index 0000000..f08ffc4 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/1-WebLogin/weblogin.robot @@ -0,0 +1,21 @@ +*** Settings *** +Library RequestsLibrary + +*** Test Cases *** +pwlogin + ${header} Create Dictionary Content-Type=application/x-www-form-urlencoded X-APP-ID=470236309865238555 + Create Session ZTBT http://api-ops-ztb-test.qniao.cn ${header} + &{data} Create Dictionary username=laiyonglan@qniao.cn password=qn123456 + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/login data=${data} + log ${reps.json()} + ${gettoken} Set Variable Token 6b08add42d6bcf73abb935b2adf83525 + Should Be Equal As Strings ${reps.json()["message"]} 登陆成功 + Set Global Variable ${gettoken} + +login-info + ${header} Create Dictionary X-APP-ID=470236309865238555 Authorization=Token 6b08add42d6bcf73abb935b2adf83525 + Create Session login-info http://api-ops-ztb-test.qniao.cn ${header} + ${reps_data} Get On Session login-info recycle-service/admin/employee/get/login-info + log ${reps_data} + Should Be Equal As Strings ${reps_data.json()["message"]} successful diff --git a/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot new file mode 100644 index 0000000..60ad6a2 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot @@ -0,0 +1,57 @@ +*** Settings *** +Documentation 预约送货 +Library RequestsLibrary +Library Collections +Library DateTime + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_paper-mill-order-reservation-list + Create Session ZTBT ${URL} ${header} + ${reps_data} Get On Session ZTBT recycle-service/admin/customer-service/get/paper-mill-order-reservation-list params=pageNum=1&pageSize=10&status=&orderId=${orderId} + log ${reps_data.json()} + #获取订单编号${orderId}、纸厂id${paperMillId}、订单类型${orderType} + ${orderId} Get From Dictionary ${reps_data.json()["data"]["records"][0]} orderId #订单编号 + ${paperMillId} Get From Dictionary ${reps_data.json()["data"]["records"][0]} paperMillId #纸厂id + ${id} Get From Dictionary ${reps_data.json()["data"]["records"][0]} id #预约id + ${orderType} Get From Dictionary ${reps_data.json()["data"]["records"][0]} orderType #订单类型 + ${carNoList} Get From Dictionary ${reps_data.json()["data"]["records"][0]} carNoList #车辆信息列表 + ${paperMillName} Get From Dictionary ${reps_data.json()["data"]["records"][0]} paperMillName #纸厂名称 + ${sellerReservationDate} Get From Dictionary ${reps_data.json()["data"]["records"][0]} sellerReservationDate #送货时间 + #随机获取车辆信息 + ${carList} Evaluate random.choice(${carNoList}) random + log to console \nvalue:${carList} + Should Be Equal As Strings ${reps_data.json()["message"]} successful + Set Global Variable ${orderId} + Set Global Variable ${paperMillId} + Set Global Variable ${id} + Set Global Variable ${paperMillName} + Set Global Variable ${sellerReservationDate} + Set Global Variable ${orderType} + Set Global Variable ${carList} + +get-supplier + Create Session ZTBT http://api-ops-ztb-test.qniao.cn ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/paper-mill-merchant/${paperMillId} params=paperMillId=${paperMillId} + log ${reps.json()} + #获取供应商id和name + ${data} Get From Dictionary ${reps.json()} data + ${value} Evaluate random.choice(${data}) random + log to console \nvalue: ${value} + ${supplier_id} Get From Dictionary ${value} id #供应商id + ${millSupplierName} Get From Dictionary ${value} name #供应商名称 + Set Global Variable ${supplier_id} + Set Global Variable ${millSupplierName} + +Submit-appointment + #${headers} Create Dictionary Content-Type=application/json X-APP-ID=470236309865238555 Authorization=Token 6b08add42d6bcf73abb935b2adf83525 + #提交预约信息 + Create Session ZTBT ${URL} ${header} + ${datatime} get current date result_format=%Y-%m-%d + ${data} Set Variable {"attention":"${orderId}","buyerReservationDate":"${datatime}", "id":"${id}","millDeliveryOrderId":"${orderId}","millSupplierId":"${supplier_id}","millSupplierName":"${millSupplierName}","proxySellerSettleType":0,"scrapeOrderId":"${orderId}"} + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/customer-service/update/reservation ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful diff --git a/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/2.1-RegularUpload-weightnote.robot b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/2.1-RegularUpload-weightnote.robot new file mode 100644 index 0000000..05b4007 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/2.1-RegularUpload-weightnote.robot @@ -0,0 +1,211 @@ +*** Settings *** +Documentation 上传磅单-常规 +Test Timeout +Library Collections +Library RequestsLibrary +Library DateTime +Library requests + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get-order-item-list + #查找预约的订单项列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order-item-list params=orderType=${orderType} &pageNum=1&pageSize=10&status=51&orderId=${orderId} + log ${reps.json()} + ${orderItemId} Get From Dictionary ${reps.json()["data"]["records"][0]} orderItemId #订单项编号 + ${bizOwnerName} Get From Dictionary ${reps.json()["data"]["records"][0]} bizOwnerName #业务归属人name + ${bizOwnerId} Get From Dictionary ${reps.json()["data"]["records"][0]} bizOwnerId #业务归属人id + Set Global Variable ${orderItemId} + Should Be Equal ${reps.json()["data"]["records"][0]["orderId"]} ${orderId} + +get-order-item-details + #查看订单列表详情 + Create Session ZTBT ${URL} ${header} + #${data} Set Variable orderId=${orderId} orderItemId=${orderItemId} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #当前订单下单时的合同id + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]} unitSurcharge #代卖费 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类ID + ${unitPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类单价 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${millSupplierId} Get From Dictionary ${reps.json()["data"]} millSupplierId #纸厂供应商ID + ${paperMillSupplierName} Get From Dictionary ${reps.json()["data"]} paperMillSupplierName #纸厂供应商名称 + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + ${settleUtiPrice}= Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + ${unitSurcharge} Set Variable If '${unitSurcharge}'=='${None}' 0 ${unitSurcharge} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + #${activitySettleType} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} activitySettleType #活动结算方式(0:70%,1:85%,2:全额) + log ${contractId} + Set Global Variable ${contractId} + Set Global Variable ${unitSurcharge} + Set Global Variable ${paperCategoryId} + Set Global Variable ${settleUtiPrice} + Set Global Variable ${unitPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${millSupplierId} + Set Global Variable ${paperMillSupplierName} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${contractId} + #Set Global Variable ${activitySettleType} + +get-Transaction subject + #获取交易主体 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/transaction-main-enterprise/list + ${交易数据} Get From Dictionary ${reps.json()} data + #随机获取交易主体 + ${交易信息} Evaluate random.choice(${交易数据}) random + log to console \nvalue:${交易信息} + ${交易主体id} Get From Dictionary ${交易信息} id #交易主体id + ${交易主体name} Get From Dictionary ${交易信息} name #交易主体name + Set Global Variable ${交易主体id} + Set Global Variable ${交易主体name} + +get-Warehouse + #获取所属仓库 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/transaction-main-enterprise/get/warehouse-name + ${仓库} Get From Dictionary ${reps.json()} data + #随机获取仓库 + ${所属仓库} Evaluate random.choice(${仓库}) random + log to console \nvalue:${所属仓库} + Set Global Variable ${所属仓库} + +get-Source of funds + #获取资金来源 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/fund-source/get/list + log ${reps.json()} + ${data} Get From Dictionary ${reps.json()} data + FOR ${item} IN @{data} + log ${item} + ${isDefault} Get From Dictionary ${item} isDefault #获取启用状态 + ${name} Get From Dictionary ${item} name #获取name + ${id} Get From Dictionary ${item} id #获取id + Exit For Loop If '${isDefault}'=='1' + END + Set Global Variable ${name} + Set Global Variable ${id} + +get-contract-list + #获取订单纸厂的所有合同信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT /recycle-service/admin/contract/get/selectable-contract-list params=orderItemId=${orderItemId} + log ${reps.json()} + +get-supplier + #获取纸厂供应商 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/paper-mill-merchant/${paperMillId} params=paperMillId=${paperMillId} + log ${reps.json()} + +get-category price + #获取下单品类,上传磅单时的价格 + Create Session ZTBT ${URL} ${header} + ${dataTime} Get Current Date result_format=%Y-%m-%d + ${reps} Get On Session ZTBT recycle-service/admin/proxy-sell/get-category-price-by-date params=orderItemId=${orderItemId}&weightDay=${dataTime} + log ${reps.json()} + ${price} Get From Dictionary ${reps.json()["data"][0]} price #下单品类价格 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"][0]} publicSubsidies #下单品类公开补贴 + Set Global Variable ${price} + Set Global Variable ${publicSubsidies} + Set Global Variable ${dataTime} + +get_paper-mill-category + #获取当前纸厂的所有纸品品类 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/paperMill/get/paper-mill-category/${paperMillId} params=id=${paperMillId} + log ${reps.json()} + +get_contract_by_id + #获取下单时绑定的合同 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/contract/get/detail-by-id params=id=${contractId} + log ${reps.json()} + #获取垫资费、企业ID、应收金额结算规则、含税结算单价结算规则 + ${advanceFund} Get From Dictionary ${reps.json()["data"]} advanceFund #垫资费 + ${buyerEnterpriseId} Get From Dictionary ${reps.json()["data"]} buyerEnterpriseId #企业id + ${settleRules} Get From Dictionary ${reps.json()["data"]} settleRules #应收金额结算规则 + ${settlePriceIncludeTaxSettleRules} Get From Dictionary ${reps.json()["data"]} settlePriceIncludeTaxSettleRules #含税结算单价结算规则 + ${taxRefundRate} Get From Dictionary ${reps.json()["data"]} taxRefundRate #税点 + ${proxyPaySurcharge} Get From Dictionary ${reps.json()["data"]} proxyPaySurcharge #代收费 + ${hasInvoice} Get From Dictionary ${reps.json()["data"]} hasInvoice #是否开票 + ${accountPeriodType} Get From Dictionary ${reps.json()["data"]} accountPeriodType #账期类型 + ${isSubsidyAndDeductIncludeTax} Get From Dictionary ${reps.json()["data"]} isSubsidyAndDeductIncludeTax #纸厂补贴是否含税 + ${receivableSettlementRules} Get From Dictionary ${reps.json()["data"]} settleRules #应收金额结算规则 + ${settlePriceIncludeTaxSettleRules} Get From Dictionary ${reps.json()["data"]} settlePriceIncludeTaxSettleRules #含税结算单价结算规则 + ${advanceFund} Set Variable If '${advanceFund}'=='${None}' 0 ${advanceFund} + ${proxyPaySurcharge} Set Variable If '${proxyPaySurcharge}'=='${None}' 0 ${proxyPaySurcharge} + ${taxRefundRate} Set Variable If '${taxRefundRate}'=='${None}' 0 ${taxRefundRate} + Set Global Variable ${advanceFund} + Set Global Variable ${buyerEnterpriseId} + Set Global Variable ${taxRefundRate} + Set Global Variable ${proxyPaySurcharge} + Set Global Variable ${hasInvoice} + Set Global Variable ${accountPeriodType} + Set Global Variable ${settleRules} + Set Global Variable ${settlePriceIncludeTaxSettleRules} + Set Global Variable ${isSubsidyAndDeductIncludeTax} + Set Global Variable ${receivableSettlementRules} + Set Global Variable ${settlePriceIncludeTaxSettleRules} + +Upload_pictures + #上传图片 + #${dict} Create Dictionary Content-Type=image/jpeg filename=20210803.jpg + #Create Session ZTBT ${URL} ${dict} + ${filepath} Evaluate open('./21042217001449712.png','rb') + ${image} Evaluate open('./21042217001449712.png','rb') + ${file} Create Dictionary filepath=${filepath} image=${image} + Create Session ZTBT ${URL} + log ${file} + ${result} Post On Session ZTBT recycle-user-center/upload/image files=${file} + ${pictures} Get From Dictionary ${result.json()} data + log ${result.content} + Set Global Variable ${pictures} + +get_repeat_proxy-order + #获取重复订单信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/repeat/proxy-order params=orderItemId=${orderItemId}&plateNumber=${carList}&settleWeight=17550&weighingDate=${datatime}&orderType=${orderType}&settlePrice= 41953.05 + ${records} Get From Dictionary ${reps.json()["data"]} records #获取重复订单列表 + ${orderItemId_list} Create List + #sleep 0.5 + FOR ${items} IN @{records} + ${orderItemId} Get From Dictionary ${items} orderItemId #重复订单项编号 + Append To List ${orderItemId_list} '''${orderItemId}''' + END + Should Be Equal As Strings ${reps.json()["message"]} successful + Set Global Variable ${orderItemId_list} + +repeat_proxy-order + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "remark":"${datatime}", \ \ \ \ "repeatOrderItem":${orderItemId_list} } + ${reps} Post On Session ZTBT recycle-service/admin/customer-service/confirm/repeat/proxy-order ${data.encode('utf-8')} + +weightnote + #提交磅单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "deductedPoint":0, \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "unitPrice":"${unitPrice}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "settleUtiPriceIncludeTax":2.04012, \ \ \ \ "settleUtiPriceIncludeTaxType":1, \ \ \ \ "receivableAdjustMoney":"100", \ \ \ \ "refundSubsidy":0.002, \ \ \ \ "adjustMoney":"0", \ \ \ \ "collectionCharges":"${proxyPaySurcharge}", \ \ \ \ "advanceFund":"${advanceFund}", \ \ \ \ "contractId":"${contractId}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "transactionMainEnterpriseId":"${交易主体id}", \ \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "plateNumber":"${carList}", \ \ \ \ "settlePriceIncludeTaxSettleRules":"${settlePriceIncludeTaxSettleRules}", \ \ \ \ "settleUtiPrice":"${settleUtiPrice}", \ \ \ \ "netWeight":300, \ \ \ \ "activitySettleType":null, \ \ \ \ "unitSurcharge":"${unitSurcharge}", \ \ \ \ "deliveryImageUrls":[ \ \ \ \ \ ], \ \ \ \ "publicSubsidies":0, \ \ \ \ "isSubsidyAndDeductIncludeTax":0, \ \ \ \ "orderId":"${orderId}", \ \ \ \ "settleWeight":230, \ \ \ \ "deductedWeight":2, \ \ \ \ "orderType":"${orderType}", \ \ \ \ "otherAmountList":[ \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"freightSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"contrabandPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"nonStandardPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ } \ \ \ \ ] } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/save/weightnote ${data.encode('utf-8')} + log ${reps.json()["data"]} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + +audit_weightnote + Create Session ZTBT ${URL} ${header} + ${repsonse} Post On Session ZTBT recycle-service/admin/customer-service/audit/weightnote/${weightNoteId} + log ${repsonse.json()} + +get_proxy-order + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful diff --git a/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/3.1-Operation_audit.robot b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/3.1-Operation_audit.robot new file mode 100644 index 0000000..d3b9d91 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/3.1-Operation_audit.robot @@ -0,0 +1,144 @@ +*** Settings *** +Documentation 运营审核-常规 +Test Timeout +Library DateTime +Library Collections +Library RequestsLibrary +Resource 提交磅单.txt +Resource 运营审核驳回.txt +Resource 台账查询.txt + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0 + log ${reps.json()} + +get_paper-mill-order-by-orderItemId + #根据订单编号获取运营审核单 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=${orderItemId} + log ${reps.json()} + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId #获取审核id + ${weightNoteId} Get From Dictionary ${reps.json()["data"]["records"][0]} weightNoteId #获取磅单id + Set Global Variable ${auditRequestId} + Set Global Variable ${weightNoteId} + +get_order-log-detail + #获取订单日志 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId} + log ${reps.json()} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]["items"][0]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${surcharge1} Evaluate ${unitSurcharge}*${netWeight} + ${surcharge2} Evaluate ${unitSurcharge}*${settleWeight} + ${surcharge} Set Variable If '${proxySellerSettleType}'=='0' ${surcharge1} ${surcharge2} #代卖费总额 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${audit_status} Get From Dictionary ${reps.json()["data"]} status + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${surcharge} + Set Global Variable ${audit_status} + +order-receipt-audit-details + #b保存磅单信息 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d #获取当前时间 + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +get_order-log-detail2 + #运营审核驳回操作日志 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId} &operationStatus=2 + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful + +重复执行驳回上传磅单 + #重复执行上传磅单、运营驳回操作 + FOR ${items} IN RANGE 2 + Run Keyword get_operation_list + Run Keyword get_order-receipt-audit-details + Run Keyword If '${audit_status}'=='0' Run Keyword 运营审核驳回 + sleep 1 + Run Keyword 获取磅单详情 + Run Keyword If '${status}'=='51' weightnote + Run Keyword audit_weightnote + Run Keyword 获取上传磅单后的订单详情 + Run Keyword 台账查询 + END + +get_operation_list1 + #获取运营审核列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=&orderId=${orderId} + ${audit_status} Get From Dictionary ${reps.json()["data"]["records"][0]} status + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Set Global Variable ${audit_status} + Set Global Variable ${auditRequestId} + +get_order-receipt-audit-details1 + #查看运营审核详情 + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]["items"][0]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${settleWeight} Set Variable If '${settleWeight}'=='None' 0 ${settleWeight} + ${surcharge1} Evaluate ${unitSurcharge}*${netWeight} + ${surcharge2} Evaluate ${unitSurcharge}*${settleWeight} + ${surcharge} Set Variable If '${proxySellerSettleType}'=='0' ${surcharge1} ${surcharge2} #代卖费总额 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]} auditRequestId + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${surcharge} + Set Global Variable ${auditRequestId} + +order-receipt-audit-details1 + #b保存磅单信息 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d #获取当前时间 + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +operation_audit + #运营审核确认通过 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":1, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful diff --git a/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/__init__.robot b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/__init__.robot new file mode 100644 index 0000000..e69de29 diff --git a/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt new file mode 100644 index 0000000..2071449 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt @@ -0,0 +1,21 @@ +*** Settings *** +Library Collections +Library RequestsLibrary + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +台账查询 + #获取台账列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/parameter/get/parameter params=pageNum=1&pageSize=10&withdrawState=&state=&orderItemId=${orderItemId} + ${台账列表数据} Get From List ${reps.json()["data"]["records"]} 0 #获取台账列表数据 + #Set Global Variable ${台账列表数据} + Should Be Equal As Numbers ${netWeight} ${reps.json()["data"]["records"][0]["netWeight"]} + Should Be Equal As Numbers ${unitSurcharge} ${reps.json()["data"]["records"][0]["unitSurcharge"]} + Should Be Equal As Numbers ${settleWeight} ${reps.json()["data"]["records"][0]["settleWeight"]} + Should Be Equal As Numbers ${settleUnitPrice} ${reps.json()["data"]["records"][0]["settleUtiPrice"]} + Should Be Equal As Numbers ${receivableAdjustMoney} ${reps.json()["data"]["records"][0]["receivableAdjustMoney"]} + Should Be Equal As Numbers ${adjustMoney} ${reps.json()["data"]["records"][0]["adjustMoney"]} diff --git a/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt new file mode 100644 index 0000000..6545de7 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt @@ -0,0 +1,172 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +获取磅单详情 + #查看订单列表详情 + Create Session ZTBT ${URL} ${header} + #${data} Set Variable orderId=${orderId} orderItemId=${orderItemId} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #当前订单下单时的合同id + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} unitSurcharge #代卖费 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类ID + ${unitPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类单价 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${millSupplierId} Get From Dictionary ${reps.json()["data"]} millSupplierId #纸厂供应商ID + ${paperMillSupplierName} Get From Dictionary ${reps.json()["data"]} paperMillSupplierName #纸厂供应商名称 + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + #${settleUtiPrice} Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + ${unitSurcharge} Set Variable If '${unitSurcharge}'=='${None}' 0 ${unitSurcharge} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${磅单id} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} id #获取磅单id + ${status} Get From Dictionary ${reps.json()["data"]} status + ${receivableAdjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} receivableAdjustMoney #获取应收调节费 + ${adjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} adjustMoney #获取调节费 + ${receivableAdjustMoney} Set Variable If '${receivableAdjustMoney}'=='${None}' 0 ${receivableAdjustMoney} + ${adjustMoney} Set Variable If '${adjustMoney}'=='${None}' 0 ${adjustMoney} + ${settleUtiPrice} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleUtiPrice #获取结算单价 + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleWeight #获取结算重量 + ${netWeight1} Evaluate ${netWeight}+30 + FOR ${净重index} IN RANGE ${netWeight} 30 + Exit For Loop If '${净重index}'=='${netWeight1}' + END + ${settleWeight1} Evaluate ${settleWeight}+30 + FOR ${结算重量index} IN RANGE ${settleWeight} 30 + Exit For Loop If '${结算重量index}'=='${settleWeight1}' + END + ${unitSurcharge1} Evaluate ${unitSurcharge}+0.001 + FOR ${代卖费index} IN RANGE ${unitSurcharge} 100 + Exit For Loop If '${代卖费index}'=='${unitSurcharge1}' + END + ${settleUtiPrice1} Evaluate ${settleUtiPrice}+0.1 + FOR ${结算单价index} IN RANGE ${settleUtiPrice} 100 + Exit For Loop If '${结算单价index}'=='${settleUtiPrice1}' + END + ${receivableAdjustMoney1} Evaluate ${receivableAdjustMoney}+10 + FOR ${应收调节费index} IN RANGE ${receivableAdjustMoney} 500 + Exit For Loop If '${应收调节费index}'=='${receivableAdjustMoney1}' + END + ${adjustMoney1} Evaluate ${adjustMoney}+10 + FOR ${应收调节费index} IN RANGE ${adjustMoney} 500 + Exit For Loop If '${应收调节费index}'=='${adjustMoney1}' + END + Set Global Variable ${contractId} + Set Global Variable ${unitSurcharge} + Set Global Variable ${paperCategoryId} + Set Global Variable ${settleUtiPrice1} + Set Global Variable ${unitPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${millSupplierId} + Set Global Variable ${paperMillSupplierName} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${contractId} + Set Global Variable ${netWeight1} + Set Global Variable ${settleWeight1} + Set Global Variable ${磅单id} + Set Global Variable ${status} + Set Global Variable ${unitSurcharge1} + Set Global Variable ${adjustMoney1} + Set Global Variable ${receivableAdjustMoney1} + +weightnote + #驳回后重新提交磅单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "deductedPoint":0, \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "unitPrice":"${unitPrice}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "settleUtiPriceIncludeTax":2.04012, \ \ \ \ "settleUtiPriceIncludeTaxType":1, \ \ \ \ "receivableAdjustMoney":"${receivableAdjustMoney1}", \ \ \ \ "refundSubsidy":0.002, \ \ \ \ "adjustMoney":"${adjustMoney1}", \ \ \ \ "collectionCharges":"${proxyPaySurcharge}", \ \ \ \ "advanceFund":"${advanceFund}", \ \ \ \ "contractId":"${contractId}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "transactionMainEnterpriseId":"${交易主体id}", \ \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "plateNumber":"${carList}", \ \ \ \ "settlePriceIncludeTaxSettleRules":"${settlePriceIncludeTaxSettleRules}", \ \ \ \ "settleUtiPrice":"${settleUtiPrice1}", \ \ \ \ "netWeight":"${netWeight1}", \ \ \ \ "activitySettleType":null, \ \ \ \ "unitSurcharge":"${unitSurcharge1}", \ \ \ \ "deliveryImageUrls":[ \ \ \ \ \ ], \ \ \ \ "publicSubsidies":0, \ \ \ \ "isSubsidyAndDeductIncludeTax":0, \ \ \ \ "orderId":"${orderId}", \ \ \ \ "settleWeight":"${settleWeight1}", \ \ \ \ "deductedWeight":2, \ \ \ \ "orderType":"${orderType}", \ \ \ \ "otherAmountList":[ \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"freightSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"contrabandPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"nonStandardPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ } \ \ \ \ ], \ \ \ \ "id":"${磅单id}" \ \ \ \ } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/update/weightnote ${data.encode('utf-8')} + log ${reps.json()["data"]} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + +获取上传磅单后的订单详情 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${settleUnitPrice} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleUtiPrice #获取结算单价 + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} unitSurcharge #获取代卖费 + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleWeight #获取结算重量 + ${receivableAdjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} receivableAdjustMoney #获取应收调节费 + ${adjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} adjustMoney #获取调节费 + Set Global Variable ${settleUnitPrice} + Set Global Variable ${unitSurcharge} + Set Global Variable ${netWeight} + Set Global Variable ${settleWeight} + Set Global Variable ${receivableAdjustMoney} + Set Global Variable ${adjustMoney} + +获取送货单详情 + #获取订单详情信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId} &orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${paperMillId} Get From Dictionary ${reps.json()["data"]} paperMillId #纸厂id + ${paperCategoryPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类价格 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${activitySettleType} Get From Dictionary ${reps.json()["data"]} activitySettleType #活动订单结算方式 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${交易主体id} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseId #交易主体id + ${交易主体name} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseName #交易主体name + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]} unitSurcharge #代卖费单价 + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + ${settleUtiPrice}= Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${磅单id} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} id #获取磅单id + ${status} Get From Dictionary ${reps.json()["data"]} status + ${unitSurcharge3} Evaluate ${unitSurcharge}+0.001 + FOR ${代卖费index} IN RANGE ${unitSurcharge} 100 + Exit For Loop If '${代卖费index}'=='${unitSurcharge3}' + END + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${netWeight3} Evaluate ${netWeight}+300 + FOR ${净重index} IN RANGE ${netWeight} 30 + Exit For Loop If '${净重index}'=='${netWeight3}' + END + Set Global Variable ${contractId} + Set Global Variable ${paperMillId} + Set Global Variable ${paperCategoryPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${activitySettleType} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${settleUtiPrice} + Set Global Variable ${交易主体id} + Set Global Variable ${交易主体name} + Set Global Variable ${unitSurcharge3} + Set Global Variable ${netWeight3} + Set Global Variable ${磅单id} + Set Global Variable ${status} + +上传送货单 + #上传送货单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "settleUtiPrice":"${settleUtiPrice}", \ \ \ \ "publicSubsidies":0, \ \ \ \ "netWeight":"${netWeight3}", \ \ \ \ "settleWeight":null, \ \ \ \ "unitSurcharge":${unitSurcharge3}, \ \ \ \ "transactionMainEnterpriseId":"${交易主体id}", \ \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "activitySettleType":"${activitySettleType}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "remark":null, \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "orderId":"${orderId}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "settlePrice":0, \ \ \ \ "contractId":"${contractId}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "orderType":"${orderType}", \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "otherAmountList":[ \ \ \ \ \ ], \ \ \ \ "unitPrice":"${paperCategoryPrice}", \ \ \ \ "id":"${磅单id}" \ \ \ \ \ } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/update/weightnote ${data.encode('utf-8')} + log ${reps.json()} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId #磅单编号 + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + Set Global Variable ${datatime} + +获取上传送货单后的订单详情 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} unitSurcharge #获取代卖费 + Set Global Variable ${netWeight} + Set Global Variable ${unitSurcharge} + +audit_weightnote + Create Session ZTBT ${URL} ${header} + ${repsonse} Post On Session ZTBT recycle-service/admin/customer-service/audit/weightnote/${weightNoteId} + log ${repsonse.json()} diff --git a/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt new file mode 100644 index 0000000..2098597 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt @@ -0,0 +1,61 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=&orderId=${orderId} + ${audit_status} Get From Dictionary ${reps.json()["data"]["records"][0]} status + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Set Global Variable ${audit_status} + Set Global Variable ${auditRequestId} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${settleWeight} Set Variable If '${settleWeight}'=='None' 0 ${settleWeight} + ${surcharge1} Evaluate ${unitSurcharge}*${netWeight} + ${surcharge2} Evaluate ${unitSurcharge}*${settleWeight} + ${surcharge} Set Variable If '${proxySellerSettleType}'=='0' ${surcharge1} ${surcharge2} #代卖费总额 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]} auditRequestId + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${surcharge} + Set Global Variable ${auditRequestId} + +保存磅单信息 + #b保存磅单信息 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d #获取当前时间 + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +运营审核驳回 + #运营审核驳回 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":2, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} diff --git a/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot b/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot new file mode 100644 index 0000000..6ed7927 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot @@ -0,0 +1,54 @@ +*** Settings *** +Documentation 代卖应付 +Library RequestsLibrary +Library Collections +Resource 财务审核驳回.txt +Resource 运营审核通过.txt +Resource 台账查询.txt + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${url} http://api-ops-psc-test.qniao.cn +${URL1} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_list + #获取财务审核列表 + Create Session ZTBT ${url} ${header} + ${reps} Get On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/get/list params=pageNum=1&pageSize=10&status=&orderId=&orderItemId=${orderItemId} + ${auditedTime} Get From Dictionary ${reps.json()["data"]["records"][0]} auditedTime #财务第一次确认结算时间 + Should Be Equal As Strings ${reps.json()["message"]} successful + #Set Global Variable ${auditedTime} + +get_order-log-detail + #财务审核驳回操作记录 + Create Session ZTBT ${URL1} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId}&operationStatus=3 + +重复执行财务审核驳回何运营审核通过 + #重复执行财务审核驳回何运营审核通过操作 + FOR ${index} IN RANGE 5 + Run Keyword 获取财务审核列表 + Run Keyword If '${staus}'=='0' 财务驳回 + Run Keyword get_operation_list + Run Keyword get_order-receipt-audit-details + Run Keyword order-receipt-audit-details + Run Keyword If '${audit_status}'=='0' 运营审核通过 + Run Keyword 运营审核后详情 + Run Keyword 台账查询 + END + +paper-mill-order-receipt-proof-request_audit + #财务审核确认通过 + Create Session ZTBT ${url} ${header} + ${data} Set Variable {"auditRequestId":"${auditRequestId}","adminId":null,"isPass":1,"remark":"${datatime}" } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/audit ${data.encode('utf-8')} + log ${reps.json()} + sleep 1 + +paper-mill-order-receipt-proof-request_settle + #确认结算 + Create Session ZTBT ${url} ${header} + ${data} Set Variable { \ \ \ \ "id":"${auditRequestId}", \ \ \ \ "adminId":null } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/settle ${data.encode('utf-8')} + sleep 1 diff --git a/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot b/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot new file mode 100644 index 0000000..3ebbe95 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot @@ -0,0 +1,36 @@ +*** Settings *** +Documentation 代卖应收 +Library RequestsLibrary +Library Collections + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_paper-payment-order-list + #通过订单编号获取代卖应收列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-payment-order-list params=pageNum=1&pageSize=10&orderId=${orderId} + ${paymentOrderId} Get From Dictionary ${reps.json()["data"]["records"][0]} id #回款单号 + log ${reps.json()} + Set Global Variable ${paymentOrderId} + +get_order-receipt-audit-details + #代卖应收详情 + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + ${receivablePriceIncludeTax} Get From Dictionary ${reps.json()["data"]["items"][0]} receivablePriceIncludeTax + #${receivablePrice} Get From Dictionary ${reps.json()["data"]["items"][0]} receivablePrice #获取应收金额 + ${noReceivablePrice} Get From Dictionary ${reps.json()["data"]["items"][0]} noReceivablePrice #获取未收金额 + #Set Global Variable ${receivablePrice} + Set Global Variable ${receivablePriceIncludeTax} + Set Global Variable ${noReceivablePrice} + +update_payment-order-status + #确认回款操作 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ \ \ \ "paymentOrderId":"${paymentOrderId}", \ \ \ \ "receivablePrice":"${receivablePriceIncludeTax}", \ \ \ \ "paidPrice":"${receivablePriceIncludeTax}", \ \ \ \ "noReceiveblePrice":"${noReceivablePrice}", \ \ \ \ "bankFlowNo":null, \ \ \ \ "paymentAdjustmentFee":null, \ \ \ \ "returnPayDate":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/update/payment-order-status ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + sleep 1 diff --git a/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt b/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt new file mode 100644 index 0000000..64abf98 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt @@ -0,0 +1,20 @@ +*** Settings *** +Library Collections +Library RequestsLibrary + +*** Variables *** +${URL1} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +台账查询 + #获取台账列表 + Create Session ZTBT ${URL1} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/parameter/get/parameter params=pageNum=1&pageSize=10&withdrawState=&state=&orderItemId=${orderItemId} + ${台账列表数据} Get From List ${reps.json()["data"]["records"]} 0 #获取台账列表数据 + #Set Global Variable ${台账列表数据} + #${receivableAdjustMoney1} Get From Dictionary ${reps.json()["data"]["records"][0]} receivableAdjustMoney #获取应收调节费 + #${receivableAdjustMoney1} Set Variable If '${receivableAdjustMoney}'=='None' Should Not Be Equal As Numbers ${receivableAdjustMoney} ${receivableAdjustMoney1} + #Should Be Equal As Numbers ${receivableAdjustMoney} ${reps.json()["data"]["records"][0]["receivableAdjustMoney"]} #对比应收调节费 + Should Be Equal As Numbers ${noReceivablePrice} ${reps.json()["data"]["records"][0]["noReceivablePrice"]} #对比未收款金额 + Should Be Equal As Strings ${paperMillPayAt} ${reps.json()["data"]["records"][0]["paperMillPayAt"]} #对比预计回款日期 diff --git a/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt b/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt new file mode 100644 index 0000000..d9f1ba8 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt @@ -0,0 +1,30 @@ +*** Settings *** +Library Collections +Library DateTime +Library RequestsLibrary + +*** Variables *** +${URL1} http://api-ops-ztb-test.qniao.cn +${url} http://api-ops-psc-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +获取财务审核列表 + #获取财务审核列表 + Create Session ZTBT ${url} ${header} + ${reps} Get On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/get/list params=pageNum=1&pageSize=10&status=&orderId=&orderItemId=${orderItemId} + #${auditedTime} Get From Dictionary ${reps.json()["data"]["records"][0]} auditedTime #财务第一次确认结算时间 + ${staus} Get From Dictionary ${reps.json()["data"]["records"][0]} status #获取审核状态 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Should Be Equal As Strings ${reps.json()["message"]} successful + #Set Global Variable ${auditedTime} + Set Global Variable ${staus} + Set Global Variable ${auditRequestId} + +财务驳回 + #财务审核驳回 + Create Session ZTBT ${url} ${header} + ${data} Set Variable {"auditRequestId":"${auditRequestId}","adminId":null,"isPass":2,"remark":"${datatime}" } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/audit ${data.encode('utf-8')} + log ${reps.json()} + sleep 1 diff --git a/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt b/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt new file mode 100644 index 0000000..74be8e4 --- /dev/null +++ b/000-Regularorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt @@ -0,0 +1,72 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL1} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL1} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=&orderId=${orderId} + ${audit_status} Get From Dictionary ${reps.json()["data"]["records"][0]} status + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Set Global Variable ${audit_status} + Set Global Variable ${auditRequestId} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL1} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]["items"][0]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${settleWeight} Set Variable If '${settleWeight}'=='None' 0 ${settleWeight} + ${surcharge1} Evaluate ${unitSurcharge}*${netWeight} + ${surcharge2} Evaluate ${unitSurcharge}*${settleWeight} + ${surcharge} Set Variable If '${proxySellerSettleType}'=='0' ${surcharge1} ${surcharge2} #代卖费总额 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]} auditRequestId + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${surcharge} + Set Global Variable ${auditRequestId} + +order-receipt-audit-details + #b保存磅单信息 + Create Session ZTBT ${URL1} ${header} + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +运营审核通过 + #运营审核通过 + Create Session ZTBT ${URL1} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":1, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} + +运营审核后详情 + #查看运营审核详情 + Create Session ZTBT ${URL1} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + ${noReceivablePrice} Get From Dictionary ${reps.json()["data"]["items"][0]} noReceivablePrice #获取未收款金额 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #获取计划回款日期 + ${receivableAdjustMoney} Get From Dictionary ${reps.json()["data"]["items"][0]} receivableAdjustMoney #获取应收调节费 + #${noReceivablePrice} Evaluate ${noReceivablePrice}+1 + Set Global Variable ${noReceivablePrice} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${receivableAdjustMoney} diff --git a/001-Activeorder/1-Client(Test)/1-APPlogin(Test).robot b/001-Activeorder/1-Client(Test)/1-APPlogin(Test).robot new file mode 100644 index 0000000..5e7cc34 --- /dev/null +++ b/001-Activeorder/1-Client(Test)/1-APPlogin(Test).robot @@ -0,0 +1,37 @@ +*** Settings *** +Library RequestsLibrary +Library Collections +Library urllib3 +Library DatabaseLibrary + +*** Variables *** +${header} {'content-type':'application/json','X-APP-ID':'470236309865238528'} +${url} http://api-client-ztb-test.qniao.cn + +*** Test Cases *** +userlogin + [Setup] + #验证码登录 + Disable Warnings + Create Session ZTBT https://api-client-uec-test.qniao.cn ${header} + ${data} Create Dictionary account=18888888888 captcha=888888 accountType=2 + ${account} Set Variable 18888888888 + #${data} Set Variable {"accountType":2,"account":"${account}","captcha":888888} + ${respones} POST On Session ZTBT uec/authorize/by-captcha json=${data} + log ${respones.status_code} + log ${respones.json()} + ${token} Get From Dictionary ${respones.json()["data"]} token + Set Global Variable ${token} + Set Global Variable ${account} + [Teardown] + +login-token + #${header} Create Dictionary content-type=application/json X-APP-ID=470236309865238528 + Create Session ZTBT ${url} ${header} + ${token1} Create Dictionary loginToken=${token} + ${reps} Post On Session ZTBT recycle-user-center/authorize/get/product-line-token/by/login-token json=${token1} + ${gettoken} Get From Dictionary ${reps.json()["data"]} token #获取token + ${userId} Get From Dictionary ${reps.json()["data"]} userId #获取用户id + log ${reps.json()["data"]["token"]} + Set Global Variable ${gettoken} + Set Global Variable ${userId} diff --git a/001-Activeorder/1-Client(Test)/2.2createActiveorder-1.robot b/001-Activeorder/1-Client(Test)/2.2createActiveorder-1.robot new file mode 100644 index 0000000..9f585e2 --- /dev/null +++ b/001-Activeorder/1-Client(Test)/2.2createActiveorder-1.robot @@ -0,0 +1,75 @@ +*** Settings *** +Library DateTime +Library Collections +Library RequestsLibrary + +*** Variables *** +${url} http://api-client-ztb-test.qniao.cn +${headers} {'content-type':'application/json','X-APP-ID':'470236309865238528','Authorization':'QNT ${gettoken}'} + +*** Test Cases *** +proxy-sell-activity_list + #获取活动代卖列表 + Create Session ZTBT ${url} ${headers} + ${repsponse} Get On Session ZTBT recycle-service/proxy-sell-activity/list params=pageNum=1&pageSize=15 + ${records} Get From Dictionary ${repsponse.json()["data"]} records #获取代卖活动列表 + FOR ${item} IN @{records} + ${activityName} Get From Dictionary ${item} activityName #获取活动名称 + ${paperCategoryList} Get From Dictionary ${item} paperCategoryList #获取纸厂品类 + ${paperMillId} Get From Dictionary ${item} paperMillId #获取纸厂id + ${activityId} Get From Dictionary ${item} activityId #获取活动id + Exit For Loop If '${activityName}'=='Ceshi_factory--一次' + END + ${Category_value} Evaluate random.choice(${paperCategoryList}) random #获取纸品列表 + log to console \nvalue: ${Category_value} + ${categoryId} Get From Dictionary ${Category_value} categoryId #获取纸品id + ${categoryName} Get From Dictionary ${Category_value} categoryName #获取纸品名称 + ${unitPrice} Get From Dictionary ${Category_value} unitPrice #获取纸品价格 + Set Global Variable ${paperMillId} + Set Global Variable ${activityId} + Set Global Variable ${categoryId} + Set Global Variable ${categoryName} + Set Global Variable ${unitPrice} + +get-carinfo + #获取使用过的车辆信息 + #${header} Create Dictionary content-type=application/json X-APP-ID=470236309865238528 Authorization=${gettoken} + Create Session get-carinfo ${url} ${headers} + ${reps} Get On Session get-carinfo recycle-service/proxy-sell/get/his-car-info + log ${reps.json()} + ${carNumber} Get From Dictionary ${reps.json()["data"]} records #车辆列表 + ${plateNumber_value} Evaluate random.sample(${carNumber},1) random + log to console \nvalue:${plateNumber_value} + ${plateNumber1} Get From Dictionary ${plateNumber_value[0]} plateNumber #车辆信息1 + #${plateNumber2} Get From Dictionary ${plateNumber_value[1]} plateNumber #车辆信息2 + Set Global Variable ${plateNumber1} + #Set Global Variable ${plateNumber2} + +get_paper-mill-paper-category-price-details + #获取纸厂详情 + Create Session ZTBT ${url} ${headers} + ${reps} Get On Session ZTBT recycle-service/get/paper-mill-paper-category-price-details/${paperMillId} + log ${reps.json()} + +get_relation + #创建用户和业务归属人关系 + Create Session ZTBT ${url} ${headers} + ${reps} Get On Session ZTBT recycle-service/proxy-sell/get/relation + ${bizUserId} Get From Dictionary ${reps.json()["data"]} bizUserId #业务归属人id + ${cusormerId} Get From Dictionary ${reps.json()["data"]} cusormerId #用户id + ${customerName} Get From Dictionary ${reps.json()["data"]} customerName #用户名称 + Set Global Variable ${bizUserId} + Set Global Variable ${cusormerId} + Set Global Variable ${customerName} + +create_order + #创建代卖活动订单-1次付款 + Create Session ZTBT ${url} ${headers} + ${datatime} get current date result_format=%Y-%m-%d + ${order_data} Set Variable { \ \ \ \ "paperCategoryId":"${categoryId}", \ \ \ \ "unitPrice":"${unitPrice}", \ \ \ \ "totalEstimatedWeight":30000, \ \ \ \ "activityId":"${activityId}", \ \ \ \ "customerName":"${customerName}", \ \ \ \ "deliveryTime":"${datatime}", \ \ \ \ "carInfos":[ \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "plateNumber":"${plateNumber1}" \ \ \ \ \ \ \ \ } \ \ \ \ ] } + ${reps} Post On Session ZTBT recycle-service/proxy-sell/create/order ${order_data.encode('utf-8')} + log ${reps.json()} + ${orderId} Get From Dictionary ${reps.json()["data"]} orderId #获取订单编号 + Should Be Equal As Strings ${reps.json()["message"]} successful + Set Global Variable ${orderId} + Set Global Variable ${datatime} diff --git a/001-Activeorder/1-Client(Test)/__init__.robot b/001-Activeorder/1-Client(Test)/__init__.robot new file mode 100644 index 0000000..4d46599 --- /dev/null +++ b/001-Activeorder/1-Client(Test)/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Test Setup diff --git a/001-Activeorder/2-Background_system(Test)/1-WebLogin/weblogin.robot b/001-Activeorder/2-Background_system(Test)/1-WebLogin/weblogin.robot new file mode 100644 index 0000000..f08ffc4 --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/1-WebLogin/weblogin.robot @@ -0,0 +1,21 @@ +*** Settings *** +Library RequestsLibrary + +*** Test Cases *** +pwlogin + ${header} Create Dictionary Content-Type=application/x-www-form-urlencoded X-APP-ID=470236309865238555 + Create Session ZTBT http://api-ops-ztb-test.qniao.cn ${header} + &{data} Create Dictionary username=laiyonglan@qniao.cn password=qn123456 + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/login data=${data} + log ${reps.json()} + ${gettoken} Set Variable Token 6b08add42d6bcf73abb935b2adf83525 + Should Be Equal As Strings ${reps.json()["message"]} 登陆成功 + Set Global Variable ${gettoken} + +login-info + ${header} Create Dictionary X-APP-ID=470236309865238555 Authorization=Token 6b08add42d6bcf73abb935b2adf83525 + Create Session login-info http://api-ops-ztb-test.qniao.cn ${header} + ${reps_data} Get On Session login-info recycle-service/admin/employee/get/login-info + log ${reps_data} + Should Be Equal As Strings ${reps_data.json()["message"]} successful diff --git a/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot new file mode 100644 index 0000000..60ad6a2 --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot @@ -0,0 +1,57 @@ +*** Settings *** +Documentation 预约送货 +Library RequestsLibrary +Library Collections +Library DateTime + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_paper-mill-order-reservation-list + Create Session ZTBT ${URL} ${header} + ${reps_data} Get On Session ZTBT recycle-service/admin/customer-service/get/paper-mill-order-reservation-list params=pageNum=1&pageSize=10&status=&orderId=${orderId} + log ${reps_data.json()} + #获取订单编号${orderId}、纸厂id${paperMillId}、订单类型${orderType} + ${orderId} Get From Dictionary ${reps_data.json()["data"]["records"][0]} orderId #订单编号 + ${paperMillId} Get From Dictionary ${reps_data.json()["data"]["records"][0]} paperMillId #纸厂id + ${id} Get From Dictionary ${reps_data.json()["data"]["records"][0]} id #预约id + ${orderType} Get From Dictionary ${reps_data.json()["data"]["records"][0]} orderType #订单类型 + ${carNoList} Get From Dictionary ${reps_data.json()["data"]["records"][0]} carNoList #车辆信息列表 + ${paperMillName} Get From Dictionary ${reps_data.json()["data"]["records"][0]} paperMillName #纸厂名称 + ${sellerReservationDate} Get From Dictionary ${reps_data.json()["data"]["records"][0]} sellerReservationDate #送货时间 + #随机获取车辆信息 + ${carList} Evaluate random.choice(${carNoList}) random + log to console \nvalue:${carList} + Should Be Equal As Strings ${reps_data.json()["message"]} successful + Set Global Variable ${orderId} + Set Global Variable ${paperMillId} + Set Global Variable ${id} + Set Global Variable ${paperMillName} + Set Global Variable ${sellerReservationDate} + Set Global Variable ${orderType} + Set Global Variable ${carList} + +get-supplier + Create Session ZTBT http://api-ops-ztb-test.qniao.cn ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/paper-mill-merchant/${paperMillId} params=paperMillId=${paperMillId} + log ${reps.json()} + #获取供应商id和name + ${data} Get From Dictionary ${reps.json()} data + ${value} Evaluate random.choice(${data}) random + log to console \nvalue: ${value} + ${supplier_id} Get From Dictionary ${value} id #供应商id + ${millSupplierName} Get From Dictionary ${value} name #供应商名称 + Set Global Variable ${supplier_id} + Set Global Variable ${millSupplierName} + +Submit-appointment + #${headers} Create Dictionary Content-Type=application/json X-APP-ID=470236309865238555 Authorization=Token 6b08add42d6bcf73abb935b2adf83525 + #提交预约信息 + Create Session ZTBT ${URL} ${header} + ${datatime} get current date result_format=%Y-%m-%d + ${data} Set Variable {"attention":"${orderId}","buyerReservationDate":"${datatime}", "id":"${id}","millDeliveryOrderId":"${orderId}","millSupplierId":"${supplier_id}","millSupplierName":"${millSupplierName}","proxySellerSettleType":0,"scrapeOrderId":"${orderId}"} + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/customer-service/update/reservation ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful diff --git a/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/2.2-RegularUpload-weightnote-1.robot b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/2.2-RegularUpload-weightnote-1.robot new file mode 100644 index 0000000..e0cf50b --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/2.2-RegularUpload-weightnote-1.robot @@ -0,0 +1,205 @@ +*** Settings *** +Documentation 上传磅单-一次付款活动 +Library DateTime +Library RequestsLibrary +Library Collections +Library requests + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get-order-item-list + #查找预约的订单项列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order-item-list params=orderType=${orderType} &pageNum=1&pageSize=10&status=51&orderId=${orderId} + log ${reps.json()} + ${records} Get From Dictionary ${reps.json()["data"]} records #获取订单列表 + ${orderItemId_value} Evaluate random.choice(${records}) random #随机获取订单信息 + log to console \nvalue: ${orderItemId_value} + ${orderItemId} Get From Dictionary ${orderItemId_value} orderItemId #订单项编号 + Set Global Variable ${orderItemId} + #Should Be Equal As Strings ${reps.json()["data"]["records"][0]} orderId=${orderId} + +get-order-item-details + #获取订单详情信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId} &orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${paperMillId} Get From Dictionary ${reps.json()["data"]} paperMillId #纸厂id + ${paperCategoryPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类价格 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${activitySettleType} Get From Dictionary ${reps.json()["data"]} activitySettleType #活动订单结算方式 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${交易主体id} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseId #交易主体id + ${交易主体name} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseName #交易主体name + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]} unitSurcharge #代卖费单价 + ${settleUtiPriceIncludeTaxType} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} settleUtiPriceIncludeTaxType #含税补贴类型 + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + ${settleUtiPrice}= Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + ${unitSurcharge} Set Variable If '${unitSurcharge}'=='${None}' 0 ${unitSurcharge} + Set Global Variable ${contractId} + Set Global Variable ${paperMillId} + Set Global Variable ${paperCategoryPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${activitySettleType} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${settleUtiPrice} + Set Global Variable ${交易主体id} + Set Global Variable ${交易主体name} + Set Global Variable ${unitSurcharge} + Set Global Variable ${settleUtiPriceIncludeTaxType} + +get_delivery-info + #获取订单名片信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/proxy-sell/get/proxy-order/delivery-info/${orderItemId} + log ${reps.json()} + ${plateNumber} Get From Dictionary ${reps.json()["data"]} plateNumber #车牌号 + ${settleUtiPrice} Get From Dictionary ${reps.json()["data"]} settleUtiPrice #结算单价 + Set Global Variable ${plateNumber} + Set Global Variable ${settleUtiPrice} + +get_contract_by_id + #获取下单时绑定的合同 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/contract/get/detail-by-id params=id=${contractId} + log ${reps.json()} + #获取垫资费、企业ID、应收金额结算规则、含税结算单价结算规则 + ${advanceFund} Get From Dictionary ${reps.json()["data"]} advanceFund #垫资费 + ${accountPeriod} Get From Dictionary ${reps.json()["data"]} accountPeriod #账期 + ${buyerEnterpriseId} Get From Dictionary ${reps.json()["data"]} buyerEnterpriseId #企业id + ${settlePriceIncludeTaxSettleRules} Get From Dictionary ${reps.json()["data"]} settlePriceIncludeTaxSettleRules #含税结算单价结算规则 + ${taxRefundRate} Get From Dictionary ${reps.json()["data"]} taxRefundRate #税点 + ${proxyPaySurcharge} Get From Dictionary ${reps.json()["data"]} proxyPaySurcharge #代收费 + ${hasInvoice} Get From Dictionary ${reps.json()["data"]} hasInvoice #是否开票 + ${accountPeriodType} Get From Dictionary ${reps.json()["data"]} accountPeriodType #账期类型 + ${isSubsidyAndDeductIncludeTax} Get From Dictionary ${reps.json()["data"]} isSubsidyAndDeductIncludeTax #纸厂补贴是否含税 + ${receivableSettlementRules} Get From Dictionary ${reps.json()["data"]} settleRules #应收金额结算规则 + ${settlePriceIncludeTaxSettleRules} Get From Dictionary ${reps.json()["data"]} settlePriceIncludeTaxSettleRules #含税结算单价结算规则 + ${advanceFund} Set Variable If '${advanceFund}'=='${None}' 0 ${advanceFund} + ${proxyPaySurcharge} Set Variable If '${proxyPaySurcharge}'=='${None}' 0 ${proxyPaySurcharge} + Set Global Variable ${advanceFund} + Set Global Variable ${accountPeriod} + Set Global Variable ${buyerEnterpriseId} + Set Global Variable ${taxRefundRate} + Set Global Variable ${proxyPaySurcharge} + Set Global Variable ${hasInvoice} + Set Global Variable ${accountPeriodType} + Set Global Variable ${settlePriceIncludeTaxSettleRules} + Set Global Variable ${isSubsidyAndDeductIncludeTax} + Set Global Variable ${receivableSettlementRules} + Set Global Variable ${settlePriceIncludeTaxSettleRules} + +get-contract-list + #获取订单纸厂的所有合同信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT /recycle-service/admin/contract/get/selectable-contract-list params=orderItemId=${orderItemId} + log ${reps.json()} + +get-supplier + #获取纸厂供应商 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/paper-mill-merchant/${paperMillId} params=paperMillId=${paperMillId} + log ${reps.json()} + +get-Source of funds + #获取资金来源 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/fund-source/get/list + log ${reps.json()} + ${data} Get From Dictionary ${reps.json()} data + FOR ${item} IN @{data} + log ${item} + ${isDefault} Get From Dictionary ${item} isDefault #获取启用状态 + ${name} Get From Dictionary ${item} name #获取name + ${id} Get From Dictionary ${item} id #获取id + Exit For Loop If '${isDefault}'=='1' + END + Set Global Variable ${name} + Set Global Variable ${id} + +get-Warehouse + #获取所属仓库 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/transaction-main-enterprise/get/warehouse-name + ${仓库} Get From Dictionary ${reps.json()} data + #随机获取仓库 + ${所属仓库} Evaluate random.choice(${仓库}) random + log to console \nvalue:${所属仓库} + Set Global Variable ${所属仓库} + +get_proxy-order_delivery-info + #获取订单名片信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/proxy-sell/get/proxy-order/delivery-info/${orderItemId} + log ${reps.json()} + ${plateNumber} Get From Dictionary ${reps.json()["data"]} plateNumber #车牌号 + ${settleUtiPrice} Get From Dictionary ${reps.json()["data"]} settleUtiPrice #结算单价 + Set Global Variable ${plateNumber} + Set Global Variable ${settleUtiPrice} + +get_paper-mill-category + #获取当前纸厂的所有纸品品类 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/paperMill/get/paper-mill-category/${paperMillId} params=id=${paperMillId} + log ${reps.json()} + +Upload_pictures + #上传图片 + #${dict} Create Dictionary Content-Type=image/jpeg filename=20210803.jpg + #Create Session ZTBT ${URL} ${dict} + ${filepath} Evaluate open('./16pic_6879381_b.jpg','rb') + ${image} Evaluate open('./16pic_6879381_b.jpg','rb') + ${file} Create Dictionary filepath=${filepath} image=${image} + Create Session ZTBT ${URL} + log ${file} + ${result} Post On Session ZTBT recycle-user-center/upload/image files=${file} + ${pictures} Get From Dictionary ${result.json()} data + log ${result.content} + Set Global Variable ${pictures} + +get_repeat_proxy-order + #获取重复订单信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/repeat/proxy-order params=orderItemId=${orderItemId}&plateNumber=${carList}&settleWeight=14800&weighingDate=${datatime}&orderType=${orderType}&settlePrice=29466.6 + ${records} Get From Dictionary ${reps.json()["data"]} records #获取重复订单列表 + ${orderItemId_list} Create List + #sleep 0.5 + FOR ${items} IN @{records} + ${orderItemId} Get From Dictionary ${items} orderItemId + Append To List ${orderItemId_list} '''${orderItemId}''' + END + Should Be Equal As Strings ${reps.json()["message"]} successful + Set Global Variable ${orderItemId_list} + +repeat_proxy-order + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "remark":"${datatime}", \ \ \ \ "repeatOrderItem":${orderItemId_list} } + ${reps} Post On Session ZTBT recycle-service/admin/customer-service/confirm/repeat/proxy-order ${data.encode('utf-8')} + +weightnote + #提交磅单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "deductedPoint":0, \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "scrapeOrderId":"", \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "unitPrice":"${paperCategoryPrice}", \ \ \ \ "paperCategoryId":"${categoryId}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "settleUtiPriceIncludeTax":1.6608157894736841, \ \ \ \ "settleUtiPriceIncludeTaxType":"${settleUtiPriceIncludeTaxType}", \ \ \ \ "receivableAdjustMoney":"30", \ \ \ \ "refundSubsidy":0.002, \ \ \ \ "adjustMoney":"20", \ \ \ \ "collectionCharges":"${proxyPaySurcharge}", \ \ \ \ "advanceFund":"${advanceFund}", \ \ \ \ "transactionMainEnterpriseId":"${交易主体id}", \ \ \ \ "contractId":"${contractId}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlePriceIncludeTaxSettleRules":"${settlePriceIncludeTaxSettleRules}", \ \ \ \ "settleUtiPrice":"${settleUtiPrice}", \ \ \ \ "netWeight":20000, \ \ \ \ "activitySettleType":null, \ \ \ \ "unitSurcharge":"${unitSurcharge}", \ \ \ \ "deliveryImageUrls":[ \ \ \ \ \ ], \ \ \ \ "publicSubsidies":0, \ \ \ \ "orderId":"${orderId}", \ \ \ \ "nonStandardPenalty_car":"", \ \ \ \ "settleWeight":10000, \ \ \ \ "deductedWeight":0, \ \ \ \ "orderType":1, \ \ \ \ "otherAmountList":[ \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"freightSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"contrabandPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":2, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":15, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"nonStandardPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ } \ \ \ \ ] } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/save/weightnote ${data.encode('utf-8')} + log ${reps.json()} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId #磅单编号 + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + Set Global Variable ${datatime} + +audit_weightnote + #磅单审核接口 + Create Session ZTBT ${URL} ${header} + ${repsonse} Post On Session ZTBT recycle-service/admin/customer-service/audit/weightnote/${weightNoteId} + log ${repsonse.json()} + +get_proxy-order + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful diff --git a/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/3.2-Operation_audit.robot b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/3.2-Operation_audit.robot new file mode 100644 index 0000000..19ebb6c --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/3.2-Operation_audit.robot @@ -0,0 +1,80 @@ +*** Settings *** +Documentation 运用审核-一次付款活动 +Library RequestsLibrary +Library Collections +Library DateTime + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0 + log ${reps.json()} + +get_paper-mill-order-by-orderItemId + #根据订单编号获取运营审核单 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=${orderItemId} + log ${reps.json()} + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId #获取审核id + ${weightNoteId} Get From Dictionary ${reps.json()["data"]["records"][0]} weightNoteId #获取磅单id + Set Global Variable ${auditRequestId} + Set Global Variable ${weightNoteId} + +get_order-log-detail + #获取订单日志 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId} + log ${reps.json()} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${surcharge1} Evaluate ${unitSurcharge}*${netWeight} + ${surcharge2} Evaluate ${unitSurcharge}*${settleWeight} + ${surcharge} Set Variable If '${proxySellerSettleType}'=='0' ${surcharge1} ${surcharge2} #代卖费总额 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${datatime} + +order-receipt-audit-details + #b保存磅单信息 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +get_order-log-detail2 + #运营审核驳回操作日志 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId} &operationStatus=2 + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful + +operation_audit + #运营审核确认通过 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":1, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + sleep 1 diff --git a/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/__init__.robot b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/__init__.robot new file mode 100644 index 0000000..e69de29 diff --git a/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt new file mode 100644 index 0000000..2071449 --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt @@ -0,0 +1,21 @@ +*** Settings *** +Library Collections +Library RequestsLibrary + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +台账查询 + #获取台账列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/parameter/get/parameter params=pageNum=1&pageSize=10&withdrawState=&state=&orderItemId=${orderItemId} + ${台账列表数据} Get From List ${reps.json()["data"]["records"]} 0 #获取台账列表数据 + #Set Global Variable ${台账列表数据} + Should Be Equal As Numbers ${netWeight} ${reps.json()["data"]["records"][0]["netWeight"]} + Should Be Equal As Numbers ${unitSurcharge} ${reps.json()["data"]["records"][0]["unitSurcharge"]} + Should Be Equal As Numbers ${settleWeight} ${reps.json()["data"]["records"][0]["settleWeight"]} + Should Be Equal As Numbers ${settleUnitPrice} ${reps.json()["data"]["records"][0]["settleUtiPrice"]} + Should Be Equal As Numbers ${receivableAdjustMoney} ${reps.json()["data"]["records"][0]["receivableAdjustMoney"]} + Should Be Equal As Numbers ${adjustMoney} ${reps.json()["data"]["records"][0]["adjustMoney"]} diff --git a/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt new file mode 100644 index 0000000..6545de7 --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt @@ -0,0 +1,172 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +获取磅单详情 + #查看订单列表详情 + Create Session ZTBT ${URL} ${header} + #${data} Set Variable orderId=${orderId} orderItemId=${orderItemId} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #当前订单下单时的合同id + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} unitSurcharge #代卖费 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类ID + ${unitPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类单价 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${millSupplierId} Get From Dictionary ${reps.json()["data"]} millSupplierId #纸厂供应商ID + ${paperMillSupplierName} Get From Dictionary ${reps.json()["data"]} paperMillSupplierName #纸厂供应商名称 + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + #${settleUtiPrice} Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + ${unitSurcharge} Set Variable If '${unitSurcharge}'=='${None}' 0 ${unitSurcharge} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${磅单id} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} id #获取磅单id + ${status} Get From Dictionary ${reps.json()["data"]} status + ${receivableAdjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} receivableAdjustMoney #获取应收调节费 + ${adjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} adjustMoney #获取调节费 + ${receivableAdjustMoney} Set Variable If '${receivableAdjustMoney}'=='${None}' 0 ${receivableAdjustMoney} + ${adjustMoney} Set Variable If '${adjustMoney}'=='${None}' 0 ${adjustMoney} + ${settleUtiPrice} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleUtiPrice #获取结算单价 + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleWeight #获取结算重量 + ${netWeight1} Evaluate ${netWeight}+30 + FOR ${净重index} IN RANGE ${netWeight} 30 + Exit For Loop If '${净重index}'=='${netWeight1}' + END + ${settleWeight1} Evaluate ${settleWeight}+30 + FOR ${结算重量index} IN RANGE ${settleWeight} 30 + Exit For Loop If '${结算重量index}'=='${settleWeight1}' + END + ${unitSurcharge1} Evaluate ${unitSurcharge}+0.001 + FOR ${代卖费index} IN RANGE ${unitSurcharge} 100 + Exit For Loop If '${代卖费index}'=='${unitSurcharge1}' + END + ${settleUtiPrice1} Evaluate ${settleUtiPrice}+0.1 + FOR ${结算单价index} IN RANGE ${settleUtiPrice} 100 + Exit For Loop If '${结算单价index}'=='${settleUtiPrice1}' + END + ${receivableAdjustMoney1} Evaluate ${receivableAdjustMoney}+10 + FOR ${应收调节费index} IN RANGE ${receivableAdjustMoney} 500 + Exit For Loop If '${应收调节费index}'=='${receivableAdjustMoney1}' + END + ${adjustMoney1} Evaluate ${adjustMoney}+10 + FOR ${应收调节费index} IN RANGE ${adjustMoney} 500 + Exit For Loop If '${应收调节费index}'=='${adjustMoney1}' + END + Set Global Variable ${contractId} + Set Global Variable ${unitSurcharge} + Set Global Variable ${paperCategoryId} + Set Global Variable ${settleUtiPrice1} + Set Global Variable ${unitPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${millSupplierId} + Set Global Variable ${paperMillSupplierName} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${contractId} + Set Global Variable ${netWeight1} + Set Global Variable ${settleWeight1} + Set Global Variable ${磅单id} + Set Global Variable ${status} + Set Global Variable ${unitSurcharge1} + Set Global Variable ${adjustMoney1} + Set Global Variable ${receivableAdjustMoney1} + +weightnote + #驳回后重新提交磅单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "deductedPoint":0, \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "unitPrice":"${unitPrice}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "settleUtiPriceIncludeTax":2.04012, \ \ \ \ "settleUtiPriceIncludeTaxType":1, \ \ \ \ "receivableAdjustMoney":"${receivableAdjustMoney1}", \ \ \ \ "refundSubsidy":0.002, \ \ \ \ "adjustMoney":"${adjustMoney1}", \ \ \ \ "collectionCharges":"${proxyPaySurcharge}", \ \ \ \ "advanceFund":"${advanceFund}", \ \ \ \ "contractId":"${contractId}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "transactionMainEnterpriseId":"${交易主体id}", \ \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "plateNumber":"${carList}", \ \ \ \ "settlePriceIncludeTaxSettleRules":"${settlePriceIncludeTaxSettleRules}", \ \ \ \ "settleUtiPrice":"${settleUtiPrice1}", \ \ \ \ "netWeight":"${netWeight1}", \ \ \ \ "activitySettleType":null, \ \ \ \ "unitSurcharge":"${unitSurcharge1}", \ \ \ \ "deliveryImageUrls":[ \ \ \ \ \ ], \ \ \ \ "publicSubsidies":0, \ \ \ \ "isSubsidyAndDeductIncludeTax":0, \ \ \ \ "orderId":"${orderId}", \ \ \ \ "settleWeight":"${settleWeight1}", \ \ \ \ "deductedWeight":2, \ \ \ \ "orderType":"${orderType}", \ \ \ \ "otherAmountList":[ \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"freightSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"contrabandPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"nonStandardPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ } \ \ \ \ ], \ \ \ \ "id":"${磅单id}" \ \ \ \ } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/update/weightnote ${data.encode('utf-8')} + log ${reps.json()["data"]} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + +获取上传磅单后的订单详情 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${settleUnitPrice} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleUtiPrice #获取结算单价 + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} unitSurcharge #获取代卖费 + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleWeight #获取结算重量 + ${receivableAdjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} receivableAdjustMoney #获取应收调节费 + ${adjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} adjustMoney #获取调节费 + Set Global Variable ${settleUnitPrice} + Set Global Variable ${unitSurcharge} + Set Global Variable ${netWeight} + Set Global Variable ${settleWeight} + Set Global Variable ${receivableAdjustMoney} + Set Global Variable ${adjustMoney} + +获取送货单详情 + #获取订单详情信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId} &orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${paperMillId} Get From Dictionary ${reps.json()["data"]} paperMillId #纸厂id + ${paperCategoryPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类价格 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${activitySettleType} Get From Dictionary ${reps.json()["data"]} activitySettleType #活动订单结算方式 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${交易主体id} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseId #交易主体id + ${交易主体name} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseName #交易主体name + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]} unitSurcharge #代卖费单价 + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + ${settleUtiPrice}= Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${磅单id} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} id #获取磅单id + ${status} Get From Dictionary ${reps.json()["data"]} status + ${unitSurcharge3} Evaluate ${unitSurcharge}+0.001 + FOR ${代卖费index} IN RANGE ${unitSurcharge} 100 + Exit For Loop If '${代卖费index}'=='${unitSurcharge3}' + END + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${netWeight3} Evaluate ${netWeight}+300 + FOR ${净重index} IN RANGE ${netWeight} 30 + Exit For Loop If '${净重index}'=='${netWeight3}' + END + Set Global Variable ${contractId} + Set Global Variable ${paperMillId} + Set Global Variable ${paperCategoryPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${activitySettleType} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${settleUtiPrice} + Set Global Variable ${交易主体id} + Set Global Variable ${交易主体name} + Set Global Variable ${unitSurcharge3} + Set Global Variable ${netWeight3} + Set Global Variable ${磅单id} + Set Global Variable ${status} + +上传送货单 + #上传送货单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "settleUtiPrice":"${settleUtiPrice}", \ \ \ \ "publicSubsidies":0, \ \ \ \ "netWeight":"${netWeight3}", \ \ \ \ "settleWeight":null, \ \ \ \ "unitSurcharge":${unitSurcharge3}, \ \ \ \ "transactionMainEnterpriseId":"${交易主体id}", \ \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "activitySettleType":"${activitySettleType}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "remark":null, \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "orderId":"${orderId}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "settlePrice":0, \ \ \ \ "contractId":"${contractId}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "orderType":"${orderType}", \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "otherAmountList":[ \ \ \ \ \ ], \ \ \ \ "unitPrice":"${paperCategoryPrice}", \ \ \ \ "id":"${磅单id}" \ \ \ \ \ } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/update/weightnote ${data.encode('utf-8')} + log ${reps.json()} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId #磅单编号 + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + Set Global Variable ${datatime} + +获取上传送货单后的订单详情 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} unitSurcharge #获取代卖费 + Set Global Variable ${netWeight} + Set Global Variable ${unitSurcharge} + +audit_weightnote + Create Session ZTBT ${URL} ${header} + ${repsonse} Post On Session ZTBT recycle-service/admin/customer-service/audit/weightnote/${weightNoteId} + log ${repsonse.json()} diff --git a/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt new file mode 100644 index 0000000..2098597 --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt @@ -0,0 +1,61 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=&orderId=${orderId} + ${audit_status} Get From Dictionary ${reps.json()["data"]["records"][0]} status + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Set Global Variable ${audit_status} + Set Global Variable ${auditRequestId} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${settleWeight} Set Variable If '${settleWeight}'=='None' 0 ${settleWeight} + ${surcharge1} Evaluate ${unitSurcharge}*${netWeight} + ${surcharge2} Evaluate ${unitSurcharge}*${settleWeight} + ${surcharge} Set Variable If '${proxySellerSettleType}'=='0' ${surcharge1} ${surcharge2} #代卖费总额 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]} auditRequestId + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${surcharge} + Set Global Variable ${auditRequestId} + +保存磅单信息 + #b保存磅单信息 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d #获取当前时间 + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +运营审核驳回 + #运营审核驳回 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":2, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} diff --git a/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot b/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot new file mode 100644 index 0000000..ee4cd03 --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot @@ -0,0 +1,41 @@ +*** Settings *** +Documentation 代卖应付 +Library RequestsLibrary +Library Collections +Resource 财务审核驳回.txt +Resource 运营审核通过.txt +Resource 台账查询.txt + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${url} http://api-ops-psc-test.qniao.cn +${URL1} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_list + #获取财务审核列表 + Create Session ZTBT ${url} ${header} + ${reps} Get On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/get/list params=pageNum=1&pageSize=10&status=&orderId=&orderItemId=${orderItemId} + ${auditedTime} Get From Dictionary ${reps.json()["data"]["records"][0]} auditedTime #财务第一次确认结算时间 + Should Be Equal As Strings ${reps.json()["message"]} successful + #Set Global Variable ${auditedTime} + +get_order-log-detail + #财务审核驳回操作记录 + Create Session ZTBT ${URL1} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId}&operationStatus=3 + +paper-mill-order-receipt-proof-request_audit + #财务审核确认通过 + Create Session ZTBT ${url} ${header} + ${data} Set Variable {"auditRequestId":"${auditRequestId}","adminId":null,"isPass":1,"remark":"${datatime}" } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/audit ${data.encode('utf-8')} + log ${reps.json()} + sleep 1 + +paper-mill-order-receipt-proof-request_settle + #确认结算 + Create Session ZTBT ${url} ${header} + ${data} Set Variable { \ \ \ \ "id":"${auditRequestId}", \ \ \ \ "adminId":null } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/settle ${data.encode('utf-8')} + sleep 1 diff --git a/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot b/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot new file mode 100644 index 0000000..3ebbe95 --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot @@ -0,0 +1,36 @@ +*** Settings *** +Documentation 代卖应收 +Library RequestsLibrary +Library Collections + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_paper-payment-order-list + #通过订单编号获取代卖应收列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-payment-order-list params=pageNum=1&pageSize=10&orderId=${orderId} + ${paymentOrderId} Get From Dictionary ${reps.json()["data"]["records"][0]} id #回款单号 + log ${reps.json()} + Set Global Variable ${paymentOrderId} + +get_order-receipt-audit-details + #代卖应收详情 + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + ${receivablePriceIncludeTax} Get From Dictionary ${reps.json()["data"]["items"][0]} receivablePriceIncludeTax + #${receivablePrice} Get From Dictionary ${reps.json()["data"]["items"][0]} receivablePrice #获取应收金额 + ${noReceivablePrice} Get From Dictionary ${reps.json()["data"]["items"][0]} noReceivablePrice #获取未收金额 + #Set Global Variable ${receivablePrice} + Set Global Variable ${receivablePriceIncludeTax} + Set Global Variable ${noReceivablePrice} + +update_payment-order-status + #确认回款操作 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ \ \ \ "paymentOrderId":"${paymentOrderId}", \ \ \ \ "receivablePrice":"${receivablePriceIncludeTax}", \ \ \ \ "paidPrice":"${receivablePriceIncludeTax}", \ \ \ \ "noReceiveblePrice":"${noReceivablePrice}", \ \ \ \ "bankFlowNo":null, \ \ \ \ "paymentAdjustmentFee":null, \ \ \ \ "returnPayDate":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/update/payment-order-status ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + sleep 1 diff --git a/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt b/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt new file mode 100644 index 0000000..64abf98 --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt @@ -0,0 +1,20 @@ +*** Settings *** +Library Collections +Library RequestsLibrary + +*** Variables *** +${URL1} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +台账查询 + #获取台账列表 + Create Session ZTBT ${URL1} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/parameter/get/parameter params=pageNum=1&pageSize=10&withdrawState=&state=&orderItemId=${orderItemId} + ${台账列表数据} Get From List ${reps.json()["data"]["records"]} 0 #获取台账列表数据 + #Set Global Variable ${台账列表数据} + #${receivableAdjustMoney1} Get From Dictionary ${reps.json()["data"]["records"][0]} receivableAdjustMoney #获取应收调节费 + #${receivableAdjustMoney1} Set Variable If '${receivableAdjustMoney}'=='None' Should Not Be Equal As Numbers ${receivableAdjustMoney} ${receivableAdjustMoney1} + #Should Be Equal As Numbers ${receivableAdjustMoney} ${reps.json()["data"]["records"][0]["receivableAdjustMoney"]} #对比应收调节费 + Should Be Equal As Numbers ${noReceivablePrice} ${reps.json()["data"]["records"][0]["noReceivablePrice"]} #对比未收款金额 + Should Be Equal As Strings ${paperMillPayAt} ${reps.json()["data"]["records"][0]["paperMillPayAt"]} #对比预计回款日期 diff --git a/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt b/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt new file mode 100644 index 0000000..d9f1ba8 --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt @@ -0,0 +1,30 @@ +*** Settings *** +Library Collections +Library DateTime +Library RequestsLibrary + +*** Variables *** +${URL1} http://api-ops-ztb-test.qniao.cn +${url} http://api-ops-psc-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +获取财务审核列表 + #获取财务审核列表 + Create Session ZTBT ${url} ${header} + ${reps} Get On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/get/list params=pageNum=1&pageSize=10&status=&orderId=&orderItemId=${orderItemId} + #${auditedTime} Get From Dictionary ${reps.json()["data"]["records"][0]} auditedTime #财务第一次确认结算时间 + ${staus} Get From Dictionary ${reps.json()["data"]["records"][0]} status #获取审核状态 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Should Be Equal As Strings ${reps.json()["message"]} successful + #Set Global Variable ${auditedTime} + Set Global Variable ${staus} + Set Global Variable ${auditRequestId} + +财务驳回 + #财务审核驳回 + Create Session ZTBT ${url} ${header} + ${data} Set Variable {"auditRequestId":"${auditRequestId}","adminId":null,"isPass":2,"remark":"${datatime}" } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/audit ${data.encode('utf-8')} + log ${reps.json()} + sleep 1 diff --git a/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt b/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt new file mode 100644 index 0000000..74be8e4 --- /dev/null +++ b/001-Activeorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt @@ -0,0 +1,72 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL1} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL1} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=&orderId=${orderId} + ${audit_status} Get From Dictionary ${reps.json()["data"]["records"][0]} status + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Set Global Variable ${audit_status} + Set Global Variable ${auditRequestId} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL1} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]["items"][0]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${settleWeight} Set Variable If '${settleWeight}'=='None' 0 ${settleWeight} + ${surcharge1} Evaluate ${unitSurcharge}*${netWeight} + ${surcharge2} Evaluate ${unitSurcharge}*${settleWeight} + ${surcharge} Set Variable If '${proxySellerSettleType}'=='0' ${surcharge1} ${surcharge2} #代卖费总额 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]} auditRequestId + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${surcharge} + Set Global Variable ${auditRequestId} + +order-receipt-audit-details + #b保存磅单信息 + Create Session ZTBT ${URL1} ${header} + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +运营审核通过 + #运营审核通过 + Create Session ZTBT ${URL1} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":1, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} + +运营审核后详情 + #查看运营审核详情 + Create Session ZTBT ${URL1} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + ${noReceivablePrice} Get From Dictionary ${reps.json()["data"]["items"][0]} noReceivablePrice #获取未收款金额 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #获取计划回款日期 + ${receivableAdjustMoney} Get From Dictionary ${reps.json()["data"]["items"][0]} receivableAdjustMoney #获取应收调节费 + #${noReceivablePrice} Evaluate ${noReceivablePrice}+1 + Set Global Variable ${noReceivablePrice} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${receivableAdjustMoney} diff --git a/002-Activeorder/1-Client(Test)/1-APPlogin(Test).robot b/002-Activeorder/1-Client(Test)/1-APPlogin(Test).robot new file mode 100644 index 0000000..5e7cc34 --- /dev/null +++ b/002-Activeorder/1-Client(Test)/1-APPlogin(Test).robot @@ -0,0 +1,37 @@ +*** Settings *** +Library RequestsLibrary +Library Collections +Library urllib3 +Library DatabaseLibrary + +*** Variables *** +${header} {'content-type':'application/json','X-APP-ID':'470236309865238528'} +${url} http://api-client-ztb-test.qniao.cn + +*** Test Cases *** +userlogin + [Setup] + #验证码登录 + Disable Warnings + Create Session ZTBT https://api-client-uec-test.qniao.cn ${header} + ${data} Create Dictionary account=18888888888 captcha=888888 accountType=2 + ${account} Set Variable 18888888888 + #${data} Set Variable {"accountType":2,"account":"${account}","captcha":888888} + ${respones} POST On Session ZTBT uec/authorize/by-captcha json=${data} + log ${respones.status_code} + log ${respones.json()} + ${token} Get From Dictionary ${respones.json()["data"]} token + Set Global Variable ${token} + Set Global Variable ${account} + [Teardown] + +login-token + #${header} Create Dictionary content-type=application/json X-APP-ID=470236309865238528 + Create Session ZTBT ${url} ${header} + ${token1} Create Dictionary loginToken=${token} + ${reps} Post On Session ZTBT recycle-user-center/authorize/get/product-line-token/by/login-token json=${token1} + ${gettoken} Get From Dictionary ${reps.json()["data"]} token #获取token + ${userId} Get From Dictionary ${reps.json()["data"]} userId #获取用户id + log ${reps.json()["data"]["token"]} + Set Global Variable ${gettoken} + Set Global Variable ${userId} diff --git a/002-Activeorder/1-Client(Test)/2.3createActiveorder-2.robot b/002-Activeorder/1-Client(Test)/2.3createActiveorder-2.robot new file mode 100644 index 0000000..6956ad3 --- /dev/null +++ b/002-Activeorder/1-Client(Test)/2.3createActiveorder-2.robot @@ -0,0 +1,74 @@ +*** Settings *** +Library DateTime +Library Collections +Library RequestsLibrary + +*** Variables *** +${url} http://api-client-ztb-test.qniao.cn +${headers} {'content-type':'application/json','X-APP-ID':'470236309865238528','Authorization':'QNT ${gettoken}'} + +*** Test Cases *** +proxy-sell-activity_list + #获取活动代卖列表 + Create Session ZTBT ${url} ${headers} + ${repsponse} Get On Session ZTBT recycle-service/proxy-sell-activity/list params=pageNum=1&pageSize=15 + ${records} Get From Dictionary ${repsponse.json()["data"]} records #获取代卖活动列表 + FOR ${item} IN @{records} + ${activityName} Get From Dictionary ${item} activityName #获取活动名称 + ${paperCategoryList} Get From Dictionary ${item} paperCategoryList #获取纸厂品类 + ${paperMillId} Get From Dictionary ${item} paperMillId #获取纸厂id + ${activityId} Get From Dictionary ${item} activityId #获取活动id + Exit For Loop If '${activityName}'=='Ceshi_factory--两次' + END + ${Category_value} Evaluate random.choice(${paperCategoryList}) random #获取纸品 + log to console \nvalue: ${Category_value} + ${categoryId} Get From Dictionary ${Category_value} categoryId #获取纸品id + ${categoryName} Get From Dictionary ${Category_value} categoryName #获取纸品名称 + ${unitPrice} Get From Dictionary ${Category_value} unitPrice #获取纸品价格 + Set Global Variable ${paperMillId} + Set Global Variable ${activityId} + Set Global Variable ${categoryId} + Set Global Variable ${categoryName} + Set Global Variable ${unitPrice} + +get-carinfo + #获取使用过的车辆信息 + #${header} Create Dictionary content-type=application/json X-APP-ID=470236309865238528 Authorization=${gettoken} + Create Session get-carinfo ${url} ${headers} + ${reps} Get On Session get-carinfo recycle-service/proxy-sell/get/his-car-info + log ${reps.json()} + ${carNumber} Get From Dictionary ${reps.json()["data"]} records #车辆列表 + ${plateNumber_value} Evaluate random.sample(${carNumber},1) random + log to console \nvalue:${plateNumber_value} + ${plateNumber1} Get From Dictionary ${plateNumber_value[0]} plateNumber #车辆信息1 + #${plateNumber2} Get From Dictionary ${plateNumber_value[1]} plateNumber #车辆信息2 + Set Global Variable ${plateNumber1} + #Set Global Variable ${plateNumber2} + +get_paper-mill-paper-category-price-details + #获取纸厂详情 + Create Session ZTBT ${url} ${headers} + ${reps} Get On Session ZTBT recycle-service/get/paper-mill-paper-category-price-details/${paperMillId} + log ${reps.json()} + +get_relation + #创建用户和业务归属人关系 + Create Session ZTBT ${url} ${headers} + ${reps} Get On Session ZTBT recycle-service/proxy-sell/get/relation + ${bizUserId} Get From Dictionary ${reps.json()["data"]} bizUserId #业务归属人id + ${cusormerId} Get From Dictionary ${reps.json()["data"]} cusormerId #用户id + ${customerName} Get From Dictionary ${reps.json()["data"]} customerName #用户名称 + Set Global Variable ${bizUserId} + Set Global Variable ${cusormerId} + Set Global Variable ${customerName} + +create_order + #创建代卖活动订单-2次付款 + Create Session ZTBT ${url} ${headers} + ${datatime} get current date result_format=%Y-%m-%d + ${order_data} Set Variable { \ \ \ \ "paperCategoryId":"${categoryId}", \ \ \ \ "unitPrice":"${unitPrice}", \ \ \ \ "totalEstimatedWeight":30000, \ \ \ \ "activityId":"${activityId}", \ \ \ \ "customerName":"${customerName}", \ \ \ \ "deliveryTime":"${datatime}", \ \ \ \ "carInfos":[ \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "plateNumber":"${plateNumber1}" \ \ \ \ \ \ \ \ } \ \ \ \ ] } + ${reps} Post On Session ZTBT recycle-service/proxy-sell/create/order ${order_data.encode('utf-8')} + log ${reps.json()} + ${orderId} Get From Dictionary ${reps.json()["data"]} orderId #获取订单编号 + Should Be Equal As Strings ${reps.json()["message"]} successful + Set Global Variable ${orderId} diff --git a/002-Activeorder/1-Client(Test)/__init__.robot b/002-Activeorder/1-Client(Test)/__init__.robot new file mode 100644 index 0000000..4d46599 --- /dev/null +++ b/002-Activeorder/1-Client(Test)/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Test Setup diff --git a/002-Activeorder/2-Background_system(Test)/1-WebLogin/weblogin.robot b/002-Activeorder/2-Background_system(Test)/1-WebLogin/weblogin.robot new file mode 100644 index 0000000..f08ffc4 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/1-WebLogin/weblogin.robot @@ -0,0 +1,21 @@ +*** Settings *** +Library RequestsLibrary + +*** Test Cases *** +pwlogin + ${header} Create Dictionary Content-Type=application/x-www-form-urlencoded X-APP-ID=470236309865238555 + Create Session ZTBT http://api-ops-ztb-test.qniao.cn ${header} + &{data} Create Dictionary username=laiyonglan@qniao.cn password=qn123456 + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/login data=${data} + log ${reps.json()} + ${gettoken} Set Variable Token 6b08add42d6bcf73abb935b2adf83525 + Should Be Equal As Strings ${reps.json()["message"]} 登陆成功 + Set Global Variable ${gettoken} + +login-info + ${header} Create Dictionary X-APP-ID=470236309865238555 Authorization=Token 6b08add42d6bcf73abb935b2adf83525 + Create Session login-info http://api-ops-ztb-test.qniao.cn ${header} + ${reps_data} Get On Session login-info recycle-service/admin/employee/get/login-info + log ${reps_data} + Should Be Equal As Strings ${reps_data.json()["message"]} successful diff --git a/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot new file mode 100644 index 0000000..60ad6a2 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/1-appointment.robot @@ -0,0 +1,57 @@ +*** Settings *** +Documentation 预约送货 +Library RequestsLibrary +Library Collections +Library DateTime + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_paper-mill-order-reservation-list + Create Session ZTBT ${URL} ${header} + ${reps_data} Get On Session ZTBT recycle-service/admin/customer-service/get/paper-mill-order-reservation-list params=pageNum=1&pageSize=10&status=&orderId=${orderId} + log ${reps_data.json()} + #获取订单编号${orderId}、纸厂id${paperMillId}、订单类型${orderType} + ${orderId} Get From Dictionary ${reps_data.json()["data"]["records"][0]} orderId #订单编号 + ${paperMillId} Get From Dictionary ${reps_data.json()["data"]["records"][0]} paperMillId #纸厂id + ${id} Get From Dictionary ${reps_data.json()["data"]["records"][0]} id #预约id + ${orderType} Get From Dictionary ${reps_data.json()["data"]["records"][0]} orderType #订单类型 + ${carNoList} Get From Dictionary ${reps_data.json()["data"]["records"][0]} carNoList #车辆信息列表 + ${paperMillName} Get From Dictionary ${reps_data.json()["data"]["records"][0]} paperMillName #纸厂名称 + ${sellerReservationDate} Get From Dictionary ${reps_data.json()["data"]["records"][0]} sellerReservationDate #送货时间 + #随机获取车辆信息 + ${carList} Evaluate random.choice(${carNoList}) random + log to console \nvalue:${carList} + Should Be Equal As Strings ${reps_data.json()["message"]} successful + Set Global Variable ${orderId} + Set Global Variable ${paperMillId} + Set Global Variable ${id} + Set Global Variable ${paperMillName} + Set Global Variable ${sellerReservationDate} + Set Global Variable ${orderType} + Set Global Variable ${carList} + +get-supplier + Create Session ZTBT http://api-ops-ztb-test.qniao.cn ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/paper-mill-merchant/${paperMillId} params=paperMillId=${paperMillId} + log ${reps.json()} + #获取供应商id和name + ${data} Get From Dictionary ${reps.json()} data + ${value} Evaluate random.choice(${data}) random + log to console \nvalue: ${value} + ${supplier_id} Get From Dictionary ${value} id #供应商id + ${millSupplierName} Get From Dictionary ${value} name #供应商名称 + Set Global Variable ${supplier_id} + Set Global Variable ${millSupplierName} + +Submit-appointment + #${headers} Create Dictionary Content-Type=application/json X-APP-ID=470236309865238555 Authorization=Token 6b08add42d6bcf73abb935b2adf83525 + #提交预约信息 + Create Session ZTBT ${URL} ${header} + ${datatime} get current date result_format=%Y-%m-%d + ${data} Set Variable {"attention":"${orderId}","buyerReservationDate":"${datatime}", "id":"${id}","millDeliveryOrderId":"${orderId}","millSupplierId":"${supplier_id}","millSupplierName":"${millSupplierName}","proxySellerSettleType":0,"scrapeOrderId":"${orderId}"} + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/customer-service/update/reservation ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful diff --git a/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/2.3-ActiveUpload-deliverynote.robot b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/2.3-ActiveUpload-deliverynote.robot new file mode 100644 index 0000000..f577cc8 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/2.3-ActiveUpload-deliverynote.robot @@ -0,0 +1,190 @@ +*** Settings *** +Documentation 上次送货单-两次付款活动 +Library DateTime +Library RequestsLibrary +Library Collections +Library requests + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get-order-item-list + #查找预约的订单项列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order-item-list params=orderType=${orderType} &pageNum=1&pageSize=10&status=51&orderId=${orderId} + log ${reps.json()} + ${records} Get From Dictionary ${reps.json()["data"]} records #获取订单列表 + ${orderItemId_value} Evaluate random.choice(${records}) random #随机获取订单信息 + log to console \nvalue: ${orderItemId_value} + ${orderItemId} Get From Dictionary ${orderItemId_value} orderItemId #订单项编号 + Set Global Variable ${orderItemId} + #Should Be Equal As Strings ${reps.json()["data"]["records"][0]} orderId=${orderId} + +get-order-item-details + #获取订单详情信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId} &orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${paperMillId} Get From Dictionary ${reps.json()["data"]} paperMillId #纸厂id + ${paperCategoryPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类价格 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${activitySettleType} Get From Dictionary ${reps.json()["data"]} activitySettleType #活动订单结算方式 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${交易主体id} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseId #交易主体id + ${交易主体name} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseName #交易主体name + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]} unitSurcharge #代卖费单价 + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + ${settleUtiPrice}= Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + Set Global Variable ${contractId} + Set Global Variable ${paperMillId} + Set Global Variable ${paperCategoryPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${activitySettleType} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${settleUtiPrice} + Set Global Variable ${交易主体id} + Set Global Variable ${交易主体name} + Set Global Variable ${unitSurcharge} + +get_delivery-info + #获取订单名片信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/proxy-sell/get/proxy-order/delivery-info/${orderItemId} + log ${reps.json()} + ${plateNumber} Get From Dictionary ${reps.json()["data"]} plateNumber #车牌号 + ${settleUtiPrice} Get From Dictionary ${reps.json()["data"]} settleUtiPrice #结算单价 + Set Global Variable ${plateNumber} + Set Global Variable ${settleUtiPrice} + +get_contract_by_id + #获取下单时绑定的合同 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/contract/get/detail-by-id params=id=${contractId} + log ${reps.json()} + #获取垫资费、企业ID、应收金额结算规则、含税结算单价结算规则 + ${advanceFund} Get From Dictionary ${reps.json()["data"]} advanceFund #垫资费 + ${accountPeriod} Get From Dictionary ${reps.json()["data"]} accountPeriod #账期 + ${buyerEnterpriseId} Get From Dictionary ${reps.json()["data"]} buyerEnterpriseId #企业id + ${settlePriceIncludeTaxSettleRules} Get From Dictionary ${reps.json()["data"]} settlePriceIncludeTaxSettleRules #含税结算单价结算规则 + ${taxRefundRate} Get From Dictionary ${reps.json()["data"]} taxRefundRate #税点 + ${proxyPaySurcharge} Get From Dictionary ${reps.json()["data"]} proxyPaySurcharge #代收费 + ${hasInvoice} Get From Dictionary ${reps.json()["data"]} hasInvoice #是否开票 + ${accountPeriodType} Get From Dictionary ${reps.json()["data"]} accountPeriodType #账期类型 + ${isSubsidyAndDeductIncludeTax} Get From Dictionary ${reps.json()["data"]} isSubsidyAndDeductIncludeTax #纸厂补贴是否含税 + ${receivableSettlementRules} Get From Dictionary ${reps.json()["data"]} settleRules #应收金额结算规则 + ${settlePriceIncludeTaxSettleRules} Get From Dictionary ${reps.json()["data"]} settlePriceIncludeTaxSettleRules #含税结算单价结算规则 + ${advanceFund} Set Variable If '${advanceFund}'=='${None}' 0 ${advanceFund} + ${proxyPaySurcharge} Set Variable If '${proxyPaySurcharge}'=='${None}' 0 ${proxyPaySurcharge} + Set Global Variable ${advanceFund} + Set Global Variable ${accountPeriod} + Set Global Variable ${buyerEnterpriseId} + Set Global Variable ${taxRefundRate} + Set Global Variable ${proxyPaySurcharge} + Set Global Variable ${hasInvoice} + Set Global Variable ${accountPeriodType} + Set Global Variable ${settlePriceIncludeTaxSettleRules} + Set Global Variable ${isSubsidyAndDeductIncludeTax} + Set Global Variable ${receivableSettlementRules} + Set Global Variable ${settlePriceIncludeTaxSettleRules} + +get-contract-list + #获取订单纸厂的所有合同信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT /recycle-service/admin/contract/get/selectable-contract-list params=orderItemId=${orderItemId} + log ${reps.json()} + +get-supplier + #获取纸厂供应商 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/paper-mill-merchant/${paperMillId} params=paperMillId=${paperMillId} + log ${reps.json()} + +get-Source of funds + #获取资金来源 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/fund-source/get/list + log ${reps.json()} + ${data} Get From Dictionary ${reps.json()} data + FOR ${item} IN @{data} + log ${item} + ${isDefault} Get From Dictionary ${item} isDefault #获取启用状态 + ${name} Get From Dictionary ${item} name #获取name + ${id} Get From Dictionary ${item} id #获取id + Exit For Loop If '${isDefault}'=='1' + END + Set Global Variable ${name} + Set Global Variable ${id} + +get-Warehouse + #获取所属仓库 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/transaction-main-enterprise/get/warehouse-name + ${仓库} Get From Dictionary ${reps.json()} data + #随机获取仓库 + ${所属仓库} Evaluate random.choice(${仓库}) random + log to console \nvalue:${所属仓库} + Set Global Variable ${所属仓库} + +get_proxy-order_delivery-info + #获取订单名片信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/proxy-sell/get/proxy-order/delivery-info/${orderItemId} + log ${reps.json()} + ${plateNumber} Get From Dictionary ${reps.json()["data"]} plateNumber #车牌号 + ${settleUtiPrice} Get From Dictionary ${reps.json()["data"]} settleUtiPrice #结算单价 + Set Global Variable ${plateNumber} + Set Global Variable ${settleUtiPrice} + +get_paper-mill-category + #获取当前纸厂的所有纸品品类 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/paperMill/get/paper-mill-category/${paperMillId} params=id=${paperMillId} + log ${reps.json()} + +Upload_pictures + #上传图片 + #${dict} Create Dictionary Content-Type=image/jpeg filename=20210803.jpg + #Create Session ZTBT ${URL} ${dict} + ${filepath} Evaluate open('./20210803.jpg','rb') + ${image} Evaluate open('./20210803.jpg','rb') + ${file} Create Dictionary filepath=${filepath} image=${image} + Create Session ZTBT ${URL} + log ${file} + ${result} Post On Session ZTBT recycle-user-center/upload/image files=${file} + ${pictures} Get From Dictionary ${result.json()} data + log ${result.content} + Set Global Variable ${pictures} + +get_repeat/proxy-order + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/repeat/proxy-order params=orderItemId=${orderItemId} &plateNumber=${plateNumber} &netWeight=30000&weighingDate=${datatime}&orderType=3 + log ${reps.json()} + +weightnote + #提交磅单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "settleUtiPrice":"${settleUtiPrice}", \ \ \ \ "publicSubsidies":0, \ \ \ \ "netWeight":15500, \ \ \ \ "settleWeight":null, \ \ \ \ "unitSurcharge":${unitSurcharge}, \ \ \ \ "transactionMainEnterpriseId":"${交易主体id}", \ \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "activitySettleType":"${activitySettleType}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "remark":null, \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "orderId":"${orderId}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "settlePrice":0, \ \ \ \ "contractId":"${contractId}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "orderType":"${orderType}", \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "otherAmountList":[ \ \ \ \ \ ], \ \ \ \ "unitPrice":"${paperCategoryPrice}" } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/save/weightnote ${data.encode('utf-8')} + log ${reps.json()} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId #磅单编号 + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + Set Global Variable ${datatime} + +audit_weightnote + #磅单审核接口 + Create Session ZTBT ${URL} ${header} + ${repsonse} Post On Session ZTBT recycle-service/admin/customer-service/audit/weightnote/${weightNoteId} + log ${repsonse.json()} + +get_proxy-order + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful diff --git a/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/3.3-Operation_audit.robot b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/3.3-Operation_audit.robot new file mode 100644 index 0000000..3555a8a --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/3.3-Operation_audit.robot @@ -0,0 +1,135 @@ +*** Settings *** +Documentation 运营审核-两次付款活动 +Library RequestsLibrary +Library Collections +Library DateTime +Resource 提交磅单.txt +Resource 运营审核驳回.txt +Resource 台账查询.txt + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0 + log ${reps.json()} + +get_paper-mill-order-by-orderItemId + #根据订单编号获取运营审核单 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=${orderItemId} + log ${reps.json()} + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId #获取审核id + ${weightNoteId} Get From Dictionary ${reps.json()["data"]["records"][0]} weightNoteId #获取磅单id + Set Global Variable ${auditRequestId} + Set Global Variable ${weightNoteId} + +get_order-log-detail + #获取订单日志 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId} + log ${reps.json()} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${settleWeight} Set Variable If '${settleWeight}'=='None' 0 ${settleWeight} #结算重量 + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${datatime} + +order-receipt-audit-details + #b保存磅单信息 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +get_order-log-detail2 + #运营审核驳回操作日志 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId} &operationStatus=2 + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful + +重复执行驳回和上传磅单操作 + #重复执行上传磅单、运营驳回操作 + FOR ${items} IN RANGE 5 + Run Keyword get_operation_list + Run Keyword get_order-receipt-audit-details + Run Keyword If '${audit_status}'=='0' Run Keyword 运营审核驳回 + sleep 1 + Run Keyword 获取送货单详情 + Run Keyword If '${status}'=='51' 上传送货单 + Run Keyword audit_weightnote + Run Keyword 获取上传送货单后的订单详情 + Run Keyword 台账查询 + END + +get_operation_list3 + #获取运营审核列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=&orderId=${orderId} + ${audit_status} Get From Dictionary ${reps.json()["data"]["records"][0]} status + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Set Global Variable ${audit_status} + Set Global Variable ${auditRequestId} + +get_order-receipt-audit-details3 + #查看运营审核详情 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${settleWeight} Set Variable If '${settleWeight}'=='None' 0 ${settleWeight} #结算重量 + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${datatime} + +order-receipt-audit-details3 + #b保存磅单信息 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +operation_audit + #运营审核确认通过 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":1, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + sleep 1 diff --git a/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/__init__.robot b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/__init__.robot new file mode 100644 index 0000000..e69de29 diff --git a/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt new file mode 100644 index 0000000..96eca67 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/台账查询.txt @@ -0,0 +1,21 @@ +*** Settings *** +Library Collections +Library RequestsLibrary + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +台账查询 + #获取台账列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/parameter/get/parameter params=pageNum=1&pageSize=10&withdrawState=&state=&orderItemId=${orderItemId} + ${台账列表数据} Get From List ${reps.json()["data"]["records"]} 0 #获取台账列表数据 + #Set Global Variable ${台账列表数据} + Should Be Equal As Numbers ${netWeight} ${reps.json()["data"]["records"][0]["netWeight"]} + Should Be Equal As Numbers ${unitSurcharge} ${reps.json()["data"]["records"][0]["unitSurcharge"]} + #Should Be Equal As Numbers ${settleWeight} ${reps.json()["data"]["records"][0]["settleWeight"]} + #Should Be Equal As Numbers ${settleUnitPrice} ${reps.json()["data"]["records"][0]["settleUtiPrice"]} + #Should Be Equal As Numbers ${receivableAdjustMoney} ${reps.json()["data"]["records"][0]["receivableAdjustMoney"]} + #Should Be Equal As Numbers ${adjustMoney} ${reps.json()["data"]["records"][0]["adjustMoney"]} diff --git a/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt new file mode 100644 index 0000000..6545de7 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/提交磅单.txt @@ -0,0 +1,172 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +获取磅单详情 + #查看订单列表详情 + Create Session ZTBT ${URL} ${header} + #${data} Set Variable orderId=${orderId} orderItemId=${orderItemId} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #当前订单下单时的合同id + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} unitSurcharge #代卖费 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类ID + ${unitPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类单价 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${millSupplierId} Get From Dictionary ${reps.json()["data"]} millSupplierId #纸厂供应商ID + ${paperMillSupplierName} Get From Dictionary ${reps.json()["data"]} paperMillSupplierName #纸厂供应商名称 + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + #${settleUtiPrice} Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + ${unitSurcharge} Set Variable If '${unitSurcharge}'=='${None}' 0 ${unitSurcharge} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${磅单id} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} id #获取磅单id + ${status} Get From Dictionary ${reps.json()["data"]} status + ${receivableAdjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} receivableAdjustMoney #获取应收调节费 + ${adjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} adjustMoney #获取调节费 + ${receivableAdjustMoney} Set Variable If '${receivableAdjustMoney}'=='${None}' 0 ${receivableAdjustMoney} + ${adjustMoney} Set Variable If '${adjustMoney}'=='${None}' 0 ${adjustMoney} + ${settleUtiPrice} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleUtiPrice #获取结算单价 + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleWeight #获取结算重量 + ${netWeight1} Evaluate ${netWeight}+30 + FOR ${净重index} IN RANGE ${netWeight} 30 + Exit For Loop If '${净重index}'=='${netWeight1}' + END + ${settleWeight1} Evaluate ${settleWeight}+30 + FOR ${结算重量index} IN RANGE ${settleWeight} 30 + Exit For Loop If '${结算重量index}'=='${settleWeight1}' + END + ${unitSurcharge1} Evaluate ${unitSurcharge}+0.001 + FOR ${代卖费index} IN RANGE ${unitSurcharge} 100 + Exit For Loop If '${代卖费index}'=='${unitSurcharge1}' + END + ${settleUtiPrice1} Evaluate ${settleUtiPrice}+0.1 + FOR ${结算单价index} IN RANGE ${settleUtiPrice} 100 + Exit For Loop If '${结算单价index}'=='${settleUtiPrice1}' + END + ${receivableAdjustMoney1} Evaluate ${receivableAdjustMoney}+10 + FOR ${应收调节费index} IN RANGE ${receivableAdjustMoney} 500 + Exit For Loop If '${应收调节费index}'=='${receivableAdjustMoney1}' + END + ${adjustMoney1} Evaluate ${adjustMoney}+10 + FOR ${应收调节费index} IN RANGE ${adjustMoney} 500 + Exit For Loop If '${应收调节费index}'=='${adjustMoney1}' + END + Set Global Variable ${contractId} + Set Global Variable ${unitSurcharge} + Set Global Variable ${paperCategoryId} + Set Global Variable ${settleUtiPrice1} + Set Global Variable ${unitPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${millSupplierId} + Set Global Variable ${paperMillSupplierName} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${contractId} + Set Global Variable ${netWeight1} + Set Global Variable ${settleWeight1} + Set Global Variable ${磅单id} + Set Global Variable ${status} + Set Global Variable ${unitSurcharge1} + Set Global Variable ${adjustMoney1} + Set Global Variable ${receivableAdjustMoney1} + +weightnote + #驳回后重新提交磅单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "deductedPoint":0, \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "unitPrice":"${unitPrice}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "settleUtiPriceIncludeTax":2.04012, \ \ \ \ "settleUtiPriceIncludeTaxType":1, \ \ \ \ "receivableAdjustMoney":"${receivableAdjustMoney1}", \ \ \ \ "refundSubsidy":0.002, \ \ \ \ "adjustMoney":"${adjustMoney1}", \ \ \ \ "collectionCharges":"${proxyPaySurcharge}", \ \ \ \ "advanceFund":"${advanceFund}", \ \ \ \ "contractId":"${contractId}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "transactionMainEnterpriseId":"${交易主体id}", \ \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "plateNumber":"${carList}", \ \ \ \ "settlePriceIncludeTaxSettleRules":"${settlePriceIncludeTaxSettleRules}", \ \ \ \ "settleUtiPrice":"${settleUtiPrice1}", \ \ \ \ "netWeight":"${netWeight1}", \ \ \ \ "activitySettleType":null, \ \ \ \ "unitSurcharge":"${unitSurcharge1}", \ \ \ \ "deliveryImageUrls":[ \ \ \ \ \ ], \ \ \ \ "publicSubsidies":0, \ \ \ \ "isSubsidyAndDeductIncludeTax":0, \ \ \ \ "orderId":"${orderId}", \ \ \ \ "settleWeight":"${settleWeight1}", \ \ \ \ "deductedWeight":2, \ \ \ \ "orderType":"${orderType}", \ \ \ \ "otherAmountList":[ \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"freightSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"contrabandPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"nonStandardPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ } \ \ \ \ ], \ \ \ \ "id":"${磅单id}" \ \ \ \ } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/update/weightnote ${data.encode('utf-8')} + log ${reps.json()["data"]} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + +获取上传磅单后的订单详情 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${settleUnitPrice} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleUtiPrice #获取结算单价 + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} unitSurcharge #获取代卖费 + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleWeight #获取结算重量 + ${receivableAdjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} receivableAdjustMoney #获取应收调节费 + ${adjustMoney} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} adjustMoney #获取调节费 + Set Global Variable ${settleUnitPrice} + Set Global Variable ${unitSurcharge} + Set Global Variable ${netWeight} + Set Global Variable ${settleWeight} + Set Global Variable ${receivableAdjustMoney} + Set Global Variable ${adjustMoney} + +获取送货单详情 + #获取订单详情信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId} &orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${paperMillId} Get From Dictionary ${reps.json()["data"]} paperMillId #纸厂id + ${paperCategoryPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类价格 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${activitySettleType} Get From Dictionary ${reps.json()["data"]} activitySettleType #活动订单结算方式 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${交易主体id} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseId #交易主体id + ${交易主体name} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseName #交易主体name + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]} unitSurcharge #代卖费单价 + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + ${settleUtiPrice}= Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${磅单id} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} id #获取磅单id + ${status} Get From Dictionary ${reps.json()["data"]} status + ${unitSurcharge3} Evaluate ${unitSurcharge}+0.001 + FOR ${代卖费index} IN RANGE ${unitSurcharge} 100 + Exit For Loop If '${代卖费index}'=='${unitSurcharge3}' + END + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${netWeight3} Evaluate ${netWeight}+300 + FOR ${净重index} IN RANGE ${netWeight} 30 + Exit For Loop If '${净重index}'=='${netWeight3}' + END + Set Global Variable ${contractId} + Set Global Variable ${paperMillId} + Set Global Variable ${paperCategoryPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${activitySettleType} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${settleUtiPrice} + Set Global Variable ${交易主体id} + Set Global Variable ${交易主体name} + Set Global Variable ${unitSurcharge3} + Set Global Variable ${netWeight3} + Set Global Variable ${磅单id} + Set Global Variable ${status} + +上传送货单 + #上传送货单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "settleUtiPrice":"${settleUtiPrice}", \ \ \ \ "publicSubsidies":0, \ \ \ \ "netWeight":"${netWeight3}", \ \ \ \ "settleWeight":null, \ \ \ \ "unitSurcharge":${unitSurcharge3}, \ \ \ \ "transactionMainEnterpriseId":"${交易主体id}", \ \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "activitySettleType":"${activitySettleType}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "remark":null, \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "orderId":"${orderId}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "settlePrice":0, \ \ \ \ "contractId":"${contractId}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "orderType":"${orderType}", \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "otherAmountList":[ \ \ \ \ \ ], \ \ \ \ "unitPrice":"${paperCategoryPrice}", \ \ \ \ "id":"${磅单id}" \ \ \ \ \ } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/update/weightnote ${data.encode('utf-8')} + log ${reps.json()} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId #磅单编号 + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + Set Global Variable ${datatime} + +获取上传送货单后的订单详情 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} unitSurcharge #获取代卖费 + Set Global Variable ${netWeight} + Set Global Variable ${unitSurcharge} + +audit_weightnote + Create Session ZTBT ${URL} ${header} + ${repsonse} Post On Session ZTBT recycle-service/admin/customer-service/audit/weightnote/${weightNoteId} + log ${repsonse.json()} diff --git a/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt new file mode 100644 index 0000000..2098597 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/2.1-Consignment management/运营审核驳回.txt @@ -0,0 +1,61 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=&orderId=${orderId} + ${audit_status} Get From Dictionary ${reps.json()["data"]["records"][0]} status + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Set Global Variable ${audit_status} + Set Global Variable ${auditRequestId} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${settleWeight} Set Variable If '${settleWeight}'=='None' 0 ${settleWeight} + ${surcharge1} Evaluate ${unitSurcharge}*${netWeight} + ${surcharge2} Evaluate ${unitSurcharge}*${settleWeight} + ${surcharge} Set Variable If '${proxySellerSettleType}'=='0' ${surcharge1} ${surcharge2} #代卖费总额 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]} auditRequestId + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${surcharge} + Set Global Variable ${auditRequestId} + +保存磅单信息 + #b保存磅单信息 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d #获取当前时间 + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +运营审核驳回 + #运营审核驳回 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":2, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} diff --git a/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot b/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot new file mode 100644 index 0000000..ee4cd03 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/4-Financial_audit.robot @@ -0,0 +1,41 @@ +*** Settings *** +Documentation 代卖应付 +Library RequestsLibrary +Library Collections +Resource 财务审核驳回.txt +Resource 运营审核通过.txt +Resource 台账查询.txt + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${url} http://api-ops-psc-test.qniao.cn +${URL1} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_list + #获取财务审核列表 + Create Session ZTBT ${url} ${header} + ${reps} Get On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/get/list params=pageNum=1&pageSize=10&status=&orderId=&orderItemId=${orderItemId} + ${auditedTime} Get From Dictionary ${reps.json()["data"]["records"][0]} auditedTime #财务第一次确认结算时间 + Should Be Equal As Strings ${reps.json()["message"]} successful + #Set Global Variable ${auditedTime} + +get_order-log-detail + #财务审核驳回操作记录 + Create Session ZTBT ${URL1} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId}&operationStatus=3 + +paper-mill-order-receipt-proof-request_audit + #财务审核确认通过 + Create Session ZTBT ${url} ${header} + ${data} Set Variable {"auditRequestId":"${auditRequestId}","adminId":null,"isPass":1,"remark":"${datatime}" } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/audit ${data.encode('utf-8')} + log ${reps.json()} + sleep 1 + +paper-mill-order-receipt-proof-request_settle + #确认结算 + Create Session ZTBT ${url} ${header} + ${data} Set Variable { \ \ \ \ "id":"${auditRequestId}", \ \ \ \ "adminId":null } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/settle ${data.encode('utf-8')} + sleep 1 diff --git a/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot b/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot new file mode 100644 index 0000000..0f75fdf --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/5-Sales_receivables.robot @@ -0,0 +1,36 @@ +*** Settings *** +Documentation 代卖应收 +Library RequestsLibrary +Library Collections + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_paper-payment-order-list + #通过订单编号获取代卖应收列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-payment-order-list params=pageNum=1&pageSize=10&orderId=${orderId} + ${paymentOrderId} Get From Dictionary ${reps.json()["data"]["records"][0]} id #回款单号 + log ${reps.json()} + Set Global Variable ${paymentOrderId} + +get_order-receipt-audit-details + #代卖应收详情 + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + ${receivablePriceIncludeTax} Get From Dictionary ${reps.json()["data"]["items"][0]} receivablePriceIncludeTax + #${receivablePrice} Get From Dictionary ${reps.json()["data"]["items"][0]} receivablePrice #获取应收金额 + ${noReceivablePrice} Get From Dictionary ${reps.json()["data"]["items"][0]} noReceivablePrice #获取未收金额 + #Set Global Variable ${receivablePrice} + Set Global Variable ${receivablePriceIncludeTax} + Set Global Variable ${noReceivablePrice} + +update_payment-order-status + #确认回款操作 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ \ \ \ "paymentOrderId":"${paymentOrderId}", \ \ \ \ "receivablePrice":"${receivablePriceIncludeTax}", \ \ \ \ "paidPrice":"${receivablePriceIncludeTax}", \ \ \ \ "noReceiveblePrice":"${noReceivablePrice}", \ \ \ \ "bankFlowNo":null, \ \ \ \ "paymentAdjustmentFee":null, \ \ \ \ "returnPayDate":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/update/payment-order-status ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + sleep 5 diff --git a/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt b/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt new file mode 100644 index 0000000..64abf98 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/台账查询.txt @@ -0,0 +1,20 @@ +*** Settings *** +Library Collections +Library RequestsLibrary + +*** Variables *** +${URL1} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +台账查询 + #获取台账列表 + Create Session ZTBT ${URL1} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/parameter/get/parameter params=pageNum=1&pageSize=10&withdrawState=&state=&orderItemId=${orderItemId} + ${台账列表数据} Get From List ${reps.json()["data"]["records"]} 0 #获取台账列表数据 + #Set Global Variable ${台账列表数据} + #${receivableAdjustMoney1} Get From Dictionary ${reps.json()["data"]["records"][0]} receivableAdjustMoney #获取应收调节费 + #${receivableAdjustMoney1} Set Variable If '${receivableAdjustMoney}'=='None' Should Not Be Equal As Numbers ${receivableAdjustMoney} ${receivableAdjustMoney1} + #Should Be Equal As Numbers ${receivableAdjustMoney} ${reps.json()["data"]["records"][0]["receivableAdjustMoney"]} #对比应收调节费 + Should Be Equal As Numbers ${noReceivablePrice} ${reps.json()["data"]["records"][0]["noReceivablePrice"]} #对比未收款金额 + Should Be Equal As Strings ${paperMillPayAt} ${reps.json()["data"]["records"][0]["paperMillPayAt"]} #对比预计回款日期 diff --git a/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt b/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt new file mode 100644 index 0000000..d9f1ba8 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/财务审核驳回.txt @@ -0,0 +1,30 @@ +*** Settings *** +Library Collections +Library DateTime +Library RequestsLibrary + +*** Variables *** +${URL1} http://api-ops-ztb-test.qniao.cn +${url} http://api-ops-psc-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +获取财务审核列表 + #获取财务审核列表 + Create Session ZTBT ${url} ${header} + ${reps} Get On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/get/list params=pageNum=1&pageSize=10&status=&orderId=&orderItemId=${orderItemId} + #${auditedTime} Get From Dictionary ${reps.json()["data"]["records"][0]} auditedTime #财务第一次确认结算时间 + ${staus} Get From Dictionary ${reps.json()["data"]["records"][0]} status #获取审核状态 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Should Be Equal As Strings ${reps.json()["message"]} successful + #Set Global Variable ${auditedTime} + Set Global Variable ${staus} + Set Global Variable ${auditRequestId} + +财务驳回 + #财务审核驳回 + Create Session ZTBT ${url} ${header} + ${data} Set Variable {"auditRequestId":"${auditRequestId}","adminId":null,"isPass":2,"remark":"${datatime}" } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/audit ${data.encode('utf-8')} + log ${reps.json()} + sleep 1 diff --git a/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt b/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt new file mode 100644 index 0000000..74be8e4 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/3-Withdrawal_application/运营审核通过.txt @@ -0,0 +1,72 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL1} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL1} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=&orderId=${orderId} + ${audit_status} Get From Dictionary ${reps.json()["data"]["records"][0]} status + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Set Global Variable ${audit_status} + Set Global Variable ${auditRequestId} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL1} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]["items"][0]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${settleWeight} Set Variable If '${settleWeight}'=='None' 0 ${settleWeight} + ${surcharge1} Evaluate ${unitSurcharge}*${netWeight} + ${surcharge2} Evaluate ${unitSurcharge}*${settleWeight} + ${surcharge} Set Variable If '${proxySellerSettleType}'=='0' ${surcharge1} ${surcharge2} #代卖费总额 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]} auditRequestId + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${surcharge} + Set Global Variable ${auditRequestId} + +order-receipt-audit-details + #b保存磅单信息 + Create Session ZTBT ${URL1} ${header} + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":"${paperMillPayAt}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":"${publicSubsidies}", \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +运营审核通过 + #运营审核通过 + Create Session ZTBT ${URL1} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":1, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} + +运营审核后详情 + #查看运营审核详情 + Create Session ZTBT ${URL1} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + ${noReceivablePrice} Get From Dictionary ${reps.json()["data"]["items"][0]} noReceivablePrice #获取未收款金额 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #获取计划回款日期 + ${receivableAdjustMoney} Get From Dictionary ${reps.json()["data"]["items"][0]} receivableAdjustMoney #获取应收调节费 + #${noReceivablePrice} Evaluate ${noReceivablePrice}+1 + Set Global Variable ${noReceivablePrice} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${receivableAdjustMoney} diff --git a/002-Activeorder/2-Background_system(Test)/4-Consignment_management/2.3-ActiveUpload-weightnote.robot b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/2.3-ActiveUpload-weightnote.robot new file mode 100644 index 0000000..147307f --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/2.3-ActiveUpload-weightnote.robot @@ -0,0 +1,207 @@ +*** Settings *** +Library requests +Library Collections +Library RequestsLibrary +Library DateTime + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_proxy-order-item-list + #查找预约的订单项列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order-item-list params=pageNum=1&pageSize=10&orderType=2&status=51&weightNoteType=2&orderItemId=${orderItemId} + log ${reps.json()} + ${orderItemId} Get From Dictionary ${reps.json()["data"]["records"][0]} orderItemId #订单项编号 + Set Global Variable ${orderItemId} + Should Be Equal As Strings ${reps.json()["data"]["records"][0]["orderId"]} ${orderId} + +get_proxy-order-details + #查看订单详情 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #当前订单下单时的合同id + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]} unitSurcharge #代卖费 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类ID + ${unitPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类单价 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${millSupplierId} Get From Dictionary ${reps.json()["data"]} millSupplierId #纸厂供应商ID + ${paperMillSupplierName} Get From Dictionary ${reps.json()["data"]} paperMillSupplierName #纸厂供应商名称 + ${surcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} surcharge #代卖费总额 + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${paymentType} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} paymentType #支付类型 + ${activityNoteStatus} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} activityNoteStatus #活动状态 + ${交易主体id} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseId #交易主体id + ${交易主体name} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseName #交易主体name + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + ${settleUtiPrice}= Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + log ${contractId} + Set Global Variable ${contractId} + Set Global Variable ${unitSurcharge} + Set Global Variable ${paperCategoryId} + Set Global Variable ${settleUtiPrice} + Set Global Variable ${unitPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${millSupplierId} + Set Global Variable ${paperMillSupplierName} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${contractId} + Set Global Variable ${surcharge} + Set Global Variable ${paymentType} + Set Global Variable ${activityNoteStatus} + Set Global Variable ${交易主体name} + Set Global Variable ${交易主体id} + +get_delivery-info + #获取订单名片信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/proxy-sell/get/proxy-order/delivery-info/${orderItemId} + log ${reps.json()} + ${plateNumber} Get From Dictionary ${reps.json()["data"]} plateNumber #车牌号 + ${settleUtiPrice} Get From Dictionary ${reps.json()["data"]} settleUtiPrice #结算单价 + ${settleUtiPriceIncludeTaxType} Get From Dictionary ${reps.json()["data"]} settleUtiPriceIncludeTaxType #含税补贴价类型 + ${netWeight} Get From Dictionary ${reps.json()["data"]} netWeight #净重 + Set Global Variable ${plateNumber} + Set Global Variable ${settleUtiPrice} + Set Global Variable ${settleUtiPriceIncludeTaxType} + Set Global Variable ${netWeight} + +get-contract-list + #获取订单纸厂的所有合同信息 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT /recycle-service/admin/contract/get/selectable-contract-list params=orderItemId=${orderItemId} + log ${reps.json()} + +get_weightnote + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/get/weightnote/${weightnoteId} + log ${reps.json()} + +get_paperMill-supplier + #获取纸厂供应商 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/paper-mill-merchant/${paperMillId} params=paperMillId=${paperMillId} + log ${reps.json()} + +get-Warehouse + #获取所属仓库 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/transaction-main-enterprise/get/warehouse-name + ${仓库} Get From Dictionary ${reps.json()} data + #随机获取仓库 + ${所属仓库} Evaluate random.choice(${仓库}) random + log to console \nvalue:${所属仓库} + Set Global Variable ${所属仓库} + +get-Source of funds + #获取资金来源 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/fund-source/get/list + log ${reps.json()} + ${data} Get From Dictionary ${reps.json()} data + FOR ${item} IN @{data} + log ${item} + ${isDefault} Get From Dictionary ${item} isDefault #获取启用状态 + ${name} Get From Dictionary ${item} name #获取name + ${id} Get From Dictionary ${item} id #获取id + Exit For Loop If '${isDefault}'=='1' + END + Set Global Variable ${name} + Set Global Variable ${id} + +get_paper-mill-category + #获取当前纸厂的所有纸品品类 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/paperMill/get/paper-mill-category/${paperMillId} params=id=${paperMillId} + log ${reps.json()} + +get_contract_by_id + #获取下单时绑定的合同 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/contract/get/detail-by-id params=id=${contractId} + log ${reps.json()} + #获取垫资费、企业ID、应收金额结算规则、含税结算单价结算规则 + ${advanceFund} Get From Dictionary ${reps.json()["data"]} advanceFund #垫资费 + ${buyerEnterpriseId} Get From Dictionary ${reps.json()["data"]} buyerEnterpriseId #企业id + ${settleRules} Get From Dictionary ${reps.json()["data"]} settleRules #应收金额结算规则 + ${settlePriceIncludeTaxSettleRules} Get From Dictionary ${reps.json()["data"]} settlePriceIncludeTaxSettleRules #含税结算单价结算规则 + ${taxRefundRate} Get From Dictionary ${reps.json()["data"]} taxRefundRate #税点 + ${proxyPaySurcharge} Get From Dictionary ${reps.json()["data"]} proxyPaySurcharge #代收费 + ${hasInvoice} Get From Dictionary ${reps.json()["data"]} hasInvoice #是否开票 + ${accountPeriodType} Get From Dictionary ${reps.json()["data"]} accountPeriodType #账期类型 + ${isSubsidyAndDeductIncludeTax} Get From Dictionary ${reps.json()["data"]} isSubsidyAndDeductIncludeTax #纸厂补贴是否含税 + ${receivableSettlementRules} Get From Dictionary ${reps.json()["data"]} settleRules #应收金额结算规则 + ${settlePriceIncludeTaxSettleRules} Get From Dictionary ${reps.json()["data"]} settlePriceIncludeTaxSettleRules #含税结算单价结算规则 + ${advanceFund} Set Variable If '${advanceFund}'=='${None}' 0 ${advanceFund} + ${proxyPaySurcharge} Set Variable If '${proxyPaySurcharge}'=='${None}' 0 ${proxyPaySurcharge} + Set Global Variable ${advanceFund} + Set Global Variable ${buyerEnterpriseId} + Set Global Variable ${taxRefundRate} + Set Global Variable ${proxyPaySurcharge} + Set Global Variable ${hasInvoice} + Set Global Variable ${accountPeriodType} + Set Global Variable ${settleRules} + Set Global Variable ${settlePriceIncludeTaxSettleRules} + Set Global Variable ${isSubsidyAndDeductIncludeTax} + Set Global Variable ${receivableSettlementRules} + Set Global Variable ${settlePriceIncludeTaxSettleRules} + +get-category price + #获取下单品类,上传磅单时的价格 + Create Session ZTBT ${URL} ${header} + ${dataTime} Get Current Date result_format=%Y-%m-%d + ${reps} Get On Session ZTBT recycle-service/admin/proxy-sell/get-category-price-by-date params=orderItemId=${orderItemId}&weightDay=${dataTime} + log ${reps.json()} + ${price} Get From Dictionary ${reps.json()["data"][0]} price #下单品类价格 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"][0]} publicSubsidies #下单品类公开补贴 + Set Global Variable ${price} + Set Global Variable ${publicSubsidies} + Set Global Variable ${dataTime} + +Upload_pictures + #上传图片 + #${dict} Create Dictionary Content-Type=image/jpeg filename=20210803.jpg + #Create Session ZTBT ${URL} ${dict} + ${filepath} Evaluate open('E:/lyl/图片/21042217001449712.png','rb') + ${image} Evaluate open('E:/lyl/图片/21042217001449712.png','rb') + ${file} Create Dictionary filepath=${filepath} image=${image} + Create Session ZTBT ${URL} + log ${file} + ${result} Post On Session ZTBT recycle-user-center/upload/image files=${file} + ${pictures} Get From Dictionary ${result.json()} data + log ${result.content} + Set Global Variable ${pictures} + +get_repeat_proxy-order + #获取重复订单信息 + Create Session ZTBT ${URL} ${header} + #${datatime} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/repeat/proxy-order params=orderItemId=${orderItemId}&plateNumber=${carList}&settleWeight=13550&weighingDate=${datatime}&orderType=${orderType} + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful + +weightnote + #提交磅单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "id":"${weightNoteId}", \ \ \ \ "orderId":"${orderId}", \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "type":null, \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "settleUtiPrice":"${settleUtiPrice}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "settleWeight":16200, \ \ \ \ "deductedPoint":7.5, \ \ \ \ "unitSurcharge":"${unitSurcharge}", \ \ \ \ "surcharge":"${surcharge}", \ \ \ \ "adjustMoney":"20", \ \ \ \ "remark":"${datatime}", \ \ \ \ "imageUrls":null, \ \ \ \ "transactionMainEnterpriseid":"${交易主体id}", \ \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "settlePrice":22585.5, \ \ \ \ "activitySettleType":"${activitySettleType}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "publicSubsidies":0, \ \ \ \ "unitPrice":"${unitPrice}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "remarkImgs":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "otherAmountList":[ \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"freightSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.002, \ \ \ \ \ \ \ \ \ \ \ \ "title":"contrabandPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":2, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":20, \ \ \ \ \ \ \ \ \ \ \ \ "title":"nonStandardPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":2, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":10, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ } \ \ \ \ ], \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "refundSubsidy":0.003, \ \ \ \ "receivableAdjustMoney":"20", \ \ \ \ "settleUtiPriceIncludeTax":1.337448648648649, \ \ \ \ "settleUtiPriceIncludeTaxType":"${settleUtiPriceIncludeTaxType}", \ \ \ \ "collectionCharges":"${proxyPaySurcharge}", \ \ \ \ "advanceFund":"${advanceFund}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "contractId":"${contractId}", \ \ \ \ "settlePriceIncludeTaxSettleRules":"${settlePriceIncludeTaxSettleRules}", \ \ \ \ "paperCategoryId":"${categoryId}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "deductedWeight":1.5, \ \ \ \ "orderType":"${orderType}" } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/update/weightnote ${data.encode('utf-8')} + log ${reps.json()["data"]} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + +audit_weightnote + Create Session ZTBT ${URL} ${header} + ${repsonse} Post On Session ZTBT recycle-service/admin/customer-service/audit/weightnote/${weightNoteId} + log ${repsonse.json()} + +get_proxy-order + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful diff --git a/002-Activeorder/2-Background_system(Test)/4-Consignment_management/3.3--Operation_audit.robot b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/3.3--Operation_audit.robot new file mode 100644 index 0000000..7a98145 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/3.3--Operation_audit.robot @@ -0,0 +1,81 @@ +*** Settings *** +Library RequestsLibrary +Library Collections +Library DateTime +Resource 更新磅单.txt +Resource 运营审核驳回.txt +Resource 台账查询.txt + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0 + log ${reps.json()} + +get_paper-mill-order-by-orderItemId + #根据订单编号获取运营审核单 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=${orderItemId} + log ${reps.json()} + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId #获取审核id + ${weightNoteId} Get From Dictionary ${reps.json()["data"]["records"][0]} weightNoteId #获取磅单id + Set Global Variable ${auditRequestId} + Set Global Variable ${weightNoteId} + +get_order-log-detail + #获取订单日志 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId} + log ${reps.json()} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${datatime} + Set Global Variable ${settleWeight} + +order-receipt-audit-details + #b保存磅单信息 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ \ \ \ "auditRequestItemId":"${auditRequestItemId}", \ \ \ \ "categoryName":"${categoryName}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "paperCategoryId":"${paperCategoryId}", \ \ \ \ "paperMillPayAt":null, \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "receivablePrice":5550, \ \ \ \ "settlementDate":"${datatime}", \ \ \ \ "weighingDate":"${datatime}", \ \ \ \ "settleWeight":"${settleWeight}", \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "fundSourceId":"${id}", \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "publicSubsidies":0, \ \ \ \ "publicSubsidiesIncludeTax":0, \ \ \ \ "settleUnitPrice":"${settleUtiPrice}", \ \ \ \ "settleUnitPriceIncludeTax":1.337449, \ \ \ \ "fundSourceName":"${name}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/edit/order-receipt-audit-details ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + +get_order-log-detail2 + #运营审核驳回操作日志 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId} &operationStatus=2 + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful + +operation_audit + #运营审核确认通过 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":1, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful + sleep 2 diff --git a/002-Activeorder/2-Background_system(Test)/4-Consignment_management/4.3-Financial_audit.robot b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/4.3-Financial_audit.robot new file mode 100644 index 0000000..8999fe9 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/4.3-Financial_audit.robot @@ -0,0 +1,36 @@ +*** Settings *** +Library RequestsLibrary +Library Collections + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${url} http://api-ops-psc-test.qniao.cn +${URL1} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_list + #获取财务审核列表 + Create Session ZTBT ${url} ${header} + ${reps} Get On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/get/list params=pageNum=1&pageSize=10&status=&orderId=&orderItemId=${orderItemId} + log ${reps.json()} + Should Be Equal As Strings ${reps.json()["message"]} successful + +get_order-log-detail + #财务审核驳回操作记录 + Create Session ZTBT ${URL1} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/order-log-detail params=orderId=${orderId}&weightNoteId=${weightNoteId}&operationStatus=3 + +paper-mill-order-receipt-proof-request_audit + #财务审核确认通过 + Create Session ZTBT ${url} ${header} + ${data} Set Variable {"auditRequestId":"${auditRequestId}","adminId":null,"isPass":1,"remark":"${datatime}" } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/audit ${data.encode('utf-8')} + log ${reps.json()} + sleep 1 + +paper-mill-order-receipt-proof-request_settle + #确认结算 + Create Session ZTBT ${url} ${header} + ${data} Set Variable { \ \ \ \ "id":"${auditRequestId}", \ \ \ \ "adminId":null } + ${reps} Post On Session ZTBT payment-settlement-center/admin/paper-mill-order-receipt-proof-request/settle ${data.encode('utf-8')} + sleep 2 diff --git a/002-Activeorder/2-Background_system(Test)/4-Consignment_management/5.3-sales_receivable.robot b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/5.3-sales_receivable.robot new file mode 100644 index 0000000..1061a2f --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/5.3-sales_receivable.robot @@ -0,0 +1,34 @@ +*** Settings *** +Documentation 代卖应收 +Library RequestsLibrary +Library Collections + +*** Variables *** +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} +${URL} http://api-ops-ztb-test.qniao.cn + +*** Test Cases *** +get_paper-payment-order-list + #通过订单编号获取代卖应收列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-payment-order-list params=pageNum=1&pageSize=10&orderId=${orderId} + ${paymentOrderId} Get From Dictionary ${reps.json()["data"]["records"][0]} id #回款单号 + log ${reps.json()} + Set Global Variable ${paymentOrderId} + +get_order-receipt-audit-details + #代卖应收详情 + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + ${receivablePriceIncludeTax} Get From Dictionary ${reps.json()["data"]["items"][0]} receivablePriceIncludeTax #获取应收金额 + #${receivablePrice} Get From Dictionary ${reps.json()["data"]["records"][0]} receivablePrice + ${noReceivablePrice} Get From Dictionary ${reps.json()["data"]["items"][0]} noReceivablePrice #获取未收金额 + Set Global Variable ${receivablePriceIncludeTax} + Set Global Variable ${noReceivablePrice} + +update_payment-order-status + #确认回款操作 + Create Session ZTBT ${URL} ${header} + ${data} Set Variable { \ \ \ \ "paymentOrderId":"${paymentOrderId}", \ \ \ \ "receivablePrice":"${receivablePriceIncludeTax}", \ \ \ \ "paidPrice":"${receivablePriceIncludeTax}", \ \ \ \ "noReceiveblePrice":"${noReceivablePrice}", \ \ \ \ "bankFlowNo":null, \ \ \ \ "paymentAdjustmentFee":null, \ \ \ \ "returnPayDate":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/update/payment-order-status ${data.encode('utf-8')} + Should Be Equal As Strings ${reps.json()["message"]} successful diff --git a/002-Activeorder/2-Background_system(Test)/4-Consignment_management/__init__.robot b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/__init__.robot new file mode 100644 index 0000000..e69de29 diff --git a/002-Activeorder/2-Background_system(Test)/4-Consignment_management/台账查询.txt b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/台账查询.txt new file mode 100644 index 0000000..e4b5b68 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/台账查询.txt @@ -0,0 +1,11 @@ +*** Settings *** +Library Collections +Library RequestsLibrary + +*** Keywords *** +台账查询 + #获取台账列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/parameter/get/parameter params=pageNum=1&pageSize=10&withdrawState=&state=&orderItemId=${orderItemId} + ${台账列表数据} Get From List ${reps.json()["data"]["records"]} 0 #获取台账列表数据 + #Set Global Variable ${台账列表数据} diff --git a/002-Activeorder/2-Background_system(Test)/4-Consignment_management/更新磅单.txt b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/更新磅单.txt new file mode 100644 index 0000000..fef1cda --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/更新磅单.txt @@ -0,0 +1,84 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +获取磅单详情 + #查看订单详情 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/customer-service/get/proxy-order/${orderId} params=orderId=${orderId}&orderItemId=${orderItemId} + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #当前订单下单时的合同id + ${unitSurcharge} Get From Dictionary ${reps.json()["data"]} unitSurcharge #代卖费 + ${proxySellerSettleType} Get From Dictionary ${reps.json()["data"]} proxySellerSettleType #代卖费结算方式 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]} paperCategoryId #纸厂品类ID + ${unitPrice} Get From Dictionary ${reps.json()["data"]} paperCategoryPrice #品类单价 + ${publicSubsidies} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} publicSubsidies #公开补贴 + ${millSupplierId} Get From Dictionary ${reps.json()["data"]} millSupplierId #纸厂供应商ID + ${paperMillSupplierName} Get From Dictionary ${reps.json()["data"]} paperMillSupplierName #纸厂供应商名称 + ${surcharge} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} surcharge #代卖费总额 + ${contractId} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} contractId #合同id + ${paymentType} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} paymentType #支付类型 + ${activityNoteStatus} Get From Dictionary ${reps.json()["data"]["orderItems"][0]} activityNoteStatus #活动状态 + ${交易主体id} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseId #交易主体id + ${交易主体name} Get From Dictionary ${reps.json()["data"]} transactionMainEnterpriseName #交易主体name + ${publicSubsidies} Set Variable If '${publicSubsidies}'=='${null}' 0 ${publicSubsidies} + ${settleUtiPrice}= Evaluate ${unitPrice}+${publicSubsidies} #结算单价 + ${unitSurcharge} Set Variable If '${unitSurcharge}'=='${None}' 0 ${unitSurcharge} + ${id} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} id #获取磅单id + ${status} Get From Dictionary ${reps.json()["data"]} status + ${netWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} netWeight #获取净重 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["orderItems"][0]["weightnoteInfo"]} settleWeight #获取结算重量 + ${netWeight1} Evaluate ${netWeight}+100 + FOR ${净重index} IN RANGE ${netWeight} 30 + Exit For Loop If '${净重index}'=='${netWeight1}' + END + ${settleWeight1} Evaluate ${settleWeight}+100 + FOR ${结算重量index} IN RANGE ${settleWeight} 30 + Exit For Loop If '${结算重量index}'=='${settleWeight1}' + END + ${unitSurcharge1} Evaluate ${unitSurcharge}+0.01 + FOR ${代卖费index} IN RANGE ${unitSurcharge} 100 + Exit For Loop If '${代卖费index}'=='${unitSurcharge1}' + END + Set Global Variable ${contractId} + Set Global Variable ${unitSurcharge} + Set Global Variable ${paperCategoryId} + Set Global Variable ${settleUtiPrice} + Set Global Variable ${unitPrice} + Set Global Variable ${publicSubsidies} + Set Global Variable ${millSupplierId} + Set Global Variable ${paperMillSupplierName} + Set Global Variable ${proxySellerSettleType} + Set Global Variable ${contractId} + Set Global Variable ${surcharge} + Set Global Variable ${paymentType} + Set Global Variable ${activityNoteStatus} + Set Global Variable ${交易主体name} + Set Global Variable ${交易主体id} + Set Global Variable ${netWeight1} + Set Global Variable ${settleWeight1} + Set Global Variable ${id} + Set Global Variable ${status} + Set Global Variable ${unitSurcharge1} + +weightnote + #驳回后重新提交磅单 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "id":"${weightNoteId}", \ \ \ \ "orderId":"${orderId}", \ \ \ \ "orderItemId":"${orderItemId}", \ \ \ \ "type":null, \ \ \ \ "weightDay":"${datatime}", \ \ \ \ "settleDay":"${datatime}", \ \ \ \ "settleUtiPrice":"${settleUtiPrice}", \ \ \ \ "netWeight":"${netWeight}", \ \ \ \ "settleWeight":13500, \ \ \ \ "deductedPoint":7.5, \ \ \ \ "unitSurcharge":"${unitSurcharge}", \ \ \ \ "surcharge":"${surcharge}", \ \ \ \ "adjustMoney":"20", \ \ \ \ "remark":"${datatime}", \ \ \ \ "imageUrls":null, \ \ \ \ "transactionMainEnterpriseid":"${交易主体id}", \ \ \ \ \ "transactionMainEnterpriseName":"${交易主体name}", \ \ \ \ "warehouseName":"${所属仓库}", \ \ \ \ "settlePrice":22585.5, \ \ \ \ "activitySettleType":"${activitySettleType}", \ \ \ \ "proxySellerSettleType":"${proxySellerSettleType}", \ \ \ \ "publicSubsidies":0, \ \ \ \ "unitPrice":"${unitPrice}", \ \ \ \ "plateNumber":"${plateNumber}", \ \ \ \ "remarkImgs":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "otherAmountList":[ \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"freightSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.001, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherSubsidies", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":1 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":1, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":0.002, \ \ \ \ \ \ \ \ \ \ \ \ "title":"contrabandPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":2, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":20, \ \ \ \ \ \ \ \ \ \ \ \ "title":"nonStandardPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ }, \ \ \ \ \ \ \ \ { \ \ \ \ \ \ \ \ \ \ \ \ "unitType":2, \ \ \ \ \ \ \ \ \ \ \ \ "unitAmount":10, \ \ \ \ \ \ \ \ \ \ \ \ "title":"otherPenalty", \ \ \ \ \ \ \ \ \ \ \ \ "isSubsidies":0 \ \ \ \ \ \ \ \ } \ \ \ \ ], \ \ \ \ "isInvoice":"${hasInvoice}", \ \ \ \ "invoicePoint":"${taxRefundRate}", \ \ \ \ "receivableSettlementRules":"${receivableSettlementRules}", \ \ \ \ "refundSubsidy":0.003, \ \ \ \ "receivableAdjustMoney":"20", \ \ \ \ "settleUtiPriceIncludeTax":1.337448648648649, \ \ \ \ "settleUtiPriceIncludeTaxType":"${settleUtiPriceIncludeTaxType}", \ \ \ \ "collectionCharges":"${proxyPaySurcharge}", \ \ \ \ "advanceFund":"${advanceFund}", \ \ \ \ "millSupplierId":"${supplier_id}", \ \ \ \ "millSupplierName":"${millSupplierName}", \ \ \ \ "contractId":"${contractId}", \ \ \ \ "settlePriceIncludeTaxSettleRules":"${settlePriceIncludeTaxSettleRules}", \ \ \ \ "paperCategoryId":"${categoryId}", \ \ \ \ "deductionNotes":"${datatime}", \ \ \ \ "imageUrl":[ \ \ \ \ \ \ \ \ "${pictures}" \ \ \ \ ], \ \ \ \ "deductedWeight":1.5, \ \ \ \ "orderType":"${orderType}" } + log ${data} + ${reps} Post On Session ZTBT recycle-service/admin/proxy-sell/update/weightnote ${data.encode('utf-8')} + log ${reps.json()["data"]} + ${weightNoteId} Get From Dictionary ${reps.json()["data"]} weightNoteId + Set Global Variable ${weightNoteId} + Should Be Equal As Strings ${reps.json()["message"]} successful + +audit_weightnote + Create Session ZTBT ${URL} ${header} + ${repsonse} Post On Session ZTBT recycle-service/admin/customer-service/audit/weightnote/${weightNoteId} + log ${repsonse.json()} diff --git a/002-Activeorder/2-Background_system(Test)/4-Consignment_management/运营审核驳回.txt b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/运营审核驳回.txt new file mode 100644 index 0000000..ca9a755 --- /dev/null +++ b/002-Activeorder/2-Background_system(Test)/4-Consignment_management/运营审核驳回.txt @@ -0,0 +1,53 @@ +*** Settings *** +Library RequestsLibrary +Library DateTime +Library Collections + +*** Variables *** +${URL} http://api-ops-ztb-test.qniao.cn +${header} {'X-APP-ID':'470236309865238555','Authorization':'${gettoken}','Content-Type':'application/json'} + +*** Keywords *** +get_operation_list + #获取运营审核列表 + Create Session ZTBT ${URL} ${header} + ${reps} Get On Session ZTBT recycle-service/admin/operation/get/paper-mill-order-receipt-audit params=pageNum=1&pageSize=10&status=0&orderItemId=&orderId=${orderId} + ${audit_status} Get From Dictionary ${reps.json()["data"]["records"][0]} status + ${auditRequestId} Get From Dictionary ${reps.json()["data"]["records"][0]} auditRequestId + Set Global Variable ${audit_status} + Set Global Variable ${auditRequestId} + +get_order-receipt-audit-details + #查看运营审核详情 + Create Session ZTBT ${URL} ${header} + ${reps} Post On Session ZTBT recycle-service/admin/operation/get/order-receipt-audit-details/${auditRequestId}/${weightNoteId} + log ${reps.json()} + ${auditRequestItemId} Get From Dictionary ${reps.json()["data"]["items"][0]} auditRequestItemId #审核项id + ${categoryName} Get From Dictionary ${reps.json()["data"]["items"][0]} categoryName #纸品品类名称 + ${paperCategoryId} Get From Dictionary ${reps.json()["data"]["items"][0]} paperCategoryId #纸厂品类id + ${netWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} netWeight #净重 + ${paperMillPayAt} Get From Dictionary ${reps.json()["data"]["items"][0]} paperMillPayAt #计划回款日期 + ${plateNumber} Get From Dictionary ${reps.json()["data"]["items"][0]} plateNumber #车牌号 + ${settleWeight} Get From Dictionary ${reps.json()["data"]["items"][0]} settleWeight #结算重量 + ${settleWeight} Set Variable If '${settleWeight}'=='None' 0 ${settleWeight} + ${surcharge1} Evaluate ${unitSurcharge}*${netWeight} + ${surcharge2} Evaluate ${unitSurcharge}*${settleWeight} + ${surcharge} Set Variable If '${proxySellerSettleType}'=='0' ${surcharge1} ${surcharge2} #代卖费总额 + ${paperMillPayAt} Set Variable If '${paperMillPayAt}'=='无账期' null ${paperMillPayAt} #纸厂账期 + ${auditRequestId} Get From Dictionary ${reps.json()["data"]} auditRequestId + Set Global Variable ${auditRequestItemId} + Set Global Variable ${categoryName} + Set Global Variable ${netWeight} + Set Global Variable ${paperMillPayAt} + Set Global Variable ${plateNumber} + Set Global Variable ${settleWeight} + Set Global Variable ${paperCategoryId} + Set Global Variable ${surcharge} + Set Global Variable ${auditRequestId} + +运营审核驳回 + #运营审核驳回 + Create Session ZTBT ${URL} ${header} + ${datatime} Get Current Date result_format=%Y-%m-%d + ${data} Set Variable { \ \ \ \ "auditRequestId":"${auditRequestId}", \ \ \ \ "isPass":2, \ \ \ \ "remark":"${datatime}" } + ${reps} Post On Session ZTBT recycle-service/admin/operation/operation/audit ${data.encode('utf-8')} diff --git a/16pic_6879381_b.jpg b/16pic_6879381_b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..285f95727c5bdb074b762b15d24e92d24471be08 GIT binary patch literal 243901 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

U~19KJ{VWK3Kp%C~y1^WPOCCm9N$umMT%@ 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%0DX2~QeB;Zw9>7#K-$Z}d}5tV*b!R}*1 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 literal 0 HcmV?d00001 diff --git a/20210803.jpg b/20210803.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24fe80d0001eac79acb24252a156f9ca4346d41e GIT binary patch literal 13005 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