Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xm-sportstest
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xiamai-test
xm-sportstest
Commits
7e5d5f8c
Commit
7e5d5f8c
authored
Oct 25, 2024
by
yangfangfang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
批量约团课相关接口case
parent
1cf00989
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
761 additions
and
0 deletions
+761
-0
src/main/java/com/xiaomai/cases/polar/reserve/ReserveTools.java
+157
-0
src/main/java/com/xiaomai/cases/polar/reserve/group/TestBatchReserveGroup.java
+604
-0
No files found.
src/main/java/com/xiaomai/cases/polar/reserve/ReserveTools.java
View file @
7e5d5f8c
...
...
@@ -11,6 +11,8 @@ import com.xiaomai.utils.XMBaseTest;
import
com.xiaomai.utils.XMJSONPath
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.reserve
...
...
@@ -186,6 +188,63 @@ public class ReserveTools extends XMBaseTest {
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
).
getJSONArray
(
"records"
);
}
/**
* @description:获取会员预约记录列表
* @author: xuyamei
* @date: 2024/6/12 15:26
* @param courseId 课程id
* @param reserveStateSet 预约状态
* @param signState 签到状态
* @param coachId 教练id
* @param scheduleStartTime 上课开始时间
* @param scheduleEndDate 上课结束时间
* @param memberId 会员id
* @param courseType 课程类型 GROUP_CLASS:团课
* @param dataUserInfos
* @return: com.alibaba.fastjson.JSONObject
**/
public
JSONObject
getPageByMember1
(
String
courseId
,
String
reserveStateSet
,
String
signState
,
String
coachId
,
String
scheduleStartTime
,
String
scheduleEndDate
,
String
memberId
,
String
courseType
,
DataUserInfo
...
dataUserInfos
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Reserve
)
.
setApiName
(
"API_memberReserve_getPageByMember"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
dataUserInfos
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
20
);
if
(!
courseId
.
equals
(
""
)){
body
.
put
(
"courseId"
,
courseId
);
}
if
(!
reserveStateSet
.
equals
(
""
)){
JSONArray
reserveState
=
new
JSONArray
();
reserveState
.
add
(
reserveStateSet
);
body
.
put
(
"reserveStateSet"
,
reserveState
);
}
if
(!
signState
.
equals
(
""
)){
body
.
put
(
"signInState"
,
signState
);
}
if
(!
coachId
.
equals
(
""
)){
body
.
put
(
"coachId"
,
coachId
);
}
if
(
scheduleStartTime
!=
null
){
body
.
put
(
"scheduleStartTime"
,
scheduleStartTime
);
body
.
put
(
"scheduleEndDate"
,
scheduleEndDate
);
}
if
(!
memberId
.
equals
(
""
)){
body
.
put
(
"memberId"
,
memberId
);
}
body
.
put
(
"courseType"
,
courseType
);
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
return
dataApi
.
getBodyInJSON
().
getJSONObject
(
"result"
);
}
/**
* @description:预约记录列表
* @author: xuyamei
...
...
@@ -667,4 +726,102 @@ public class ReserveTools extends XMBaseTest {
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
body
.
toString
(),
dataheadrs
).
assetsSuccess
(
true
);
}
/**
* @description:获取批量预约团课课次信息
* @author: yff
* @date: 2024/10/21
* @param courseId 课程id
* @param coachIds 上课教练ids
* @param startDate 上课时间范围-开始日期
* @param endDate 上课时间范围-结束日期
* @param leftCapacity 剩余可约人数
* @param minuteOffset 上课时间范围开始分钟
* @param spanMinutes 上课时间范围结束分钟
**/
public
JSONObject
getCanReserveGroupScheduleList
(
String
courseId
,
String
coachIds
,
String
startDate
,
String
endDate
,
int
leftCapacity
,
int
minuteOffset
,
int
spanMinutes
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Reserve
)
.
setApiName
(
"API_getCanReserveGroupScheduleList"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
();
JSONObject
jsonObject
=
new
JSONObject
();
JSONArray
day
=
new
JSONArray
();
//上课星期
day
.
add
(
1
);
day
.
add
(
2
);
day
.
add
(
3
);
day
.
add
(
4
);
day
.
add
(
5
);
day
.
add
(
6
);
day
.
add
(
7
);
jsonObject
.
put
(
"weekdays"
,
day
);
jsonObject
.
put
(
"courseId"
,
courseId
);
JSONArray
coach
=
new
JSONArray
();
coach
.
add
(
coachIds
);
jsonObject
.
put
(
"coachIds"
,
coach
);
jsonObject
.
put
(
"startDate"
,
startDate
);
jsonObject
.
put
(
"endDate"
,
endDate
);
jsonObject
.
put
(
"leftCapacity"
,
leftCapacity
);
jsonObject
.
put
(
"minuteOffset"
,
minuteOffset
);
jsonObject
.
put
(
"spanMinutes"
,
spanMinutes
);
jsonObject
.
put
(
"size"
,
10
);
jsonObject
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
jsonObject
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
/**
* @description:批量预约团课校验(该方法被我写成了两个会员的情况,所以必须传两个了)
* @author: yff
* @date: 2024/10/21
* @param reserveScheduleEndDate 批量预约最晚日期
* @param planCheckTotalBalance1 会员1预约预计消耗总次数=所选课次*会员预约人数(带几人)*这个卡消耗一次扣除的次数
* @param memberId1 会员1ID
* @param benefitId1 卡1权益ID(会员1准备使用的卡)
* @param planCheckTotalBalance2 会员2预约预计消耗总次数=所选课次*会员预约人数(带几人)*这个卡消耗一次扣除的次数
* @param memberId2 会员2ID
* @param benefitId2 卡2权益ID(会员2准备使用的卡)
**/
public
JSONObject
checkBatchReserve
(
String
reserveScheduleEndDate
,
int
planCheckTotalBalance1
,
String
memberId1
,
String
benefitId1
,
int
planCheckTotalBalance2
,
String
memberId2
,
String
benefitId2
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Reserve
)
.
setApiName
(
"API_checkBatchReserve"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
();
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"reserveScheduleEndDate"
,
reserveScheduleEndDate
);
JSONArray
memberInfoList
=
new
JSONArray
();
JSONObject
jsonObject1
=
new
JSONObject
();
jsonObject1
.
put
(
"planCheckTotalBalance"
,
planCheckTotalBalance1
);
jsonObject1
.
put
(
"memberId"
,
memberId1
);
jsonObject1
.
put
(
"benefitId"
,
benefitId1
);
memberInfoList
.
add
(
jsonObject1
);
JSONObject
jsonObject2
=
new
JSONObject
();
jsonObject2
.
put
(
"planCheckTotalBalance"
,
planCheckTotalBalance2
);
jsonObject2
.
put
(
"memberId"
,
memberId2
);
jsonObject2
.
put
(
"benefitId"
,
benefitId2
);
memberInfoList
.
add
(
jsonObject2
);
jsonObject
.
put
(
"memberInfoList"
,
memberInfoList
);
jsonObject
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
jsonObject
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
// 操作人id
jsonObject
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
dataApi
.
doRequest
(
RequestType
.
JSON
,
dataparams
,
jsonObject
.
toJSONString
(),
dataheadrs
);
JSONObject
response
=
dataApi
.
getBodyInJSON
();
return
response
;
}
}
src/main/java/com/xiaomai/cases/polar/reserve/group/TestBatchReserveGroup.java
0 → 100644
View file @
7e5d5f8c
package
com
.
xiaomai
.
cases
.
polar
.
reserve
.
group
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.polar.clue.MemberTools
;
import
com.xiaomai.cases.polar.finance.order.OrderTools
;
import
com.xiaomai.cases.polar.member.Tools
;
import
com.xiaomai.cases.polar.memberCard.CardTools
;
import
com.xiaomai.cases.polar.reserve.ReserveTools
;
import
com.xiaomai.cases.polar.schedule.group.GroupScheduleTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.RandomStringUtil
;
import
com.xiaomai.utils.TimeUtils
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeMethod
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
public
class
TestBatchReserveGroup
extends
BaseTestImpl
{
@Resource
(
name
=
"reserveTools"
)
ReserveTools
reserveTools
;
@Resource
(
name
=
"groupScheduleTools"
)
GroupScheduleTools
groupScheduleTools
;
MemberTools
memberTools
=
new
MemberTools
();
OrderTools
orderTools
=
new
OrderTools
();
CardTools
cardTools
=
new
CardTools
();
Tools
tools
=
new
Tools
();
private
String
courseId
=
"1848906529522774018"
;
//7个课次id
String
scheduleId1
;
String
scheduleId2
;
String
scheduleId3
;
String
scheduleId4
;
String
scheduleId5
;
String
scheduleId6
;
String
scheduleId7
;
String
memberId1
;
String
memberId2
;
JSONArray
getScheduleItemDetailReserveId1
=
new
JSONArray
();
JSONArray
getScheduleItemDetailReserveId2
=
new
JSONArray
();
JSONArray
getScheduleItemDetailReserveId3
=
new
JSONArray
();
JSONArray
getScheduleItemDetailReserveId4
=
new
JSONArray
();
JSONArray
getScheduleItemDetailReserveId5
=
new
JSONArray
();
JSONArray
getScheduleItemDetailReserveId6
=
new
JSONArray
();
JSONArray
getScheduleItemDetailReserveId7
=
new
JSONArray
();
//2个会员约7个课次的14个约课id,后面清除数据要用
String
getScheduleItemDetailReserveId11
;
String
getScheduleItemDetailReserveId22
;
String
getScheduleItemDetailReserveId33
;
String
getScheduleItemDetailReserveId44
;
String
getScheduleItemDetailReserveId55
;
String
getScheduleItemDetailReserveId66
;
String
getScheduleItemDetailReserveId77
;
String
getScheduleItemDetailReserveId111
;
String
getScheduleItemDetailReserveId222
;
String
getScheduleItemDetailReserveId333
;
String
getScheduleItemDetailReserveId444
;
String
getScheduleItemDetailReserveId555
;
String
getScheduleItemDetailReserveId666
;
String
getScheduleItemDetailReserveId777
;
String
cardId
;
JSONArray
memberInfo1
=
new
JSONArray
();
@BeforeMethod
@Override
public
void
beforeTest
(){
setTestInfo
(
ApiModule
.
Polar_Reserve
,
"API_batchReserveGroup"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"yff"
);
super
.
beforeTest
();
}
@Test
(
description
=
"批量预约团课"
)
public
void
testBatchReserveGroup
()
{
//因为是存量排好团课的数据去批量预约的,存量数据需要提前做的是:
//创建一个课程:批量预约团课课程-禁用 必须是30分钟;创建两个会员:批量约团课会员1和批量约团课会员2;排好团课,用上述的课程排好一年的数据;人数上限必须是60(下面的筛选是59人以上,不是60会筛不出来的),时间必须是00.00-00.30,上课星期是:周一~周日;教练是:f
//注意:只能排一年的,只排到了来年2025-04-01的,后面记得重新排团课
//注意:reserveMemberNum和planCheckBalance必须是1,超出太多会不够扣除,后面的校验也对不上
//根据筛选条件拉取对应的课次 筛选条件:课程(存量课程:批量预约团课课程-禁用:(这个课程已经排好课是00.00-00.30 必须30分钟 人数上限必须是60人 下面筛的是59以上的 否则会筛不出来的));
//日期范围:本周;上课星期:周一到周日;上课时间范围:00.00-24.00;上课教练:f;剩余可约人数:59人及以上; 预期:可以拉取7个课次
JSONObject
getCanReserveGroupScheduleList
=
reserveTools
.
getCanReserveGroupScheduleList
(
courseId
,
"1796482784551211010"
,
TimeUtils
.
getWeekFirstTime
(),
TimeUtils
.
getWeekLastTime
(),
59
,
0
,
1440
);
JSONObject
getCanReserveGroupScheduleListResult
=
getCanReserveGroupScheduleList
.
getJSONObject
(
"result"
);
int
size
=
Integer
.
parseInt
(
getCanReserveGroupScheduleListResult
.
getString
(
"size"
));
Assert
.
assertEquals
(
size
,
7
,
"筛选条件下的拉取课次数据应是7条"
);
//对应的七个scheduleId
JSONObject
jsonObjectscheduleId1
=
getCanReserveGroupScheduleListResult
.
getJSONArray
(
"records"
).
getJSONObject
(
0
);
scheduleId1
=
jsonObjectscheduleId1
.
getString
(
"scheduleId"
);
String
startTime1
=
jsonObjectscheduleId1
.
getString
(
"startTime"
);
JSONObject
jsonObjectscheduleId2
=
getCanReserveGroupScheduleListResult
.
getJSONArray
(
"records"
).
getJSONObject
(
1
);
scheduleId2
=
jsonObjectscheduleId2
.
getString
(
"scheduleId"
);
String
startTime2
=
jsonObjectscheduleId2
.
getString
(
"startTime"
);
JSONObject
jsonObjectscheduleId3
=
getCanReserveGroupScheduleListResult
.
getJSONArray
(
"records"
).
getJSONObject
(
2
);
scheduleId3
=
jsonObjectscheduleId3
.
getString
(
"scheduleId"
);
String
startTime3
=
jsonObjectscheduleId3
.
getString
(
"startTime"
);
JSONObject
jsonObjectscheduleId4
=
getCanReserveGroupScheduleListResult
.
getJSONArray
(
"records"
).
getJSONObject
(
3
);
scheduleId4
=
jsonObjectscheduleId4
.
getString
(
"scheduleId"
);
String
startTime4
=
jsonObjectscheduleId4
.
getString
(
"startTime"
);
JSONObject
jsonObjectscheduleId5
=
getCanReserveGroupScheduleListResult
.
getJSONArray
(
"records"
).
getJSONObject
(
4
);
scheduleId5
=
jsonObjectscheduleId5
.
getString
(
"scheduleId"
);
String
startTime5
=
jsonObjectscheduleId5
.
getString
(
"startTime"
);
JSONObject
jsonObjectscheduleId6
=
getCanReserveGroupScheduleListResult
.
getJSONArray
(
"records"
).
getJSONObject
(
5
);
scheduleId6
=
jsonObjectscheduleId6
.
getString
(
"scheduleId"
);
String
startTime6
=
jsonObjectscheduleId6
.
getString
(
"startTime"
);
JSONObject
jsonObjectscheduleId7
=
getCanReserveGroupScheduleListResult
.
getJSONArray
(
"records"
).
getJSONObject
(
6
);
scheduleId7
=
jsonObjectscheduleId7
.
getString
(
"scheduleId"
);
String
startTime7
=
jsonObjectscheduleId7
.
getString
(
"startTime"
);
String
chiefCoachId
=
getCanReserveGroupScheduleListResult
.
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"chiefCoachId"
);
String
spanMinutes
=
getCanReserveGroupScheduleListResult
.
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"spanMinutes"
);
// 查询存量的学员没有则创建学员:批量约团课会员1和批量约团课会员2
if
(
tools
.
commonSearch
(
"批量约团课会员1"
,
"NORMAL"
).
getJSONArray
(
"result"
).
size
()
>
0
)
{
memberId1
=
tools
.
commonSearch
(
"批量约团课会员1"
,
"NORMAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
if
(
tools
.
commonSearch
(
"批量约团课会员1"
,
"HISTORY"
).
getJSONArray
(
"result"
).
size
()
>
0
)
{
memberId1
=
tools
.
commonSearch
(
"批量约团课会员1"
,
"HISTORY"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
if
(
tools
.
commonSearch
(
"批量约团课会员1"
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
size
()
>
0
)
{
memberId1
=
tools
.
commonSearch
(
"批量约团课会员1"
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
{
memberId1
=
memberTools
.
create
(
"批量约团课会员1"
,
RandomStringUtil
.
randomMobile
(
"203"
)).
getString
(
"result"
);
}
memberInfo1
.
add
(
memberId1
);
if
(
tools
.
commonSearch
(
"批量约团课会员2"
,
"NORMAL"
).
getJSONArray
(
"result"
).
size
()
>
0
)
{
memberId2
=
tools
.
commonSearch
(
"批量约团课会员2"
,
"NORMAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
if
(
tools
.
commonSearch
(
"批量约团课会员2"
,
"HISTORY"
).
getJSONArray
(
"result"
).
size
()
>
0
)
{
memberId2
=
tools
.
commonSearch
(
"批量约团课会员2"
,
"HISTORY"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
if
(
tools
.
commonSearch
(
"批量约团课会员2"
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
size
()
>
0
)
{
memberId2
=
tools
.
commonSearch
(
"批量约团课会员2"
,
"POTENTIAL"
).
getJSONArray
(
"result"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
else
{
memberId2
=
memberTools
.
create
(
"批量约团课会员2"
,
RandomStringUtil
.
randomMobile
(
"203"
)).
getString
(
"result"
);
}
memberInfo1
.
add
(
memberId2
);
// 查询会员1是否有可用的会员卡,没有则购买
//会员1:
JSONArray
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId1
,
TimeUtils
.
getTodayTime
());
if
(
listUserReservableBenefit
.
size
()
==
0
)
{
// 购买适用的会员卡
//获取会员卡信息
//获取会员卡列表,没有则新建一个
int
cardTotal
=
Integer
.
parseInt
(
orderTools
.
fetchPageOfMemberCard
(
"次卡"
,
"MEMBER_CARD"
).
getJSONObject
(
"result"
).
getString
(
"total"
));
if
(
cardTotal
==
0
)
{
cardId
=
cardTools
.
memberCardCreate
(
"次卡-创建订单会员卡"
+
TimeUtils
.
getCurrentTime
()).
getString
(
"result"
);
}
JSONObject
memberCard
=
orderTools
.
fetchPageOfMemberCard
(
"次卡"
,
"MEMBER_CARD"
);
cardId
=
memberCard
.
getJSONObject
(
"result"
).
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"id"
);
BigDecimal
quantity
=
new
BigDecimal
(
memberCard
.
getJSONObject
(
"result"
).
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getJSONArray
(
"benefitList"
).
getJSONObject
(
0
).
getString
(
"balance"
));
float
price
=
Float
.
parseFloat
(
memberCard
.
getJSONObject
(
"result"
).
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"price"
));
int
validPeriod
=
Integer
.
parseInt
(
memberCard
.
getJSONObject
(
"result"
).
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"validPeriod"
));
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//获取签单要用的卡快照id
String
latestSnapshotId
=
orderTools
.
fetchDetailById
(
cardId
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
xmAppApi
.
getLoginInfo
().
getStudioId
(),
xmAppApi
.
getLoginInfo
().
getAdminId
()).
getJSONObject
(
"result"
).
getString
(
"latestSnapshotId"
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//检查会员对该卡是否超出购买上限
boolean
limitResult
=
orderTools
.
checkAllowPurchase
(
"MEMBER_CARD"
,
cardId
,
memberId1
,
"1"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
xmAppApi
.
getLoginInfo
().
getStudioId
(),
xmAppApi
.
getLoginInfo
().
getAdminId
()).
getBoolean
(
"success"
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
if
(
limitResult
==
true
)
{
//创建签单订单
JSONObject
orderResult
=
orderTools
.
signOrder
(
cardId
,
latestSnapshotId
,
quantity
,
price
,
validPeriod
,
latestSnapshotId
,
price
/
2
,
"PURCHASE"
,
"MEMBER_CARD"
,
memberId1
,
price
-
price
/
2
,
price
-
price
/
2
,
"1"
);
}
try
{
Thread
.
sleep
(
3000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
listUserReservableBenefit
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId1
,
TimeUtils
.
getTodayTime
());
}
// 查询会员1权益
String
benefitId1
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
String
memberCardId1
=
listUserReservableBenefit
.
getJSONObject
(
0
).
getString
(
"memberCardId"
);
memberInfo1
.
add
(
benefitId1
);
memberInfo1
.
add
(
memberCardId1
);
//会员2:
JSONArray
listUserReservableBenefit2
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId2
,
TimeUtils
.
getTodayTime
());
if
(
listUserReservableBenefit2
.
size
()
==
0
)
{
// 购买适用的会员卡
//获取会员卡信息
//获取会员卡列表,没有则新建一个
int
cardTotal
=
Integer
.
parseInt
(
orderTools
.
fetchPageOfMemberCard
(
"次卡"
,
"MEMBER_CARD"
).
getJSONObject
(
"result"
).
getString
(
"total"
));
if
(
cardTotal
==
0
)
{
cardId
=
cardTools
.
memberCardCreate
(
"次卡-创建订单会员卡"
+
TimeUtils
.
getCurrentTime
()).
getString
(
"result"
);
}
JSONObject
memberCard
=
orderTools
.
fetchPageOfMemberCard
(
"次卡"
,
"MEMBER_CARD"
);
cardId
=
memberCard
.
getJSONObject
(
"result"
).
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"id"
);
BigDecimal
quantity
=
new
BigDecimal
(
memberCard
.
getJSONObject
(
"result"
).
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getJSONArray
(
"benefitList"
).
getJSONObject
(
0
).
getString
(
"balance"
));
float
price
=
Float
.
parseFloat
(
memberCard
.
getJSONObject
(
"result"
).
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"price"
));
int
validPeriod
=
Integer
.
parseInt
(
memberCard
.
getJSONObject
(
"result"
).
getJSONArray
(
"records"
).
getJSONObject
(
0
).
getString
(
"validPeriod"
));
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//获取签单要用的卡快照id
String
latestSnapshotId
=
orderTools
.
fetchDetailById
(
cardId
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
xmAppApi
.
getLoginInfo
().
getStudioId
(),
xmAppApi
.
getLoginInfo
().
getAdminId
()).
getJSONObject
(
"result"
).
getString
(
"latestSnapshotId"
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//检查会员对该卡是否超出购买上限
boolean
limitResult
=
orderTools
.
checkAllowPurchase
(
"MEMBER_CARD"
,
cardId
,
memberId2
,
"1"
,
xmAppApi
.
getLoginInfo
().
getBrandId
(),
xmAppApi
.
getLoginInfo
().
getStudioId
(),
xmAppApi
.
getLoginInfo
().
getAdminId
()).
getBoolean
(
"success"
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
if
(
limitResult
==
true
)
{
//创建签单订单
JSONObject
orderResult
=
orderTools
.
signOrder
(
cardId
,
latestSnapshotId
,
quantity
,
price
,
validPeriod
,
latestSnapshotId
,
price
/
2
,
"PURCHASE"
,
"MEMBER_CARD"
,
memberId2
,
price
-
price
/
2
,
price
-
price
/
2
,
"1"
);
}
try
{
Thread
.
sleep
(
3000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
listUserReservableBenefit2
=
cardTools
.
listUserReservableBenefit
(
courseId
,
"GROUP_CLASS"
,
"MEMBER"
,
memberId2
,
TimeUtils
.
getTodayTime
());
}
// 查询会员2权益
String
benefitId2
=
listUserReservableBenefit2
.
getJSONObject
(
0
).
getString
(
"benefitId"
);
String
memberCardId2
=
listUserReservableBenefit2
.
getJSONObject
(
0
).
getString
(
"memberCardId"
);
memberInfo1
.
add
(
benefitId2
);
memberInfo1
.
add
(
memberCardId2
);
//批量预约检验,为true才可以继续批量预约
boolean
checkBatchReserve
=
Boolean
.
parseBoolean
(
reserveTools
.
checkBatchReserve
(
startTime7
,
7
,
memberId1
,
benefitId1
,
7
,
memberId2
,
benefitId2
).
getJSONObject
(
"result"
).
getString
(
"success"
));
try
{
Thread
.
sleep
(
3000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
if
(
checkBatchReserve
==
true
)
{
//批量预约
JSONObject
batchReserveGroup
=
new
JSONObject
();
batchReserveGroup
.
put
(
"courseId"
,
courseId
);
JSONArray
jsonArray
=
new
JSONArray
();
JSONObject
member1
=
new
JSONObject
();
member1
.
put
(
"memberId"
,
memberId1
);
//第一个会员
member1
.
put
(
"benefitId"
,
benefitId1
);
member1
.
put
(
"reserveMemberNum"
,
1
);
//预约人数,注意只能用1 否则超出太多会不够扣的 这样下面的校验就会有问题
member1
.
put
(
"planCheckBalance"
,
1
);
//单课次消耗额度(每次消耗*预约人数),每次消耗也必须是1,否则校验就对不上了
JSONObject
member2
=
new
JSONObject
();
member2
.
put
(
"memberId"
,
memberId2
);
//第二个会员
member2
.
put
(
"benefitId"
,
benefitId2
);
member2
.
put
(
"reserveMemberNum"
,
1
);
//预约人数,注意只能用1 否则超出太多会不够扣的 这样下面的校验就会有问题
member2
.
put
(
"planCheckBalance"
,
1
);
//单课次消耗额度(每次消耗*预约人数),每次消耗也必须是1,否则校验就对不上了
jsonArray
.
add
(
member1
);
jsonArray
.
add
(
member2
);
batchReserveGroup
.
put
(
"memberInfoList"
,
jsonArray
);
JSONArray
jsonArray1
=
new
JSONArray
();
//第一个课次
JSONObject
jsonObject1
=
new
JSONObject
();
jsonObject1
.
put
(
"chiefCoachId"
,
chiefCoachId
);
jsonObject1
.
put
(
"scheduleId"
,
scheduleId1
);
jsonObject1
.
put
(
"scheduleStartTime"
,
startTime1
);
jsonObject1
.
put
(
"spanMinutes"
,
spanMinutes
);
JSONArray
assistantCoachIds1
=
new
JSONArray
();
JSONArray
venueAreaIds1
=
new
JSONArray
();
jsonObject1
.
put
(
"assistantCoachIds"
,
assistantCoachIds1
);
jsonObject1
.
put
(
"venueAreaIds"
,
venueAreaIds1
);
jsonArray1
.
add
(
jsonObject1
);
//第二个课次
JSONObject
jsonObject2
=
new
JSONObject
();
jsonObject2
.
put
(
"chiefCoachId"
,
chiefCoachId
);
jsonObject2
.
put
(
"scheduleId"
,
scheduleId2
);
jsonObject2
.
put
(
"scheduleStartTime"
,
startTime2
);
jsonObject2
.
put
(
"spanMinutes"
,
spanMinutes
);
JSONArray
assistantCoachIds2
=
new
JSONArray
();
jsonObject2
.
put
(
"assistantCoachIds"
,
assistantCoachIds2
);
JSONArray
venueAreaIds2
=
new
JSONArray
();
jsonObject2
.
put
(
"venueAreaIds"
,
venueAreaIds2
);
jsonArray1
.
add
(
jsonObject2
);
//第三个课次
JSONObject
jsonObject3
=
new
JSONObject
();
jsonObject3
.
put
(
"chiefCoachId"
,
chiefCoachId
);
jsonObject3
.
put
(
"scheduleId"
,
scheduleId3
);
jsonObject3
.
put
(
"scheduleStartTime"
,
startTime3
);
jsonObject3
.
put
(
"spanMinutes"
,
spanMinutes
);
JSONArray
assistantCoachIds3
=
new
JSONArray
();
jsonObject3
.
put
(
"assistantCoachIds"
,
assistantCoachIds3
);
JSONArray
venueAreaIds3
=
new
JSONArray
();
jsonObject3
.
put
(
"venueAreaIds"
,
venueAreaIds3
);
jsonArray1
.
add
(
jsonObject3
);
//第四个课次
JSONObject
jsonObject4
=
new
JSONObject
();
jsonObject4
.
put
(
"chiefCoachId"
,
chiefCoachId
);
jsonObject4
.
put
(
"scheduleId"
,
scheduleId4
);
jsonObject4
.
put
(
"scheduleStartTime"
,
startTime4
);
jsonObject4
.
put
(
"spanMinutes"
,
spanMinutes
);
JSONArray
assistantCoachIds4
=
new
JSONArray
();
jsonObject4
.
put
(
"assistantCoachIds"
,
assistantCoachIds4
);
JSONArray
venueAreaIds4
=
new
JSONArray
();
jsonObject4
.
put
(
"venueAreaIds"
,
venueAreaIds4
);
jsonArray1
.
add
(
jsonObject4
);
//第五个课次
JSONObject
jsonObject5
=
new
JSONObject
();
jsonObject5
.
put
(
"chiefCoachId"
,
chiefCoachId
);
jsonObject5
.
put
(
"scheduleId"
,
scheduleId5
);
jsonObject5
.
put
(
"scheduleStartTime"
,
startTime5
);
jsonObject5
.
put
(
"spanMinutes"
,
spanMinutes
);
JSONArray
assistantCoachIds5
=
new
JSONArray
();
jsonObject5
.
put
(
"assistantCoachIds"
,
assistantCoachIds5
);
JSONArray
venueAreaIds5
=
new
JSONArray
();
jsonObject5
.
put
(
"venueAreaIds"
,
venueAreaIds5
);
jsonArray1
.
add
(
jsonObject5
);
//第六个课次
JSONObject
jsonObject6
=
new
JSONObject
();
jsonObject6
.
put
(
"chiefCoachId"
,
chiefCoachId
);
jsonObject6
.
put
(
"scheduleId"
,
scheduleId6
);
jsonObject6
.
put
(
"scheduleStartTime"
,
startTime6
);
jsonObject6
.
put
(
"spanMinutes"
,
spanMinutes
);
JSONArray
assistantCoachIds6
=
new
JSONArray
();
jsonObject6
.
put
(
"assistantCoachIds"
,
assistantCoachIds6
);
JSONArray
venueAreaIds6
=
new
JSONArray
();
jsonObject6
.
put
(
"venueAreaIds"
,
venueAreaIds6
);
jsonArray1
.
add
(
jsonObject6
);
//第七个课次
JSONObject
jsonObject7
=
new
JSONObject
();
jsonObject7
.
put
(
"chiefCoachId"
,
chiefCoachId
);
jsonObject7
.
put
(
"scheduleId"
,
scheduleId7
);
jsonObject7
.
put
(
"scheduleStartTime"
,
startTime7
);
jsonObject7
.
put
(
"spanMinutes"
,
spanMinutes
);
JSONArray
assistantCoachIds7
=
new
JSONArray
();
jsonObject7
.
put
(
"assistantCoachIds"
,
assistantCoachIds7
);
JSONArray
venueAreaIds7
=
new
JSONArray
();
jsonObject7
.
put
(
"venueAreaIds"
,
venueAreaIds7
);
jsonArray1
.
add
(
jsonObject7
);
batchReserveGroup
.
put
(
"reserveScheduleList"
,
jsonArray1
);
batchReserveGroup
.
put
(
"brandId"
,
xmAppApi
.
getLoginInfo
().
getBrandId
());
batchReserveGroup
.
put
(
"studioId"
,
xmAppApi
.
getLoginInfo
().
getStudioId
());
batchReserveGroup
.
put
(
"operatorId"
,
xmAppApi
.
getLoginInfo
().
getAdminId
());
xmAppApi
.
doRequest
(
RequestType
.
JSON
,
params
,
batchReserveGroup
.
toJSONString
(),
headers
).
assetsSuccess
(
true
);
JSONObject
response
=
xmAppApi
.
getBodyInJSON
();
String
success
=
response
.
getString
(
"success"
);
Assert
.
assertEquals
(
success
,
"true"
,
"调用批量预约接口失败"
);
try
{
Thread
.
sleep
(
10000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
//拿到预约id-reserveid
//第一个会员的7个课次的
getScheduleItemDetailReserveId1
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId1
).
getJSONArray
(
"reserveIds"
);
getScheduleItemDetailReserveId11
=
getScheduleItemDetailReserveId1
.
getString
(
0
);
getScheduleItemDetailReserveId111
=
getScheduleItemDetailReserveId1
.
getString
(
1
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
getScheduleItemDetailReserveId2
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId2
).
getJSONArray
(
"reserveIds"
);
getScheduleItemDetailReserveId22
=
getScheduleItemDetailReserveId2
.
getString
(
0
);
getScheduleItemDetailReserveId222
=
getScheduleItemDetailReserveId2
.
getString
(
1
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
getScheduleItemDetailReserveId3
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId3
).
getJSONArray
(
"reserveIds"
);
getScheduleItemDetailReserveId33
=
getScheduleItemDetailReserveId3
.
getString
(
0
);
getScheduleItemDetailReserveId333
=
getScheduleItemDetailReserveId3
.
getString
(
1
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
getScheduleItemDetailReserveId4
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId4
).
getJSONArray
(
"reserveIds"
);
getScheduleItemDetailReserveId44
=
getScheduleItemDetailReserveId4
.
getString
(
0
);
getScheduleItemDetailReserveId444
=
getScheduleItemDetailReserveId4
.
getString
(
1
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
getScheduleItemDetailReserveId5
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId5
).
getJSONArray
(
"reserveIds"
);
getScheduleItemDetailReserveId55
=
getScheduleItemDetailReserveId5
.
getString
(
0
);
getScheduleItemDetailReserveId555
=
getScheduleItemDetailReserveId5
.
getString
(
1
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
getScheduleItemDetailReserveId6
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId6
).
getJSONArray
(
"reserveIds"
);
getScheduleItemDetailReserveId66
=
getScheduleItemDetailReserveId6
.
getString
(
0
);
getScheduleItemDetailReserveId666
=
getScheduleItemDetailReserveId6
.
getString
(
1
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
getScheduleItemDetailReserveId7
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId7
).
getJSONArray
(
"reserveIds"
);
getScheduleItemDetailReserveId77
=
getScheduleItemDetailReserveId7
.
getString
(
0
);
getScheduleItemDetailReserveId777
=
getScheduleItemDetailReserveId7
.
getString
(
1
);
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
}
// check 1: 会员的会员卡售卖记录详情中包含该批量约课记录锁定
String
lockedPurchaseBalance1
=
cardTools
.
memberCardFindDetailById
(
memberCardId1
).
getJSONObject
(
"result"
).
getJSONObject
(
"courseBenefit"
).
getString
(
"lockedPurchaseBalance"
);
String
lockedPurchaseBalance2
=
cardTools
.
memberCardFindDetailById
(
memberCardId2
).
getJSONObject
(
"result"
).
getJSONObject
(
"courseBenefit"
).
getString
(
"lockedPurchaseBalance"
);
Assert
.
assertEquals
(
lockedPurchaseBalance1
,
"7.00"
,
"批量约预约人数为1的团课成功后,会员1的对应卡的锁定次数不是会员1预约1人1*拉取的课次数"
);
Assert
.
assertEquals
(
lockedPurchaseBalance2
,
"7.00"
,
"批量约预约人数为1的团课成功后,会员2的对应卡的锁定次数不是会员2预约1人1*拉取的课次数"
);
//check 2:会员的已约中有此7个课次
JSONObject
getPageByMember1
=
reserveTools
.
getPageByMember1
(
courseId
,
"SUCCESS"
,
"UN_SIGNED"
,
""
,
TimeUtils
.
getWeekFirstTime
(),
TimeUtils
.
getWeekLastTime
(),
memberId1
,
"GROUP_CLASS"
);
int
total1
=
Integer
.
parseInt
(
getPageByMember1
.
getString
(
"total"
));
JSONObject
getPageByMember2
=
reserveTools
.
getPageByMember1
(
courseId
,
"SUCCESS"
,
"UN_SIGNED"
,
""
,
TimeUtils
.
getWeekFirstTime
(),
TimeUtils
.
getWeekLastTime
(),
memberId2
,
"GROUP_CLASS"
);
int
total2
=
Integer
.
parseInt
(
getPageByMember2
.
getString
(
"total"
));
Assert
.
assertEquals
(
total1
,
size
,
"批量约预约人数为1的团课成功后,会员1详情的团课预约记录不是预约人数1*拉取的课次数"
);
Assert
.
assertEquals
(
total2
,
size
,
"批量约预约人数为1的团课成功后,会员2详情的团课预约记录不是预约人数1*拉取的课次数"
);
}
else
if
(
checkBatchReserve
==
false
){
System
.
out
.
println
(
"会员的消耗方式不可用:所选卡可用次数不足或上课日期不在所选卡有效期内"
);
}
}
//check 3:校验每个课次中是否都包含了该会员
@DataProvider
public
Object
[][]
dataProvider
(){
return
new
Object
[][]{
{
scheduleId1
},
//课次1
{
scheduleId2
},
//课次2
{
scheduleId3
},
//课次3
{
scheduleId4
},
//课次4
{
scheduleId5
},
//课次5
{
scheduleId6
},
//课次6
{
scheduleId7
}
//课次7
};
}
@Test
(
description
=
"校验每个课次中是否都包含了该两个会员"
,
dataProvider
=
"dataProvider"
,
priority
=
1
)
public
void
testCheckMemberReserve
(
String
scheduleId
){
JSONObject
getScheduleItemDetail
=
groupScheduleTools
.
getScheduleItemDetail
(
scheduleId
);
JSONArray
memberReserveList
=
getScheduleItemDetail
.
getJSONArray
(
"memberReserveList"
);
boolean
success
=
false
;
for
(
int
i
=
0
;
i
<
memberReserveList
.
size
();
i
++){
if
((
memberReserveList
.
getJSONObject
(
i
).
getString
(
"memberId"
).
equals
(
memberId1
))
||
(
memberReserveList
.
getJSONObject
(
i
).
getString
(
"memberId"
).
equals
(
memberId2
))){
success
=
true
;
}
}
Assert
.
assertTrue
(
success
,
"批量约团课后每个课次详情对应的学员不在课次中"
);
}
//清除数据:批量取消上面批量预约的课次
@DataProvider
public
Object
[][]
dataProvider1
(){
return
new
Object
[][]{
//第一个会员的7个预约id
{
getScheduleItemDetailReserveId11
,
true
},
//课次1
{
getScheduleItemDetailReserveId22
,
true
},
//课次2
{
getScheduleItemDetailReserveId33
,
true
},
//课次3
{
getScheduleItemDetailReserveId44
,
true
},
//课次4
{
getScheduleItemDetailReserveId55
,
true
},
//课次5
{
getScheduleItemDetailReserveId66
,
true
},
//课次6
{
getScheduleItemDetailReserveId77
,
true
},
//课次7
//第二个会员的7个预约id
{
getScheduleItemDetailReserveId111
,
true
},
//课次1
{
getScheduleItemDetailReserveId222
,
true
},
//课次2
{
getScheduleItemDetailReserveId333
,
true
},
//课次3
{
getScheduleItemDetailReserveId444
,
true
},
//课次4
{
getScheduleItemDetailReserveId555
,
true
},
//课次5
{
getScheduleItemDetailReserveId666
,
true
},
//课次6
{
getScheduleItemDetailReserveId777
,
true
}
//课次7
};
}
@Test
(
description
=
"批量取消上面批量预约的课次"
,
dataProvider
=
"dataProvider1"
,
priority
=
2
)
public
void
testCancelMemberReserve
(
String
reserveId
,
boolean
success
){
reserveTools
.
cancelMemberReserve
(
reserveId
,
success
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment