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
8ccdea0c
Commit
8ccdea0c
authored
Jun 13, 2024
by
DuJunLi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加时间工具类
创建团课排课工具类和新建排课case
parent
87ee3c3e
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
471 additions
and
4 deletions
+471
-4
src/main/java/com/xiaomai/cases/polar/schedule/group/GroupScheduleTools.java
+193
-0
src/main/java/com/xiaomai/cases/polar/schedule/group/TestCreateGroupRuleSchedule.java
+128
-0
src/main/java/com/xiaomai/enums/ApiModule.java
+3
-0
src/main/java/com/xiaomai/enums/LoginAccount.java
+1
-1
src/main/java/com/xiaomai/utils/CommUtil.java
+146
-3
No files found.
src/main/java/com/xiaomai/cases/polar/schedule/group/GroupScheduleTools.java
0 → 100644
View file @
8ccdea0c
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
group
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.client.DataUserInfo
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.RequestType
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.XMBaseTest
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @author adu
* data 2024/6/12 11:51
*/
@Component
(
"groupScheduleTools"
)
public
class
GroupScheduleTools
extends
XMBaseTest
{
public
void
setUP
(
String
apiName
,
DataUserInfo
...
userInfo
)
{
dataApi
.
setApiModule
(
ApiModule
.
Polar_Schedule
)
.
setApiName
(
apiName
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
(
userInfo
);
}
/**
* 创建团课排课
*
* @param courseId 团课课程ID
* @param chiefCoachId 教练ID
* @param startDate 排课开始日期
* @param endDate 排课结束日期
* @param venueAreaIds 场馆ID
* @param assistCoachIds 助教ID
* @param force 是否冲突
* @param endType 排课结束方式:1 按日期,2 按次数
*/
public
void
createGroupRuleSchedule
(
String
courseId
,
String
chiefCoachId
,
String
startDate
,
String
endDate
,
List
<
String
>
venueAreaIds
,
List
<
String
>
assistCoachIds
,
Boolean
force
,
int
endType
)
{
setUP
(
"API_createGroupRuleSchedule"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
// 场馆
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"courseId"
,
courseId
);
body
.
put
(
"chiefCoachId"
,
chiefCoachId
);
body
.
put
(
"minMemberNum"
,
2
);
// 开课人数
body
.
put
(
"maxMemberNum"
,
999
);
//人数上限
body
.
put
(
"minuteOffset"
,
480
);
//上课开始时间
body
.
put
(
"startDate"
,
startDate
);
//排课开始日期
body
.
put
(
"endDate"
,
endDate
);
//排课结束日期
String
[]
weekDaysArray
=
{
"MONDAY"
,
"TUESDAY"
,
"WEDNESDAY"
,
"THURSDAY"
,
"FRIDAY"
,
"SATURDAY"
,
"SUNDAY"
};
List
<
String
>
weekdaysList
=
Arrays
.
asList
(
weekDaysArray
);
body
.
put
(
"weekdays"
,
weekdaysList
);
//设置上课星期,目前是每天都会选择
body
.
put
(
"venueAreaIds"
,
venueAreaIds
);
//场地,可设置为空 new ArrayList<>();
body
.
put
(
"assistCoachIds"
,
assistCoachIds
);
//设置助教,可设置为空 new ArrayList<>();
body
.
put
(
"force"
,
force
);
//是否有冲突 true,false
if
(
endType
==
2
)
{
body
.
put
(
"maxLoop"
,
60
);
//如果排课方式选择按次数,设置次数为60
body
.
put
(
"endDate"
,
CommUtil
.
getNDayEndTimeTamp
(
60
));
//排课结束日期,这里就设置自动延顺60天,结束日期会覆盖你传的endDate
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
}
/**
* 查看排课日程
* @param courseId 可根据课程查询
* @param coachId 可根据教练查询
* @return
*/
public
JSONArray
getGroupRuleScheduleList
(
String
courseId
,
String
coachId
){
setUP
(
"API_getGroupRuleScheduleList"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
if
(
courseId
!=
null
&&
courseId
.
length
()!=
0
){
body
.
put
(
"courseId"
,
courseId
);
}
if
(
coachId
!=
null
&&
coachId
.
length
()!=
0
){
body
.
put
(
"coachId"
,
coachId
);
}
dataApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
return
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result"
);
}
/**
* 查询存量团课课程
* @param courseName
* @return
*/
public
String
getStockGroupCourseId
(
String
courseName
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Course
)
.
setApiName
(
"API_getGroupClassPage"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
();
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"courseState"
,
"ON"
);
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
50
);
body
.
put
(
"courseNameLike"
,
courseName
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
if
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records"
).
length
()==
0
){
return
""
;
}
else
{
return
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.records[0].brandCourseId"
);
}
}
/**
* 删除团课排课日程
* @param ruleId
*/
public
void
delGroupRuleSchedule
(
String
ruleId
){
setUP
(
"API_delGroupRuleSchedule"
);
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"force"
,
false
);
body
.
put
(
"ruleId"
,
ruleId
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
}
/**
* 获取教练ID
* @param nickNameList 可根据传入的昵称,获取对应的ID
* @return
*/
public
List
<
String
>
getStudioAdminId
(
List
<
String
>
nickNameList
){
dataApi
.
setApiModule
(
ApiModule
.
Polar_Admin
)
.
setApiName
(
"API_pageStudioAdmin"
)
.
setTerminal
(
Terminal
.
B
);
super
.
beforeDataRequest
();
JSONObject
body
=
new
JSONObject
();
body
.
put
(
"operatorId"
,
dataApi
.
getLoginInfo
().
getAdminId
());
body
.
put
(
"studioId"
,
dataApi
.
getLoginInfo
().
getStudioId
());
body
.
put
(
"brandId"
,
dataApi
.
getLoginInfo
().
getBrandId
());
body
.
put
(
"current"
,
0
);
body
.
put
(
"size"
,
50
);
body
.
put
(
"state"
,
"DUTY"
);
body
.
put
(
"teachingType"
,
"LEAGUE_CLASS"
);
dataApi
.
doRequest
(
RequestType
.
JSON
,
params
,
body
.
toString
(),
headers
).
assetsSuccess
(
true
);
int
count
=
Integer
.
valueOf
(
XMJSONPath
.
readPath
(
dataApi
.
getApi_response
(),
"$.result.total"
));
List
<
String
>
adminIds
=
new
ArrayList
<>();
if
(
count
>
0
)
{
JSONArray
records
=
XMJSONPath
.
getJSONArrayByReadPath
(
dataApi
.
getApi_response
(),
"$.result.records"
);
adminIds
=
records
.
stream
()
.
filter
(
obj
->
CollectionUtils
.
isEmpty
(
nickNameList
)
||
nickNameList
.
contains
(((
JSONObject
)
obj
).
getString
(
"nickName"
)))
//如果nickNameList为空或者包含搜索结果集中对应的昵称,就会过滤
.
map
(
obj
->
{
JSONObject
adminIdInfo
=
(
JSONObject
)
obj
;
return
adminIdInfo
.
getString
(
"id"
);
}
).
collect
(
Collectors
.
toList
());
return
adminIds
;
}
return
null
;
}
}
src/main/java/com/xiaomai/cases/polar/schedule/group/TestCreateGroupRuleSchedule.java
0 → 100644
View file @
8ccdea0c
package
com
.
xiaomai
.
cases
.
polar
.
schedule
.
group
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.xiaomai.basetest.BaseTestImpl
;
import
com.xiaomai.cases.polar.course.CourseTools
;
import
com.xiaomai.cases.polar.setting.courseCategory.CourseCategoryTools
;
import
com.xiaomai.cases.polar.setting.venue.VenueAreaTools
;
import
com.xiaomai.enums.ApiModule
;
import
com.xiaomai.enums.LoginAccount
;
import
com.xiaomai.enums.Terminal
;
import
com.xiaomai.utils.CommUtil
;
import
com.xiaomai.utils.XMJSONPath
;
import
org.testng.Assert
;
import
org.testng.annotations.BeforeClass
;
import
org.testng.annotations.Test
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @author adu
* data 2024/6/12 15:54
*/
public
class
TestCreateGroupRuleSchedule
extends
BaseTestImpl
{
@Resource
(
name
=
"courseCategoryTools"
)
CourseCategoryTools
courseCategoryTools
;
@Resource
(
name
=
"courseTools"
)
CourseTools
courseTools
;
@Resource
(
name
=
"groupScheduleTools"
)
GroupScheduleTools
groupScheduleTools
;
@Resource
(
name
=
"venueAreaTools"
)
VenueAreaTools
venueAreaTools
;
//获取本周第一天的时间戳
String
beginTimeTamp
=
CommUtil
.
oneKeyGetWeekStartDay
();
//获取当前时间加160天后的时间戳 23:59:59 用于结束日期
String
endDateTimeTamp
=
CommUtil
.
getNDayEndTimeTamp
(
180
);
//获取当天时间时间戳:当天时间戳格式:2024-6-12 00:00:00点,用于开始日期
String
todayTimeTamp
=
CommUtil
.
oneKeyGetAddDay
(
0
);
//前天的时间戳,开始时间
String
theDayBeforeYesterdayTimeTamp
=
CommUtil
.
oneKeyGetAddDay
(-
2
);
String
courseName
=
"阿杜自动化团课课程"
;
@BeforeClass
public
void
beforeTest
()
{
setTestInfo
(
ApiModule
.
Polar_Schedule
,
"API_createGroupRuleSchedule"
,
LoginAccount
.
GYM_PROD
,
Terminal
.
B
,
"adu"
);
super
.
beforeTest
();
}
@Test
public
void
testCreateGroupRuleSchedule
()
{
//获取存量课程ID
String
courseId
=
groupScheduleTools
.
getStockGroupCourseId
(
courseName
);
if
(
courseId
==
""
)
{
//获取存量课程分类ID
String
categoryId
=
courseCategoryTools
.
getCourseCategoryPage
(
"普拉提"
);
courseId
=
courseTools
.
createGroupCourse
(
courseName
,
categoryId
,
"STUDIO"
);
}
//获取存量场地
List
<
String
>
venueAreaIds
=
getStockArea
(
"流星花园秘密基地"
);
//获取存量教练
List
<
String
>
chiefCoachId
=
new
ArrayList
<>();
chiefCoachId
.
add
(
"杜君丽"
);
String
chiefCoachIdS
=
groupScheduleTools
.
getStudioAdminId
(
chiefCoachId
).
get
(
0
).
toString
();
//获取存量助教
List
<
String
>
assistCoachIds
=
new
ArrayList
<>();
assistCoachIds
.
add
(
"木头"
);
assistCoachIds
.
add
(
"吴彦祖"
);
List
<
String
>
assistCoachIdS
=
groupScheduleTools
.
getStudioAdminId
(
chiefCoachId
);
//获取存量助教
//1-创建排课日程
groupScheduleTools
.
createGroupRuleSchedule
(
courseId
,
chiefCoachIdS
,
todayTimeTamp
,
endDateTimeTamp
,
venueAreaIds
,
assistCoachIdS
,
false
,
1
);
//2-查询排课日程
JSONArray
result
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
chiefCoachIdS
);
Assert
.
assertTrue
(
result
.
size
()
>=
1
);
//统计查询到的目标日程数量
int
size
=
result
.
size
();
String
ruldId
=
XMJSONPath
.
readPath
(
result
.
getJSONObject
(
0
),
"$.ruleId"
);
groupScheduleTools
.
delGroupRuleSchedule
(
ruldId
);
JSONArray
result2
=
groupScheduleTools
.
getGroupRuleScheduleList
(
courseId
,
chiefCoachIdS
);
//删除成功后,统计查询到的目标日程数量是否-1
Assert
.
assertEquals
(
result2
.
size
(),
size
-
1
);
}
/**
* 获取存量场地
*
* @param areaName 根据指定场地名称,匹配出对应的场地ID,如果无匹配的则新建,如果场地列表无数据,则新建个
* @return
*/
public
List
<
String
>
getStockArea
(
String
areaName
)
{
JSONObject
result
=
venueAreaTools
.
getVenueAreaPage
();
int
count
=
XMJSONPath
.
getJSONArrayByReadPath
(
result
,
"$.records"
).
size
();
List
<
String
>
areaIds
=
new
ArrayList
<>();
if
(
count
>
0
)
{
areaIds
=
result
.
getJSONArray
(
"records"
).
toJavaList
(
JSONObject
.
class
).
stream
().
filter
(
obj
->
(
areaName
).
equals
(
obj
.
getString
(
"groupName"
)))
.
map
(
obj
->
{
JSONObject
areaIdInfo
=
(
JSONObject
)
obj
;
return
areaIdInfo
.
getJSONArray
(
"areaList"
).
getJSONObject
(
0
).
getString
(
"id"
);
}
).
collect
(
Collectors
.
toList
());
if
(
areaIds
.
isEmpty
())
{
//如果无匹配的则新建一个匹配的场地
String
areaId
=
venueAreaTools
.
createVenueArea
(
areaName
);
areaIds
.
add
(
areaId
);
return
areaIds
;
}
return
areaIds
;
//如果匹配到了,取匹配到的场地ID
}
else
{
//如果场地列表为空,则新建一个
String
areaId
=
venueAreaTools
.
createVenueArea
(
areaName
);
areaIds
.
add
(
areaId
);
return
areaIds
;
}
}
}
\ No newline at end of file
src/main/java/com/xiaomai/enums/ApiModule.java
View file @
8ccdea0c
...
...
@@ -14,6 +14,9 @@ public class ApiModule {
public
static
String
Polar_Finance
=
"polar_finance"
;
//财务中心
public
static
String
Polar_Schedule
=
"polar_schedule"
;
//课程排期
...
...
src/main/java/com/xiaomai/enums/LoginAccount.java
View file @
8ccdea0c
...
...
@@ -10,7 +10,7 @@ public class LoginAccount {
public
static
String
YFF_DEV
=
"yff_dev"
;
public
static
String
ZYX_DEV
=
"zyx_dev"
;
public
static
String
ADU_PROD
=
"
adu_prod
"
;
public
static
String
ADU_PROD
=
"
gym_prod_du
"
;
public
static
String
GYM_PROD
=
"GYM_PROd"
+
""
;
...
...
src/main/java/com/xiaomai/utils/CommUtil.java
View file @
8ccdea0c
package
com
.
xiaomai
.
utils
;
import
org.joda.time.DateTime
;
import
org.joda.time.LocalDate
;
import
org.testng.annotations.Test
;
import
java.beans.BeanInfo
;
import
java.beans.Introspector
;
import
java.beans.PropertyDescriptor
;
import
java.io.FileInputStream
;
import
java.lang.reflect.Method
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Properties
;
import
java.util.*
;
public
class
CommUtil
{
public
static
Date
now
=
new
Date
();
public
static
String
getCurrentTime
()
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
...
...
@@ -67,4 +71,143 @@ public class CommUtil {
}
}
/**
* 在当前时间上增加days天,days – 可以为负
*
* @param days
* @return
*/
public
static
Date
addDay
(
int
days
)
{
return
new
LocalDate
().
plusDays
(
days
).
toDate
();
}
public
static
String
getFormatTimeStr
(
Date
date
,
String
format
)
{
assert
date
!=
null
;
try
{
return
new
SimpleDateFormat
(
format
).
format
(
date
);
}
catch
(
Exception
ignored
)
{
return
""
;
}
}
/**
* 获取日期的时间戳格式
*
* @param time 制定日期时间,根据pattern格式传值
* @param pattern 时间格式 比如1>yyyy-MM-dd HH:mm:ss 2>yyyy-MM-dd 3>yyyy-MM-dd HH:mm
* @return
*/
public
static
String
getStringTimestamp
(
String
time
,
String
pattern
)
{
Date
date
=
null
;
try
{
date
=
getFormattedDate
(
time
,
pattern
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
date
.
getTime
()
+
""
;
}
/**
* 将指定格式的日期时间字符串,转换为Date
* 若 指定格式 与 日期时间字符串 不一致时,会抛出转换异常
*
* @param dateStr 日期时间字符串
* @param format 指定格式
* @return
* @throws ParseException
*/
public
static
Date
getFormattedDate
(
String
dateStr
,
String
format
)
throws
ParseException
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
format
);
return
sdf
.
parse
(
dateStr
);
}
/**
* 获取当前时间+n天的日期时间戳,一般是开始日期的时间戳 00:00:00
*
* @return
*/
public
static
String
oneKeyGetAddDay
(
int
day
)
{
Date
getAddDayData
=
addDay
(
day
);
//获取本周的第一天
String
getAddDayDataString
=
getFormatTimeStr
(
getAddDayData
,
"yyyy-MM-dd HH:mm:ss"
);
//时间格式转化为string
return
getStringTimestamp
(
getAddDayDataString
,
"yyyy-MM-dd HH:mm:ss"
);
}
public
static
Date
getStartOfDateWeek
(
Date
date
)
{
return
new
DateTime
(
date
).
withDayOfWeek
(
1
).
withTimeAtStartOfDay
().
toDate
();
}
/**
* 获取本周第一天
*
* @return
*/
public
static
String
oneKeyGetWeekStartDay
()
{
Date
getWeekStartDayData
=
getStartOfDateWeek
(
now
);
//获取本周的第一天
String
getWeekStartDay
=
getFormatTimeStr
(
getWeekStartDayData
,
"yyyy-MM-dd HH:mm:ss"
);
//时间格式转化为string
return
getStringTimestamp
(
getWeekStartDay
,
"yyyy-MM-dd HH:mm:ss"
);
}
public
static
Date
getEndOfDateWeek
(
Date
date
)
{
return
new
DateTime
(
date
).
withDayOfWeek
(
7
).
withTime
(
23
,
59
,
59
,
0
).
toDate
();
}
/**
* 获取本周最后一天
*
* @return
*/
public
static
String
oneKeyGetWeekEndDay
()
{
Date
getWeekEndDayData
=
getEndOfDateWeek
(
now
);
//获取本周的最后一天
String
getWeekEndDay
=
getFormatTimeStr
(
getWeekEndDayData
,
"yyyy-MM-dd HH:mm:ss"
);
//时间格式转化为string
return
getStringTimestamp
(
getWeekEndDay
,
"yyyy-MM-dd HH:mm:ss"
);
}
public
static
Date
getEndOfDay
(
Date
date
)
{
assert
date
!=
null
;
return
new
DateTime
(
date
).
withTime
(
23
,
59
,
59
,
0
).
toDate
();
}
/**
* 设定时间+N天
*
* @param date 设置的时间 Date now=new Date();
* @param n 天
* @return
*/
public
static
Date
addNDays
(
Date
date
,
int
n
)
{
Calendar
now
=
Calendar
.
getInstance
();
now
.
setTime
(
date
);
now
.
add
(
Calendar
.
DAY_OF_MONTH
,
n
);
return
now
.
getTime
();
}
/**
* 当前时间+n天结束日期时间戳 23:59:59
* @param n
* @return
*/
public
static
String
getNDayEndTimeTamp
(
int
n
){
Date
now
=
new
Date
();
Date
totalDate
=
addNDays
(
now
,
n
);
String
getNDayEndTime
=
getFormatTimeStr
(
getEndOfDay
(
totalDate
),
"yyyy-MM-dd HH:mm:ss"
);
//时间格式转化为string
return
getStringTimestamp
(
getNDayEndTime
,
"yyyy-MM-dd HH:mm:ss"
);
}
@Test
public
void
test
()
{
//当天时间戳格式:2024-6-12 00:00:00点
System
.
out
.
println
(
"当前时间时间戳"
+
oneKeyGetAddDay
(
0
));
System
.
out
.
println
(
"****"
+
getNDayEndTimeTamp
(
2
));
}
}
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