Commit 4162e588 by DuJunLi
parents a07aa094 dde03b4a
......@@ -6,6 +6,7 @@ import com.xiaomai.client.DataUserInfo;
import com.xiaomai.enums.ApiModule;
import com.xiaomai.enums.RequestType;
import com.xiaomai.enums.Terminal;
import com.xiaomai.utils.RandomStringUtil;
import com.xiaomai.utils.XMBaseTest;
import org.springframework.stereotype.Component;
......@@ -183,7 +184,7 @@ public class ReserveCTools extends XMBaseTest {
* @param dataUserInfos
* @return: com.alibaba.fastjson.JSONObject
**/
public JSONObject getDetailById(String reserveId,DataUserInfo...dataUserInfos) {
public JSONObject getReserveDetailById(String reserveId,DataUserInfo...dataUserInfos) {
setUP("API_getDetailById");
JSONObject body = new JSONObject();
......@@ -336,4 +337,130 @@ public class ReserveCTools extends XMBaseTest {
}
/**
* @description: 检查会员课次是否冲突
* @author: xuyamei
* @date: 2024/7/30 11:18
* @param memberId 会员id
* @param scheduleId 课次id
* @return: java.lang.Boolean
**/
public Boolean checkMemberConflict(String memberId,String scheduleId){
setUP("API_checkMemberConflict");
JSONObject body = new JSONObject();
body.put("scheduleId",scheduleId);
body.put("memberId",memberId);
body.put("studioId",dataApi.getLoginInfo().getStudioId());
dataApi.doRequest(RequestType.JSON,dataparams,body.toString(),dataheadrs).assetsSuccess(true);
return dataApi.getBodyInJSON().getJSONObject("result").getBoolean("conflict");
}
/**
* @description:检查是否支持单次约课、排队
* @author: xuyamei
* @date: 2024/7/30 11:37
* @param addToQueue 是否排队
* @param courseId 课程id
* @param chiefCoachId 主教id
* @param memberId 会员id
* @param scheduleId 课次id
* @param scheduleStartTime 课次开始时间
* @param spanMinutes 上课时长
* @param receivableAmount 单次约课金额
* @return: java.lang.String
**/
public String checkAddSingleReserve(boolean addToQueue,String courseId,String chiefCoachId,String memberId,String scheduleId,long scheduleStartTime,int spanMinutes,int receivableAmount){
setUP("API_checkAddSingleReserve");
JSONObject body = new JSONObject();
body.put("addToQueue",addToQueue);
JSONArray areaIds = new JSONArray();
body.put("areaIds", areaIds); // 场地
JSONArray assistantCoachIds = new JSONArray();
body.put("assistantCoachIds",assistantCoachIds); // 助教
body.put("chiefCoachId",chiefCoachId); // 教练
body.put("memberId", memberId); // 会员id
body.put("courseId", courseId); // 课次id
body.put("objectId", RandomStringUtil.randomString(16)); // 会员id
body.put("receivableAmount", receivableAmount); // 会员id
body.put("studioId", dataApi.getLoginInfo().getStudioId());
body.put("scheduleId", scheduleId);
body.put("scheduleStartTime", scheduleStartTime);
body.put("spanMinutes", spanMinutes);
body.put("brandId", dataApi.getLoginInfo().getBrandId());
dataApi.doRequest(RequestType.JSON,dataparams,body.toString(),dataheadrs).assetsSuccess(true);
return dataApi.getBodyInJSON().getJSONObject("result").getString("resultCode");
}
/**
* @description:创建单次约课订单
* @author: xuyamei
* @date: 2024/7/30 11:48
* @param addToQueue 是否排队
* @param chiefCoachId 主教id
* @param memberId 会员id
* @param scheduleId 课次id
* @param scheduleStartTime 课次开始时间
* @param spanMinutes 上课时长
* @param receivableAmount 单次约课金额
* @return: java.lang.String
**/
public String createSingleReserve(boolean addToQueue,String courseId,String chiefCoachId,String memberId,String scheduleId,long scheduleStartTime,int spanMinutes,int receivableAmount){
setUP("API_createSingleReserve");
JSONObject body = new JSONObject();
body.put("addToQueue",addToQueue);
JSONArray areaIds = new JSONArray();
body.put("areaIds", areaIds); // 场地
JSONArray assistantCoachIds = new JSONArray();
body.put("assistantCoachIds",assistantCoachIds); // 助教
body.put("chiefCoachId",chiefCoachId); // 教练
body.put("memberId", memberId); // 会员id
body.put("courseId", courseId); // 课次id
body.put("objectId", RandomStringUtil.randomString(16)); // 会员id
body.put("receivableAmount", receivableAmount); // 会员id
body.put("studioId", dataApi.getLoginInfo().getStudioId());
body.put("scheduleId", scheduleId);
body.put("scheduleStartTime", scheduleStartTime);
body.put("spanMinutes", spanMinutes);
body.put("brandId", dataApi.getLoginInfo().getBrandId());
dataApi.doRequest(RequestType.JSON,dataparams,body.toString(),dataheadrs).assetsSuccess(true);
return dataApi.getBodyInJSON().getString("result");
}
/**
* @description:根据订单凭证id获取任务信息
* @author: xuyamei
* @date: 2024/7/30 11:56
* @param voucherId :订单id
* @return: com.alibaba.fastjson.JSONObject
**/
public JSONObject getDetailById(String voucherId){
setUP("API_singleReserve_getByVoucherId");
JSONObject body = new JSONObject();
body.put("voucherId",voucherId);
dataApi.doRequest(RequestType.JSON,dataparams,body.toString(),dataheadrs).assetsSuccess(true);
return dataApi.getBodyInJSON().getJSONObject("result");
}
}
......@@ -182,7 +182,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
int[] minuteOffset = {60, 120, 180, 240, 300, 360, 420, 480, 540, 600, 660, 720, 780, 840, 900, 960, 1020, 1080, 1140, 1200, 1260};
Random random = new Random();
//1.1-创建排课日程
groupScheduleTools.createGroupRuleSchedule(courseId, dataApi.getLoginInfo().getAdminId(), todayStartTimeTamp, todayEndDateTimeTamp, new ArrayList(), new ArrayList(), false, 1,minuteOffset[random.nextInt(20)],dataUserInfo);
groupScheduleTools.createGroupRuleSchedule(courseId, dataApi.getLoginInfo().getAdminId(), todayStartTimeTamp, todayEndDateTimeTamp, new ArrayList(), new ArrayList(), true, 1,minuteOffset[random.nextInt(20)],dataUserInfo);
//1.2-查询排课日程
JSONArray getGroupRuleScheduleList = groupScheduleTools.getGroupRuleScheduleList(courseId, dataApi.getLoginInfo().getAdminId(),dataUserInfo);
//统计查询到的目标日程数量
......
......@@ -268,7 +268,7 @@ public class TestAddToQueue extends BaseTestImpl {
int[] minuteOffset = {60, 120, 180, 240, 300, 360, 420, 480, 540, 600, 660, 720, 780, 840, 900, 960, 1020, 1080, 1140, 1200, 1260};
Random random = new Random();
//1.1-创建排课日程
groupScheduleTools.createGroupRuleSchedule(courseId, dataApi.getLoginInfo().getAdminId(), todayStartTimeTamp, todayEndDateTimeTamp, new ArrayList(), new ArrayList(), false, 1,minuteOffset[random.nextInt(20)],dataUserInfo);
groupScheduleTools.createGroupRuleSchedule(courseId, dataApi.getLoginInfo().getAdminId(), todayStartTimeTamp, todayEndDateTimeTamp, new ArrayList(), new ArrayList(), true, 1,minuteOffset[random.nextInt(20)],dataUserInfo);
//1.2-查询排课日程
JSONArray getGroupRuleScheduleList = groupScheduleTools.getGroupRuleScheduleList(courseId, dataApi.getLoginInfo().getAdminId(),dataUserInfo);
//统计查询到的目标日程数量
......
package com.xiaomai.cases.lunar.reserve;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xiaomai.basetest.BaseTestImpl;
import com.xiaomai.cases.lunar.user.UserTools;
import com.xiaomai.cases.polar.course.CourseTools;
import com.xiaomai.cases.polar.finance.order.OrderTools;
import com.xiaomai.cases.polar.reserve.ReserveTools;
import com.xiaomai.cases.polar.schedule.group.GroupScheduleTools;
import com.xiaomai.cases.polar.setting.courseCategory.CourseCategoryTools;
import com.xiaomai.cases.polar.setting.rules.RuleTools;
import com.xiaomai.client.DataUserInfo;
import com.xiaomai.enums.ApiModule;
import com.xiaomai.enums.LoginAccount;
import com.xiaomai.enums.Terminal;
import com.xiaomai.utils.CommUtil;
import com.xiaomai.utils.TimeUtils;
import com.xiaomai.utils.XMJSONPath;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Random;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.lunar.reserve
* @Author: xuyamei
* @CreateTime: 2024-07-30 14:44
* @Description: 单次预约
* @Version: 1.0
*/
public class TestCreateSingleReserve extends BaseTestImpl {
@Resource(name = "userTools")
UserTools userTools;
@Resource(name = "reserveCTools")
ReserveCTools reserveCTools;
@Resource(name = "courseCategoryTools")
CourseCategoryTools courseCategoryTools;
@Resource(name = "courseTools")
CourseTools courseTools;
@Resource(name = "reserveTools")
ReserveTools reserveTools;
@Resource(name = "groupScheduleTools")
GroupScheduleTools groupScheduleTools;
@Resource(name = "ruleTools")
RuleTools ruleTools;
@Resource(name = "orderTools")
OrderTools orderTools;
String todayStartTimeTamp = CommUtil.oneKeyGetAddDay(1);
//获取今天结束日期的时间戳
String todayEndDateTimeTamp = CommUtil.getNDayEndTimeTamp(1);
Long scheduleEndTime = TimeUtils.getTodayEndTime(1);
private String ruldId;
private String reserveId;
private String scheduleId;
private Long startTime;
private String courseId;
private String memberId;
private String chiefCoachId;
private String voucherId;
private String benefitId;
@BeforeMethod
@Override
public void beforeTest(){
setTestInfo(ApiModule.Lunar_Reserve,"API_createSingleReserve", LoginAccount.GYM_MINIAPPC, Terminal.minApp,"xym");
super.beforeTest();
}
@Test(description = "小程序单次团课预约")
public void testAddMemberReserve() {
DataUserInfo dataUserInfo = new DataUserInfo();
dataUserInfo.setTerminal(Terminal.B);
dataUserInfo.setLoginUser(LoginAccount.GYM_PROD);
// 预约规则开启允许排队
JSONObject getRules = ruleTools.getGroupBookingRules(); // 获取场馆团课预约规则
String id = getRules.getString("id"); // 获取规则id
Random random = new Random();
int bookingSeatCount = random.nextInt(10)+1; // 席位
ruleTools.saveGroupBookingRules(id,true,bookingSeatCount,true,true,random.nextInt(30)+10,false,random.nextInt(100)+10,random.nextInt(5)+1,false,random.nextInt(100)+10,"minutes",false,random.nextInt(100)+10,"minutes");
memberId = userTools.getMemberInfo().getString("memberId");
// 创建团课课次
createGroupSchedule();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 课次详情获取上课老师和
JSONObject memberScheduleItemDetail = reserveCTools.getMemberScheduleItemDetail(scheduleId, memberId);
startTime = memberScheduleItemDetail.getLongValue("startTime");
chiefCoachId = memberScheduleItemDetail.getString("chiefCoachId");
// 校验会员加入课次是否有冲突
boolean checkMemberConflict = reserveCTools.checkMemberConflict(memberId,scheduleId);
if (checkMemberConflict){
Assert.assertTrue(true,"校验会员有课次冲突");
}
// 检查是否支持预约
String checkAddSingleReserve = reserveCTools.checkAddSingleReserve(false,courseId,chiefCoachId,memberId,scheduleId,startTime,10,0);
Assert.assertEquals(checkAddSingleReserve,"SUCCESS","支持单次付费约课但返回的不是SUCCESS");
// 创建单次付费约课
voucherId = reserveCTools.createSingleReserve(false,courseId,chiefCoachId,memberId,scheduleId,startTime,10,0);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 通过订单id获取单次约课任务信息
JSONObject getDetail = reserveCTools.getDetailById(voucherId);
// 验证单次约课信息
String[] result = {"scheduleStartTime","spanMinutes","reserveState","courseId","memberId","scheduleId","courseType","accountType"};
String[] expect = {String.valueOf(startTime),"10","SUCCESS",courseId,memberId,scheduleId,"GROUP_CLASS","SINGLE_RESERVE"};
for (int i = 0; i < result.length-2; i++){
Assert.assertEquals(getDetail.getString(result[i]),expect[i],getDetail.getString(result[i])+"返回值与预期值不一致:"+expect[i]);
}
reserveId = getDetail.getString("reserveId");
benefitId = getDetail.getString("id");
// check 1:查询小程序课次详情,学员是预约状态
String[] result1 = {"reserveState","memberId","scheduleId","accountType"};
String[] expect1 = {"SUCCESS",memberId,scheduleId,"SINGLE_RESERVE"};
memberScheduleItemDetail = reserveCTools.getMemberScheduleItemDetail(scheduleId,memberId);
for(int i = 0;i<4;i++) {
Assert.assertEquals(memberScheduleItemDetail.getJSONObject("memberScheduleInfoVO").getString(result1[i]), expect1[i], "预约产生的数据与实际数据不符合" + result[i] + ":" + expect[i]);
}
// check 2:查询小程序预约记录
JSONArray getPageByMember = reserveCTools.getPageByMember("SUCCESS","",startTime,scheduleEndTime,memberId,"GROUP_CLASS");
boolean success = false;
for(int i =0;i<getPageByMember.size();i++){
if (getPageByMember.getJSONObject(i).getString("id").equals(reserveId)){
success = true;
for(int j = 0;j<result.length;j++){
String resultString = result[j].equals("reserveId")?"id":result[j];
Assert.assertEquals(getPageByMember.getJSONObject(i).getString(resultString),expect[j],"预约产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
Assert.assertEquals(getPageByMember.getJSONObject(i).getString("memberId"),memberId,"查询的预约数据不是同一个会员");
}
}
Assert.assertTrue(success,"预约记录没有查询到相关信息");
// check 3:查询小程序预约详情
JSONObject getDetailById = reserveCTools.getReserveDetailById(reserveId);
for(int j = 0;j<result.length;j++){
String resultString = result[j].equals("reserveId")?"id":result[j];
Assert.assertEquals(getDetailById.getString(resultString),expect[j],"单次预约产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
Assert.assertEquals(getDetailById.getString("memberId"),memberId,"查询的数据不是同一个会员");
// check 4:查询B端预约详情
result = new String[] {"id","benefitId","benefitType","reserveMemberNum","courseId","courseType","scheduleStartTime","reserveState","scheduleId","accountType"};
expect = new String[] {reserveId,benefitId,"STORED_VALUE","1",courseId,"GROUP_CLASS",startTime+"","SUCCESS",scheduleId,"SINGLE_RESERVE"};
getDetailById = reserveTools.getDetailById(reserveId,dataUserInfo);
for(int j = 0;j<result.length;j++){
Assert.assertEquals(getDetailById.getString(result[j]),expect[j],"单次预约产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
Assert.assertEquals(getDetailById.getString("memberId"),memberId,"查询的单次预约数据不是同一个会员");
// check 5:查询B端课次详情
// 课次学员是否包含该会员 且 消耗方式为单次约课
JSONObject getScheduleItemDetail = groupScheduleTools.getScheduleItemDetail(scheduleId,dataUserInfo);
JSONArray reserveIds = getScheduleItemDetail.getJSONArray("memberReserveList");
success = false;
for (int i = 0; i < reserveIds.size(); i++){
if(reserveIds.getJSONObject(0).getString("id").equals(reserveId)){
success = true;
for (int j = 0; j < result.length; j++){
Assert.assertEquals(reserveIds.getJSONObject(0).getString(result[j]),expect[j],"单次预约产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
}
}
Assert.assertTrue(success,"约课后课次详情学员不在课次中");
}
@Test(priority = 2,description = "取消单次约课")
public void cancelMemberReserve(){
reserveCTools.cancelMemberReserve(reserveId,memberId,true);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
DataUserInfo dataUserInfo = new DataUserInfo();
dataUserInfo.setTerminal(Terminal.B);
dataUserInfo.setLoginUser(LoginAccount.GYM_PROD);
String[] result = {"memberOperation","memberId","scheduleId"};
String[] expect = {"TO_RESERVE",memberId,scheduleId};
// check 1:查询小程序课次详情,学员是预约状态
JSONObject memberScheduleItemDetail = reserveCTools.getMemberScheduleItemDetail(scheduleId,memberId);
for(int i = 0;i<result.length;i++) {
Assert.assertEquals(memberScheduleItemDetail.getJSONObject("memberScheduleInfoVO").getString(result[i]), expect[i], "取消预约产生的数据与实际数据不符合" + result[i] + ":" + expect[i]);
}
// 验证单次约课信息
result = new String[]{"scheduleStartTime","spanMinutes","reserveState","courseId","memberId","scheduleId","courseType","accountType","refundState"};
expect = new String[]{String.valueOf(startTime),"10","RESERVE_CANCEL",courseId,memberId,scheduleId,"GROUP_CLASS","SINGLE_RESERVE","NO_REFUND"};
// check 2:查询小程序预约记录
JSONArray getPageByMember = reserveCTools.getPageByMember("RESERVE_CANCEL","",startTime,scheduleEndTime,memberId,"GROUP_CLASS");
boolean success = false;
for(int i =0;i<getPageByMember.size();i++){
if (getPageByMember.getJSONObject(i).getString("id").equals(reserveId)){
success = true;
for(int j = 0;j<result.length;j++){
String resultString = result[j].equals("reserveId")?"id":result[j];
Assert.assertEquals(getPageByMember.getJSONObject(i).getString(resultString),expect[j],"取消预约产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
Assert.assertEquals(getPageByMember.getJSONObject(i).getString("memberId"),memberId,"查询的预约数据不是同一个会员");
}
}
Assert.assertTrue(success,"取消预约记录没有查询到相关信息");
// check 3:查询小程序预约详情
JSONObject getDetailById = reserveCTools.getReserveDetailById(reserveId);
for(int j = 0;j<result.length;j++){
String resultString = result[j].equals("reserveId")?"id":result[j];
Assert.assertEquals(getDetailById.getString(resultString),expect[j],"单次取消预约产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
Assert.assertEquals(getDetailById.getString("memberId"),memberId,"查询的数据不是同一个会员");
// check 4:查询B端预约详情
result = new String[] {"id","benefitId","benefitType","reserveMemberNum","courseId","courseType","scheduleStartTime","reserveState","scheduleId","accountType","refundState"};
expect = new String[] {reserveId,benefitId,"STORED_VALUE","1",courseId,"GROUP_CLASS",startTime+"","RESERVE_CANCEL",scheduleId,"SINGLE_RESERVE","NO_REFUND"};
getDetailById = reserveTools.getDetailById(reserveId,dataUserInfo);
for(int j = 0;j<result.length;j++){
Assert.assertEquals(getDetailById.getString(result[j]),expect[j],"单次取消预约产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
Assert.assertEquals(getDetailById.getString("memberId"),memberId,"查询的单次预约数据不是同一个会员");
// check 5:查询B端课次详情
// 课次学员是否包含该会员 且 消耗方式为单次约课
JSONObject getScheduleItemDetail = groupScheduleTools.getScheduleItemDetail(scheduleId,dataUserInfo);
JSONArray reserveIds = getScheduleItemDetail.getJSONArray("reserveIds");
Assert.assertTrue(reserveIds.size()==0,"取消约课后课次详情学员还在课次中");
// check 6:查询订单状态为已作废
JSONObject fetchDetailById = orderTools.getDetail(voucherId,dataUserInfo);
Assert.assertEquals(fetchDetailById.getJSONObject("result").getString("state"),"DISCARD","单次付费约课取消订单状态不是已作废");
Assert.assertEquals(fetchDetailById.getJSONObject("result").getString("discardMemo"),"取消预约/排队,自动作废订单","单次付费约课取消备注不是:取消预约/排队,自动作废订单");
}
@Test(priority = 3)
public void del(){
DataUserInfo dataUserInfo = new DataUserInfo();
dataUserInfo.setTerminal(Terminal.B);
dataUserInfo.setLoginUser(LoginAccount.GYM_PROD);
// 删除排课数据
groupScheduleTools.delGroupRuleSchedule(ruldId,true,dataUserInfo);
// 删除课次
groupScheduleTools.delGroupScheduleItem(scheduleId,dataUserInfo);
}
// 创建团课课次
public void createGroupSchedule(){
DataUserInfo dataUserInfo = new DataUserInfo();
dataUserInfo.setTerminal(Terminal.B);
dataUserInfo.setLoginUser(LoginAccount.GYM_PROD);
// 查询存量的约课课程
// 查询存量的课程分类
String categoryId = courseCategoryTools.getCourseCategoryPage("瑜伽");
courseId = courseTools.getPersonalOrGroupCourseId("GROUP", "单次付费团课", categoryId, "STUDIO", "", 2, 1,dataUserInfo).getString(0);
// 创建排课
int[] minuteOffset = {60, 120, 180, 240, 300, 360, 420, 480, 540, 600, 660, 720, 780, 840, 900, 960, 1020, 1080, 1140, 1200, 1260};
Random random = new Random();
//1.1-创建排课日程
groupScheduleTools.createGroupRuleSchedule(courseId, dataApi.getLoginInfo().getAdminId(), todayStartTimeTamp, todayEndDateTimeTamp, new ArrayList(), new ArrayList(), true, 1,minuteOffset[random.nextInt(20)],dataUserInfo);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
//1.2-查询排课日程
JSONArray getGroupRuleScheduleList = groupScheduleTools.getGroupRuleScheduleList(courseId, dataApi.getLoginInfo().getAdminId(),dataUserInfo);
//统计查询到的目标日程数量
ruldId = XMJSONPath.readPath(getGroupRuleScheduleList.getJSONObject(0), "$.ruleId");
Long scheduleEndTime = TimeUtils.getTodayEndTime(1);
try {
Thread.sleep(2500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 查询课次id
JSONArray memberTimetable = reserveCTools.memberTimetable(memberId,Long.valueOf(todayStartTimeTamp), scheduleEndTime);
for (int i = 0; i < memberTimetable.size(); i++){
if (memberTimetable.getJSONObject(i).containsKey("ruleId") && memberTimetable.getJSONObject(i).getString("ruleId").equals(ruldId)){
scheduleId = memberTimetable.getJSONObject(i).getString("scheduleId");
break;
}
}
// 修改课程支持单次约课
courseTools.editGroupCourse(categoryId,courseId,"单次付费团课",10,true,0,dataUserInfo);
}
}
package com.xiaomai.cases.lunar.reserve;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xiaomai.basetest.BaseTestImpl;
import com.xiaomai.cases.lunar.user.UserTools;
import com.xiaomai.cases.polar.course.CourseTools;
import com.xiaomai.cases.polar.reserve.ReserveTools;
import com.xiaomai.cases.polar.schedule.group.GroupScheduleTools;
import com.xiaomai.cases.polar.setting.courseCategory.CourseCategoryTools;
import com.xiaomai.cases.polar.setting.rules.RuleTools;
import com.xiaomai.client.DataUserInfo;
import com.xiaomai.enums.ApiModule;
import com.xiaomai.enums.LoginAccount;
import com.xiaomai.enums.Terminal;
import com.xiaomai.utils.CommUtil;
import com.xiaomai.utils.TimeUtils;
import com.xiaomai.utils.XMJSONPath;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Random;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.lunar.reserve
* @Author: xuyamei
* @CreateTime: 2024-07-30 16:57
* @Description: 单次约课签到
* @Version: 1.0
*/
public class TestSingleReserveSignIn extends BaseTestImpl {
@Resource(name = "userTools")
UserTools userTools;
@Resource(name = "reserveCTools")
ReserveCTools reserveCTools;
@Resource(name = "courseCategoryTools")
CourseCategoryTools courseCategoryTools;
@Resource(name = "courseTools")
CourseTools courseTools;
@Resource(name = "reserveTools")
ReserveTools reserveTools;
@Resource(name = "groupScheduleTools")
GroupScheduleTools groupScheduleTools;
@Resource(name = "ruleTools")
RuleTools ruleTools;
String todayStartTimeTamp = CommUtil.oneKeyGetAddDay(0);
//获取今天结束日期的时间戳
String todayEndDateTimeTamp = CommUtil.getNDayEndTimeTamp(0);
Long scheduleEndTime = TimeUtils.getTodayEndTime(0);
private String ruldId;
private String reserveId;
private String scheduleId;
private Long startTime;
private String courseId;
private String memberId;
private String chiefCoachId;
private String voucherId;
private String benefitId;
@BeforeMethod
@Override
public void beforeTest(){
setTestInfo(ApiModule.Lunar_Reserve,"API_createSingleReserve", LoginAccount.GYM_MINIAPPC, Terminal.minApp,"xym");
super.beforeTest();
}
@Test(description = "小程序单次团课预约")
public void testAddMemberReserve() {
DataUserInfo dataUserInfo = new DataUserInfo();
dataUserInfo.setTerminal(Terminal.B);
dataUserInfo.setLoginUser(LoginAccount.GYM_PROD);
// 预约规则开启允许排队
JSONObject getRules = ruleTools.getGroupBookingRules(); // 获取场馆团课预约规则
String id = getRules.getString("id"); // 获取规则id
Random random = new Random();
int bookingSeatCount = random.nextInt(10)+1; // 席位
ruleTools.saveGroupBookingRules(id,true,bookingSeatCount,true,true,999,false,random.nextInt(100)+10,random.nextInt(5)+1,false,random.nextInt(100)+10,"minutes",false,random.nextInt(100)+10,"minutes");
memberId = userTools.getMemberInfo().getString("memberId");
// 创建团课课次
LocalDateTime currentDateTime = LocalDateTime.now();
int hour = currentDateTime.getHour();
int minutes = currentDateTime.getMinute();
int minute = hour*60+minutes+10 ;
createGroupSchedule(minute);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 课次详情获取上课老师和
JSONObject memberScheduleItemDetail = reserveCTools.getMemberScheduleItemDetail(scheduleId, memberId);
startTime = memberScheduleItemDetail.getLongValue("startTime");
chiefCoachId = memberScheduleItemDetail.getString("chiefCoachId");
// 校验会员加入课次是否有冲突
boolean checkMemberConflict = reserveCTools.checkMemberConflict(memberId,scheduleId);
if (checkMemberConflict){
Assert.assertTrue(true,"校验会员有课次冲突");
}
// 检查是否支持预约
String checkAddSingleReserve = reserveCTools.checkAddSingleReserve(false,courseId,chiefCoachId,memberId,scheduleId,startTime,10,0);
Assert.assertEquals(checkAddSingleReserve,"SUCCESS","支持单次付费约课但返回的不是SUCCESS");
// 创建单次付费约课
voucherId = reserveCTools.createSingleReserve(false,courseId,chiefCoachId,memberId,scheduleId,startTime,10,0);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 通过订单id获取单次约课任务信息
JSONObject getDetail = reserveCTools.getDetailById(voucherId);
// 验证单次约课信息
String[] result = {"scheduleStartTime","spanMinutes","reserveState","courseId","memberId","scheduleId","courseType","accountType"};
String[] expect = {String.valueOf(startTime),"10","SUCCESS",courseId,memberId,scheduleId,"GROUP_CLASS","SINGLE_RESERVE"};
for (int i = 0; i < result.length-2; i++){
Assert.assertEquals(getDetail.getString(result[i]),expect[i],getDetail.getString(result[i])+"返回值与预期值不一致:"+expect[i]);
}
reserveId = getDetail.getString("reserveId");
benefitId = getDetail.getString("id");
// 手动签到
reserveCTools.signIn(true,reserveId,memberId);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 签到完成后check
// check 1:查询小程序课次详情,学员是预约状态
String[] result1 = {"reserveState","memberId","scheduleId","accountType","signInState"};
String[] expect1 = {"SUCCESS",memberId,scheduleId,"SINGLE_RESERVE","SIGNED"};
memberScheduleItemDetail = reserveCTools.getMemberScheduleItemDetail(scheduleId,memberId);
for(int i = 0;i<4;i++) {
Assert.assertEquals(memberScheduleItemDetail.getJSONObject("memberScheduleInfoVO").getString(result1[i]), expect1[i], "预约产生的数据与实际数据不符合" + result[i] + ":" + expect[i]);
}
// check 2:查询小程序预约记录
JSONArray getPageByMember = reserveCTools.getPageByMember("SIGNED","",startTime,scheduleEndTime,memberId,"GROUP_CLASS");
boolean success = false;
for(int i =0;i<getPageByMember.size();i++){
if (getPageByMember.getJSONObject(i).getString("id").equals(reserveId)){
success = true;
for(int j = 0;j<result.length;j++){
String resultString = result[j].equals("reserveId")?"id":result[j];
Assert.assertEquals(getPageByMember.getJSONObject(i).getString(resultString),expect[j],"单次预约签到产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
Assert.assertEquals(getPageByMember.getJSONObject(i).getString("memberId"),memberId,"查询的预约数据不是同一个会员");
}
}
Assert.assertTrue(success,"预约记录没有查询到相关信息");
// check 3:查询小程序预约详情
JSONObject getDetailById = reserveCTools.getReserveDetailById(reserveId);
for(int j = 0;j<result.length;j++){
String resultString = result[j].equals("reserveId")?"id":result[j];
Assert.assertEquals(getDetailById.getString(resultString),expect[j],"单次预约签到产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
Assert.assertEquals(getDetailById.getString("memberId"),memberId,"查询的数据不是同一个会员");
// check 4:查询B端预约详情
result = new String[] {"id","benefitId","benefitType","reserveMemberNum","courseId","courseType","scheduleStartTime","reserveState","scheduleId","accountType","signInState"};
expect = new String[] {reserveId,benefitId,"STORED_VALUE","1",courseId,"GROUP_CLASS",startTime+"","SUCCESS",scheduleId,"SINGLE_RESERVE","SIGNED"};
getDetailById = reserveTools.getDetailById(reserveId,dataUserInfo);
for(int j = 0;j<result.length;j++){
Assert.assertEquals(getDetailById.getString(result[j]),expect[j],"单次预约签到产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
Assert.assertEquals(getDetailById.getString("memberId"),memberId,"查询的单次预约数据不是同一个会员");
// check 5:查询B端课次详情
// 课次学员是否包含该会员 且 消耗方式为单次约课
JSONObject getScheduleItemDetail = groupScheduleTools.getScheduleItemDetail(scheduleId,dataUserInfo);
JSONArray reserveIds = getScheduleItemDetail.getJSONArray("memberReserveList");
success = false;
for (int i = 0; i < reserveIds.size(); i++){
if(reserveIds.getJSONObject(0).getString("id").equals(reserveId)){
success = true;
for (int j = 0; j < result.length; j++){
Assert.assertEquals(reserveIds.getJSONObject(0).getString(result[j]),expect[j],"单次预约签到产生的数据与实际数据不符合"+result[j]+":"+expect[j]);
}
}
}
Assert.assertTrue(success,"单次预约签到后课次详情学员不在课次中");
}
// 创建团课课次
public void createGroupSchedule(int minute){
DataUserInfo dataUserInfo = new DataUserInfo();
dataUserInfo.setTerminal(Terminal.B);
dataUserInfo.setLoginUser(LoginAccount.GYM_PROD);
// 查询存量的约课课程
// 查询存量的课程分类
String categoryId = courseCategoryTools.getCourseCategoryPage("瑜伽");
courseId = courseTools.getPersonalOrGroupCourseId("GROUP", "单次付费团课签到", categoryId, "STUDIO", "", 2, 1,dataUserInfo).getString(0);
// 创建排课
//1.1-创建排课日程
groupScheduleTools.createGroupRuleSchedule(courseId, dataApi.getLoginInfo().getAdminId(), todayStartTimeTamp, todayEndDateTimeTamp, new ArrayList(), new ArrayList(), true, 1,minute,dataUserInfo);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
//1.2-查询排课日程
JSONArray getGroupRuleScheduleList = groupScheduleTools.getGroupRuleScheduleList(courseId, dataApi.getLoginInfo().getAdminId(),dataUserInfo);
//统计查询到的目标日程数量
ruldId = XMJSONPath.readPath(getGroupRuleScheduleList.getJSONObject(0), "$.ruleId");
Long scheduleEndTime = TimeUtils.getTodayEndTime(1);
try {
Thread.sleep(2500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 查询课次id
JSONArray memberTimetable = reserveCTools.memberTimetable(memberId,Long.valueOf(todayStartTimeTamp), scheduleEndTime);
for (int i = 0; i < memberTimetable.size(); i++){
if (memberTimetable.getJSONObject(i).containsKey("ruleId") && memberTimetable.getJSONObject(i).getString("ruleId").equals(ruldId)){
scheduleId = memberTimetable.getJSONObject(i).getString("scheduleId");
break;
}
}
// 修改课程支持单次约课
courseTools.editGroupCourse(categoryId,courseId,"单次付费团课签到",10,true,0,dataUserInfo);
}
}
......@@ -30,7 +30,7 @@ public class MemberTools extends BaseTestImpl {
super.beforeDataRequest(userInfos);
Random random = new Random();
String[] idCardType = {"IDENTITY","SAR_PERMIT","idCardType"};//身份证、港澳通行证、护照
String[] idCardType = {"IDENTITY","SAR_PERMIT","PASSPORT"};//身份证、港澳通行证、护照
String[] intention = {"HIGH","MIDDLE","LOW"};//意向度:高、中、低
JSONObject object = new JSONObject();
......
......@@ -454,4 +454,49 @@ public class CourseTools extends XMBaseTest {
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs).assetsSuccess(true);
}
/**
* @description:编辑团课
* @author: xuyamei
* @date: 2024/7/30 10:57
* @param categoryId 课程分类
* @param courseId 课程id
* @param courseName 课程名称
* @param duration 时长
* @param singleReserve 是否支持单次预约
* @param reservePrice 单次预约价格
* @param dataUserInfo
* @return: void
**/
public void editGroupCourse(String categoryId,String courseId,String courseName,int duration,boolean singleReserve,int reservePrice,DataUserInfo...dataUserInfo){
dataApi.setApiModule(ApiModule.Polar_Course)
.setApiName("API_editGroupCourse")
.setTerminal(Terminal.B);
super.beforeDataRequest(dataUserInfo);
JSONObject body = new JSONObject();
body.put("categoryId", categoryId);
body.put("courseName", courseName);
body.put("duration", duration); // 时长
body.put("difficulty", 3); // 难度
body.put("color", "#AACF53");
body.put("calorie", "0"); // 卡路里
body.put("coverId", "0");
body.put("timeUnit", "MINUTE");
body.put("operatorId", dataApi.getLoginInfo().getAdminId());
body.put("sourceId", dataApi.getLoginInfo().getStudioId()); // 来源:场馆、品牌
body.put("sourceType", "STUDIO"); // 来源类型:场馆、品牌
body.put("brandId", dataApi.getLoginInfo().getBrandId()); // 品牌
body.put("studioId", dataApi.getLoginInfo().getStudioId());
body.put("brandCourseId", courseId);
body.put("singleReserve", singleReserve); // 是否支持单次约课
if (singleReserve){
body.put("reservePrice", reservePrice); // 单次预约的价格
}
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs).assetsSuccess(true);
}
}
......@@ -646,4 +646,25 @@ public class ReserveTools extends XMBaseTest {
}
}
/**
* @description:删除私教课次
* @author: xuyamei
* @date: 2024/7/29 16:13
* @param scheduleId : 课次id
* @return: void
**/
public void delPersonalScheduleItem(String scheduleId){
setUp("API_delPersonalScheduleItem");
JSONObject body = new JSONObject();
body.put("operatorId", dataApi.getLoginInfo().getAdminId());
body.put("studioId", dataApi.getLoginInfo().getStudioId());
body.put("brandId", dataApi.getLoginInfo().getBrandId());
body.put("scheduleId", scheduleId);
body.put("applyRestRule", false);
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs).assetsSuccess(true);
}
}
......@@ -64,18 +64,15 @@ public class TestAddMemberReserve extends BaseTestImpl {
String todayStartTimeTamp = CommUtil.oneKeyGetAddDay(0);
//获取今天结束日期的时间戳
String todayEndDateTimeTamp = CommUtil.getNDayEndTimeTamp(0);
private String ruldId;
private String benefitId;
private String memberId;
private String scheduleId;
private Long startTime;
private String courseId;
private String reserveId;
JSONArray memberInfo1 = new JSONArray();
JSONArray memberInfo2 = new JSONArray();
private String memberCardId;
@BeforeMethod
@Override
......@@ -121,6 +118,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
throw new RuntimeException(e);
}
String memberId;
// 查询存量的学员没有则创建学员
if (tools.commonSearch("约课学员sandy","NORMAL").getJSONArray("result").size()>0){
memberId = tools.commonSearch("约课学员sandy","NORMAL").getJSONArray("result").getJSONObject(0).getString("id");
......@@ -131,6 +129,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
}else{
memberId = memberTools.create("约课学员sandy", RandomStringUtil.randomMobile("203")).getString("result");
}
memberInfo1.add(memberId);
// 查询是否有可用的会员卡,没有则购买
......@@ -146,14 +145,18 @@ public class TestAddMemberReserve extends BaseTestImpl {
listUserReservableBenefit = cardTools.listUserReservableBenefit(courseId, "GROUP_CLASS", "MEMBER", memberId, TimeUtils.getTodayTime());
}
// 查询权益
benefitId = listUserReservableBenefit.getJSONObject(0).getString("benefitId");
memberCardId = listUserReservableBenefit.getJSONObject(0).getString("memberCardId");
String benefitId = listUserReservableBenefit.getJSONObject(0).getString("benefitId");
String memberCardId = listUserReservableBenefit.getJSONObject(0).getString("memberCardId");
memberInfo1.add(benefitId);
memberInfo1.add(memberCardId);
// 查询课次详情 查课次的开始时间
JSONObject getScheduleItemDetail = groupScheduleTools.getScheduleItemDetail(scheduleId);
startTime = getScheduleItemDetail.getLongValue("startTime");
// 预约
reserveId = reserveTools.addReserve("","",benefitId,xmAppApi.getLoginInfo().getAdminId(),memberId,1,scheduleId,startTime,true);
String reserveId = reserveTools.addReserve("","",benefitId,xmAppApi.getLoginInfo().getAdminId(),memberId,1,scheduleId,startTime,true);
memberInfo1.add(reserveId);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
......@@ -221,7 +224,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
@Test(priority = 1,description = "学员已经在课次中,无需重复添加")
public void testAddMemberReserve2(){
reserveTools.addReserve("","",benefitId,xmAppApi.getLoginInfo().getAdminId(),memberId,1,scheduleId,startTime,false);
reserveTools.addReserve("","",memberInfo1.getString(1),xmAppApi.getLoginInfo().getAdminId(),memberInfo1.getString(0),1,scheduleId,startTime,false);
String message = dataApi.getBodyInJSON().getString("message");
Assert.assertTrue(message.equals("会员已约该课程,不可重复预约") || message.equals("预约失败,无需重复添加"));
}
......@@ -249,6 +252,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
}else{
memberId2 = memberTools.create("约课学员susan", RandomStringUtil.randomMobile("203")).getString("result");
}
memberInfo2.add(memberId2);
// 查询是否有可用的会员卡,没有则购买
JSONArray listUserReservableBenefit = cardTools.listUserReservableBenefit(courseId, "GROUP_CLASS", "MEMBER", memberId2, TimeUtils.getTodayTime());
......@@ -262,7 +266,10 @@ public class TestAddMemberReserve extends BaseTestImpl {
}
listUserReservableBenefit = cardTools.listUserReservableBenefit(courseId, "GROUP_CLASS", "MEMBER", memberId2, TimeUtils.getTodayTime());
}
benefitId = listUserReservableBenefit.getJSONObject(0).getString("benefitId");
String benefitId = listUserReservableBenefit.getJSONObject(0).getString("benefitId");
String memberCardId = listUserReservableBenefit.getJSONObject(0).getString("memberCardId");
memberInfo2.add(benefitId);
memberInfo2.add(memberCardId);
reserveTools.addReserve("","",benefitId,xmAppApi.getLoginInfo().getAdminId(),memberId2,1,scheduleId,startTime,true);
String resultCode = dataApi.getBodyInJSON().getJSONObject("result").getString("resultCode");
......@@ -279,7 +286,7 @@ public class TestAddMemberReserve extends BaseTestImpl {
}
@Test(dataProvider = "dataProvider",priority = 3)
public void testCancelMemberReserve(boolean success,String message){
reserveTools.cancelMemberReserve(reserveId,success);
reserveTools.cancelMemberReserve(memberInfo1.getString(3),success);
Assert.assertEquals(dataApi.getBodyInJSON().getString("message").contains(message),true);
try {
Thread.sleep(2000);
......@@ -292,36 +299,36 @@ public class TestAddMemberReserve extends BaseTestImpl {
JSONArray reserveIds = getScheduleItemDetail.getJSONArray("reserveIds");
success = false;
for (int i = 0; i < reserveIds.size(); i++){
if(reserveIds.getString(i).equals(reserveId)){
if(reserveIds.getString(i).equals(memberInfo1.getString(3))){
success = true;
}
}
Assert.assertFalse(success,"取消约课后课次详情学员还在课次中");
// check 2:会员详情 - 预约记录已取消
JSONArray getPageByMember = reserveTools.getPageByMember(courseId,"RESERVE_CANCEL","","", startTime,TimeUtils.getTodayEndTime(),memberId,"GROUP_CLASS");
JSONArray getPageByMember = reserveTools.getPageByMember(courseId,"RESERVE_CANCEL","","", startTime,TimeUtils.getTodayEndTime(),memberInfo1.getString(0),"GROUP_CLASS");
success = false;
for(int i =0;i<getPageByMember.size();i++){
if (getPageByMember.getJSONObject(i).getString("id").equals(reserveId)){
if (getPageByMember.getJSONObject(i).getString("id").equals(memberInfo1.getString(3))){
success = true;
}
}
Assert.assertTrue(success,"取消约课后查询取消状态在会员详情页面未查询到相关信息");
// check 3:预约记录列表中已取消
JSONArray getPageByStudio = reserveTools.getPageByStudio(courseId,"RESERVE_CANCEL","","",startTime,TimeUtils.getTodayEndTime(),memberId,"GROUP_CLASS","");
JSONArray getPageByStudio = reserveTools.getPageByStudio(courseId,"RESERVE_CANCEL","","",startTime,TimeUtils.getTodayEndTime(),memberInfo1.getString(0),"GROUP_CLASS","");
success = false;
for(int i =0;i<getPageByStudio.size();i++){
if (getPageByStudio.getJSONObject(i).getString("id").equals(reserveId)){
if (getPageByStudio.getJSONObject(i).getString("id").equals(memberInfo1.getString(3))){
success = true;
}
}
Assert.assertTrue(success,"取消约课后在约课记录查询取消状态没有查询到相关信息");
// check 3: 会员卡消耗记录中包含该记录锁定的次数释放
JSONArray consumeRecord = cardTools.fetchPageOfConsumeRecord(benefitId,memberCardId).getJSONObject("result").getJSONArray("records");
JSONArray consumeRecord = cardTools.fetchPageOfConsumeRecord(memberInfo1.getString(1),memberInfo1.getString(2)).getJSONObject("result").getJSONArray("records");
String[] result2 = new String[] {"resourceId","consumeType","changeOfUsablePurchaseBalance"};
String[] respect = new String[] {reserveId,"CANCEL_RESERVE","1.00"};
String[] respect = new String[] {memberInfo1.getString(3),"CANCEL_RESERVE","1.00"};
String[] message1 = new String[] {"会员卡消耗记录中记录的资源id与实际约课记录id不符合","会员卡消耗记录中记录的资源id与实际约课记录类型不符合","会员卡消耗记录中记录的资源id与实际约课记录余额不符合"};
for (int i = 0; i < result2.length; i++){
Assert.assertEquals(consumeRecord.getJSONObject(0).getString(result2[i]),respect[i],message1[i]);
......
......@@ -207,7 +207,7 @@ public class TestAddToQueue extends BaseTestImpl {
Assert.assertEquals(getDetailById.getString("queueSort"),"1","第一位的学员取消排队后排队名次应该是第1位");
// 操作3:将约课的学员取消
reserveTools.cancelMemberReserve(memberId1.getString(2),true);
reserveTools.cancelMemberReserve(memberId1.getString(3),true);
try {
Thread.sleep(2500);
} catch (InterruptedException e) {
......
......@@ -32,7 +32,7 @@ import java.util.Random;
* @BelongsPackage: com.xiaomai.cases.polar.reserve.personal
* @Author: xuyamei
* @CreateTime: 2024-07-26 16:25
* @Description: 一对一私教课预约
* @Description: 一对一和一对多私教课预约
* @Version: 1.0
*/
public class TestReservePerson extends BaseTestImpl {
......@@ -69,6 +69,9 @@ public class TestReservePerson extends BaseTestImpl {
private String coachedId;
private String memberCardId;
private String reserveId;
JSONArray member2 = new JSONArray();
JSONArray member1 = new JSONArray();
@BeforeClass
@Override
public void beforeTest() {
......@@ -78,8 +81,7 @@ public class TestReservePerson extends BaseTestImpl {
@Test
public void
testReservePerson(){
public void testReservePerson(){
// 第一步:查询存量的约课课程
// 查询存量的课程分类
String categoryId = courseCategoryTools.getCourseCategoryPage("瑜伽");
......@@ -151,13 +153,15 @@ public class TestReservePerson extends BaseTestImpl {
// 从课表查询scheduleId
JSONArray personalScheduleTable = reserveTools.getPersonalScheduleTable(timestamp,TimeUtils.getTodayEndTime(),courseId);
for (int i = 0; i < personalScheduleTable.size(); i++){
System.out.println("personalScheduleTable.getJSONObject(i).getString(\"startTime\").equals(String.valueOf(timestamp)):"+personalScheduleTable.getJSONObject(i).getString("startTime").equals(String.valueOf(timestamp)));
if (personalScheduleTable.getJSONObject(i).getString("startTime").equals(String.valueOf(timestamp))){
scheduleId = personalScheduleTable.getJSONObject(i).getString("scheduleId");
break;
JSONArray personalScheduleTable = reserveTools.getPersonalScheduleTable(timestamp, TimeUtils.getTodayEndTime(), courseId);
for (int i = 0; i < personalScheduleTable.size(); i++) {
for (int j = 0; j < personalScheduleTable.getJSONObject(i).getJSONArray("reserveIds").size(); j++){
if (personalScheduleTable.getJSONObject(i).getString("startTime").equals(String.valueOf(timestamp)) && personalScheduleTable.getJSONObject(i).getJSONArray("reserveIds").getString(j).equals(reserveId)) {
scheduleId = personalScheduleTable.getJSONObject(i).getString("scheduleId");
break;
}
}
}
// check 1:课次学员是否包含该会员
......@@ -260,7 +264,7 @@ public class TestReservePerson extends BaseTestImpl {
}
}
// check 3: 会员卡消耗记录中包含该记录锁定的次数释放
// check 4: 会员卡消耗记录中包含该记录锁定的次数释放
JSONArray consumeRecord = cardTools.fetchPageOfConsumeRecord(benefitId,memberCardId).getJSONObject("result").getJSONArray("records");
String[] result2 = new String[] {"resourceId","consumeType","changeOfUsablePurchaseBalance"};
String[] respect = new String[] {reserveId,"CANCEL_RESERVE","1.00"};
......@@ -271,6 +275,235 @@ public class TestReservePerson extends BaseTestImpl {
}
@Test(description = "预约1VN课次,其他学员可再次进行预约",priority = 2)
public void testReservePerson_1VN() {
// 第一步:查询存量的约课课程
// 查询存量的课程分类
String categoryId = courseCategoryTools.getCourseCategoryPage("瑜伽");
courseId = courseTools.getPersonalOrGroupCourseId("PERSONAL", "普拉提器械1V3私教课程", categoryId, "STUDIO", "ONE_TO_MANY", 3, 1).getString(0);
String courseName = courseTools.getPersonalOrGroupCourseId("PERSONAL", "普拉提器械1V3私教课程", categoryId, "STUDIO", "ONE_TO_MANY", 3, 1).getString(1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 第二步:查询存量的学员,如果没有则新建
member1 = createMember("1V3私教约课学员李萌");
// 第三步:查询存量的私教教练,并将教练添加到课程中
// 获取到员工
// 获取教练列表
JSONObject pageStudioPersonalCoach = reserveTools.pageStudioPersonalCoach("");
int total = pageStudioPersonalCoach.getInteger("total");
Random rand = new Random();
// 随机取1个教练
coachedId = pageStudioPersonalCoach.getJSONArray("records").getJSONObject(rand.nextInt(total>10?10:total)).getString("id");
// 编辑私教课程教练添加到课程中
courseTools.editPersonalCourse(categoryId,courseId,courseName,10,coachedId,"3");
// 第四步:创建私教特殊可约时间
JSONObject specialTimeInfoRequest = new JSONObject();
// 可约时间类型
specialTimeInfoRequest.put("dutyType", "ON_DUTY");
// 设置特定日期
JSONArray selectedDates = new JSONArray();
selectedDates.add(TimeUtils.getTodayTime());
specialTimeInfoRequest.put("selectedDates", selectedDates);
// 如果是可约时间非全天休息,则传可约时间段
// 时间段 00:00 ~ 23:59
JSONArray timePeriodInfos = new JSONArray();
JSONObject timeInfo = new JSONObject();
timeInfo.put("minuteOffset", 60);
timeInfo.put("spanMinutes", 1380);
timePeriodInfos.add(timeInfo);
specialTimeInfoRequest.put("timePeriodInfos", timePeriodInfos);
// 设置特殊可约时间
reserveTools.createSpecialDate(coachedId,"ON_DUTY",specialTimeInfoRequest);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 第五步:获取老师第一条可约时间
JSONArray personalCoachTime = reserveTools.getPersonalTimeBlocks(coachedId,courseId,TimeUtils.getTodayTime());
// 获取当前日期的Calendar实例
Calendar calendar = Calendar.getInstance();
// 获取第一条的步长 转换成时间戳
int minuteOffset = personalCoachTime.getJSONObject(0).getIntValue("minuteOffset")/60;
calendar.set(Calendar.HOUR_OF_DAY, minuteOffset);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
// 将Calendar对象转换为时间戳
timestamp = calendar.getTimeInMillis();
// 李萌预约生成课次
reserveId = reserveTools.addPersonalReserve("",courseId,coachedId,memberId,benefitId,10,1,"",timestamp,true);
member1.add(reserveId);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 从课表查询scheduleId
JSONArray personalScheduleTable = reserveTools.getPersonalScheduleTable(timestamp, TimeUtils.getTodayEndTime(), courseId);
for (int i = 0; i < personalScheduleTable.size(); i++) {
for (int j = 0; j < personalScheduleTable.getJSONObject(i).getJSONArray("reserveIds").size(); j++){
if (personalScheduleTable.getJSONObject(i).getString("startTime").equals(String.valueOf(timestamp)) && personalScheduleTable.getJSONObject(i).getJSONArray("reserveIds").getString(j).equals(reserveId)) {
scheduleId = personalScheduleTable.getJSONObject(i).getString("scheduleId");
break;
}
}
}
// check 1:课次学员是否包含该会员
JSONObject getScheduleItemDetail = groupScheduleTools.getScheduleItemDetail(scheduleId);
JSONArray reserveIds = getScheduleItemDetail.getJSONArray("reserveIds");
boolean success = false;
for (int i = 0; i < reserveIds.size(); i++){
if(reserveIds.getString(i).equals(member1.getString(3))){
success = true;
}
}
Assert.assertTrue(success,"约课后课次详情学员不在课次中");
// 学员2进行预约
member2 = createMember("1V3私教约课学员2程晨");
reserveId = reserveTools.addPersonalReserve("",courseId,coachedId,member2.getString(0),member2.getString(1),10,1,scheduleId,timestamp,true);
member2.add(reserveId);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// check 1:课次学员是否包含该会员
getScheduleItemDetail = groupScheduleTools.getScheduleItemDetail(scheduleId);
reserveIds = getScheduleItemDetail.getJSONArray("reserveIds");
success = false;
for (int i = 0; i < reserveIds.size(); i++){
if(reserveIds.getString(i).equals(member2.getString(3))){
success = true;
}
}
Assert.assertTrue(success,"约课后课次详情学员不在课次中");
// check 2: 预约记录是否包含该预约
// check 2.1 学员详情预约记录
JSONArray getPageByMember = reserveTools.getPageByMember(courseId,"SUCCESS","",coachedId, timestamp,todayEndDateTimeTamp,memberId,"PERSONAL");
String[] result = new String[] {"id","benefitId","reserveMemberNum","courseId","courseType","scheduleStartTime","reserveState","scheduleId"};
String[] resultData = new String[] {member2.getString(3),member2.getString(1),"1",courseId,"PERSONAL",timestamp+"","SUCCESS",scheduleId};
success = false;
for(int i =0;i<getPageByMember.size();i++){
if (getPageByMember.getJSONObject(i).getString("id").equals(member2.getString(3))){
success = true;
for(int j = 0;j<result.length;j++){
Assert.assertEquals(getPageByMember.getJSONObject(i).getString(result[j]),resultData[j],"约课产生的数据与实际数据不符合"+result[j]+":"+resultData[j]);
}
}
}
Assert.assertTrue(success,"约课后在会员详情页面未查询到相关信息");
// check 2.2 预约记录列表
JSONArray getPageByStudio = reserveTools.getPageByStudio(courseId,"SUCCESS","",coachedId,timestamp,TimeUtils.getTodayEndTime(),member2.getString(0),"PERSONAL","");
success = false;
for(int i =0;i<getPageByStudio.size();i++){
if (getPageByStudio.getJSONObject(i).getString("id").equals(member2.getString(3))){
success = true;
for(int j = 0;j<result.length;j++){
Assert.assertEquals(getPageByStudio.getJSONObject(i).getString(result[j]),resultData[j],"约课产生的数据与实际数据不符合"+result[j]+":"+resultData[j]);
}
Assert.assertEquals(getPageByStudio.getJSONObject(i).getString("memberId"),member2.getString(0),"查询的约课数据不是同一个会员");
}
}
Assert.assertTrue(success,"约课后在约课记录没有查询到相关信息");
// check 2.3 预约记录详情
JSONObject getDetailById = reserveTools.getDetailById(member2.getString(3));
for(int j = 0;j<result.length;j++){
Assert.assertEquals(getDetailById.getString(result[j]),resultData[j],"约课产生的数据与实际数据不符合"+result[j]+":"+resultData[j]);
}
Assert.assertEquals(getDetailById.getString("memberId"),member2.getString(0),"查询的约课数据不是同一个会员");
// check 3: 会员卡消耗记录中包含该记录锁定
JSONArray consumeRecord = cardTools.fetchPageOfConsumeRecord(member2.getString(1),member2.getString(2)).getJSONObject("result").getJSONArray("records");
String[] result2 = new String[] {"resourceId","consumeType","changeOfUsablePurchaseBalance"};
String[] respect = new String[] {member2.getString(3),"RESERVE","-1.00"};
String[] message = new String[] {"会员卡消耗记录中记录的资源id与实际约课记录id不符合","会员卡消耗记录中记录的资源id与实际约课记录类型不符合","会员卡消耗记录中记录的资源id与实际约课记录余额不符合"};
for (int i = 0; i < result2.length; i++){
Assert.assertEquals(consumeRecord.getJSONObject(0).getString(result2[i]),respect[i],message[i]);
}
}
@Test(description = "删除课次",priority = 3)
public void testReservePerson_del() {
// 课次中的一个会员取消预约
reserveTools.cancelMemberReserve(member1.getString(3),true);
// check 1:课次还存在 且课次中不包含该学员
JSONObject getScheduleItemDetail = groupScheduleTools.getScheduleItemDetail(scheduleId);
JSONArray reserveIds = getScheduleItemDetail.getJSONArray("reserveIds");
boolean success = false;
for (int i = 0; i < reserveIds.size(); i++){
if(reserveIds.getString(i).equals(member1.getString(3))){
success = true;
}
}
Assert.assertFalse(success,"取消约课后课次详情学员还在课次中");
// 删除该课次
reserveTools.delPersonalScheduleItem(scheduleId);
// 课次学员取消预约
// check 1:课次已删除,课表没有该条数据
JSONArray personalScheduleTable = reserveTools.getPersonalScheduleTable(timestamp,TimeUtils.getTodayEndTime(),courseId);
boolean flag = true;
if (personalScheduleTable != null){
for (int i = 0; i < personalScheduleTable.size(); i++){
if (personalScheduleTable.getJSONObject(i).getString("scheduleId").equals(scheduleId)){
scheduleId = personalScheduleTable.getJSONObject(i).getString("scheduleId");
flag = false;
break;
}
}
}
Assert.assertTrue(flag,"取消约课后课次未删除");
// check 2:会员详情 - 预约记录已取消
JSONArray getPageByMember = reserveTools.getPageByMember(courseId,"RESERVE_CANCEL","","", timestamp,TimeUtils.getTodayEndTime(),member2.getString(0),"GROUP_CLASS");
for(int i =0;i<getPageByMember.size();i++){
if (getPageByMember.getJSONObject(i).getString("id").equals(member2.getString(3))){
Assert.assertEquals(getPageByMember.getJSONObject(i).getString("reserveState"),"RESERVE_CANCEL","取消约课状态不是已取消");
}
}
// check 3:预约记录列表中已取消
JSONArray getPageByStudio = reserveTools.getPageByStudio(courseId,"RESERVE_CANCEL","","",timestamp,TimeUtils.getTodayEndTime(),member2.getString(0),"GROUP_CLASS","");;
for(int i =0;i<getPageByStudio.size();i++){
if (getPageByStudio.getJSONObject(i).getString("id").equals(member2.getString(3))){
Assert.assertEquals(getPageByStudio.getJSONObject(i).getString("reserveState"),"RESERVE_CANCEL","取消约课状态不是已取消");
}
}
// check 4: 会员卡消耗记录中包含该记录锁定的次数释放
JSONArray consumeRecord = cardTools.fetchPageOfConsumeRecord(member2.getString(1),member2.getString(2)).getJSONObject("result").getJSONArray("records");
String[] result2 = new String[] {"resourceId","consumeType","changeOfUsablePurchaseBalance"};
String[] respect = new String[] {member2.getString(3),"CANCEL_RESERVE","1.00"};
String[] message1 = new String[] {"会员卡消耗记录中记录的资源id与实际约课记录id不符合","会员卡消耗记录中记录的资源id与实际约课记录类型不符合","会员卡消耗记录中记录的资源id与实际约课记录余额不符合"};
for (int i = 0; i < result2.length; i++){
Assert.assertEquals(consumeRecord.getJSONObject(0).getString(result2[i]),respect[i],message1[i]);
}
}
/**
......
package com.xiaomai.cases.polar.reserve.personal;
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.course.CourseTools;
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.cases.polar.setting.courseCategory.CourseCategoryTools;
import com.xiaomai.enums.ApiModule;
import com.xiaomai.enums.LoginAccount;
import com.xiaomai.enums.Terminal;
import com.xiaomai.utils.CommUtil;
import com.xiaomai.utils.RandomStringUtil;
import com.xiaomai.utils.TimeUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Random;
/**
* @BelongsProject: xm-sportstest
* @BelongsPackage: com.xiaomai.cases.polar.reserve.personal
* @Author: xuyamei
* @CreateTime: 2024-07-29 17:22
* @Description: 私教签到 (团课签到和私教签到用的同一个接口)
* @Version: 1.0
*/
public class TestSignReservePerson extends BaseTestImpl {
@Resource(name = "courseCategoryTools")
CourseCategoryTools courseCategoryTools;
@Resource(name = "courseTools")
CourseTools courseTools;
@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();
String todayStartTimeTamp = CommUtil.oneKeyGetAddDay(0);
//获取今天结束日期的时间戳
Long todayEndDateTimeTamp = TimeUtils.getTodayEndTime();
private Long timestamp;
private String scheduleId;
private String courseId;
private String coachedId;
@BeforeClass
@Override
public void beforeTest() {
setTestInfo(ApiModule.Polar_Reserve, "API_addPersonalReserve", LoginAccount.GYM_PROD, Terminal.B, "xym");
super.beforeTest();
}
@Test(description = "1v1约课签到")
public void testSignReservePerson() {
// 第一步:查询存量的约课课程
// 查询存量的课程分类
String categoryId = courseCategoryTools.getCourseCategoryPage("瑜伽");
courseId = courseTools.getPersonalOrGroupCourseId("PERSONAL", "普拉提一对一点名私教课程", categoryId, "STUDIO", "ONE_TO_ONE", 1, 1).getString(0);
String courseName = courseTools.getPersonalOrGroupCourseId("PERSONAL", "普拉提一对一点名私教课程", categoryId, "STUDIO", "ONE_TO_ONE", 1, 1).getString(1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 第二步:查询存量的学员,如果没有则新建
JSONArray memberInfo = createMember("私教1v1点名学员卡卡");
// 第三步:查询存量的私教教练,并将教练添加到课程中
// 获取到员工
// 获取教练列表
JSONObject pageStudioPersonalCoach = reserveTools.pageStudioPersonalCoach("");
int total = pageStudioPersonalCoach.getInteger("total");
Random rand = new Random();
// 随机取1个教练
coachedId = pageStudioPersonalCoach.getJSONArray("records").getJSONObject(rand.nextInt(total > 10 ? 10 : total)).getString("id");
// 编辑私教课程教练添加到课程中
courseTools.editPersonalCourse(categoryId, courseId, courseName, 10, coachedId, "1");
// 第四步:创建私教特殊可约时间
JSONObject specialTimeInfoRequest = new JSONObject();
// 可约时间类型
specialTimeInfoRequest.put("dutyType", "ON_DUTY");
// 设置特定日期
JSONArray selectedDates = new JSONArray();
selectedDates.add(TimeUtils.getTodayTime());
specialTimeInfoRequest.put("selectedDates", selectedDates);
// 如果是可约时间非全天休息,则传可约时间段
// 时间段 00:00 ~ 23:59
JSONArray timePeriodInfos = new JSONArray();
JSONObject timeInfo = new JSONObject();
timeInfo.put("minuteOffset", 0);
timeInfo.put("spanMinutes", 1380);
timePeriodInfos.add(timeInfo);
specialTimeInfoRequest.put("timePeriodInfos", timePeriodInfos);
// 设置特殊可约时间
reserveTools.createSpecialDate(coachedId, "ON_DUTY", specialTimeInfoRequest);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 第五步:获取老师第一条可约时间
JSONArray personalCoachTime = reserveTools.getPersonalTimeBlocks(coachedId, courseId, TimeUtils.getTodayTime());
// 获取当前日期的Calendar实例
Calendar calendar = Calendar.getInstance();
// 获取第一条的步长 转换成时间戳
int minuteOffset = personalCoachTime.getJSONObject(0).getIntValue("minuteOffset") / 60;
calendar.set(Calendar.HOUR_OF_DAY, minuteOffset);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
// 将Calendar对象转换为时间戳
timestamp = calendar.getTimeInMillis();
String reserveId = reserveTools.addPersonalReserve("", courseId, coachedId, memberInfo.getString(0), memberInfo.getString(1), 10, 1, "", timestamp, true);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 从课表查询scheduleId
JSONArray personalScheduleTable = reserveTools.getPersonalScheduleTable(timestamp, TimeUtils.getTodayEndTime(), courseId);
for (int i = 0; i < personalScheduleTable.size(); i++) {
for (int j = 0; j < personalScheduleTable.getJSONObject(i).getJSONArray("reserveIds").size(); j++){
if (personalScheduleTable.getJSONObject(i).getString("startTime").equals(String.valueOf(timestamp)) && personalScheduleTable.getJSONObject(i).getJSONArray("reserveIds").getString(j).equals(reserveId)) {
scheduleId = personalScheduleTable.getJSONObject(i).getString("scheduleId");
break;
}
}
}
reserveTools.signIn(true, reserveId, false);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// check 1:课次学员是否包含该会员且会员状态为已签到
JSONObject getScheduleItemDetail = groupScheduleTools.getScheduleItemDetail(scheduleId);
JSONArray reserveIds = getScheduleItemDetail.getJSONArray("memberReserveList");
boolean success = false;
for (int i = 0; i < reserveIds.size(); i++){
if(reserveIds.getJSONObject(i).getString("id").equals(reserveId)){
success = true;
Assert.assertEquals(reserveIds.getJSONObject(i).getString("signInState"),"SIGNED","签到状态错误");
}
}
Assert.assertTrue(success,"约课后点名课次详情学员不在课次中");
// check 2: 预约记录是否包含该预约
// check 2.1 学员详情预约记录
JSONArray getPageByMember = reserveTools.getPageByMember(courseId,"SUCCESS","SIGNED","", timestamp,TimeUtils.getTodayEndTime(), memberInfo.getString(0),"PERSONAL");
String[] result = new String[] {"id","benefitId","reserveMemberNum","courseId","courseType","scheduleStartTime","reserveState","scheduleId","signInState"};
String[] resultData = new String[] {reserveId, memberInfo.getString(1),"1",courseId,"PERSONAL",timestamp+"","SUCCESS",scheduleId,"SIGNED"};
success = false;
for(int i =0;i<getPageByMember.size();i++){
if (getPageByMember.getJSONObject(i).getString("id").equals(reserveId)){
success = true;
for(int j = 0;j<result.length;j++){
Assert.assertEquals(getPageByMember.getJSONObject(i).getString(result[j]),resultData[j],"约课产生的数据与实际数据不符合"+result[j]+":"+resultData[j]);
}
}
}
Assert.assertTrue(success,"约课后在会员详情页面未查询到相关信息");
// check 2.2 预约记录列表
JSONArray getPageByStudio = reserveTools.getPageByStudio(courseId,"SUCCESS","SIGNED","",timestamp,TimeUtils.getTodayEndTime(), memberInfo.getString(0),"PERSONAL","");
success = false;
for(int i =0;i<getPageByStudio.size();i++){
if (getPageByStudio.getJSONObject(i).getString("id").equals(reserveId)){
success = true;
for(int j = 0;j<result.length;j++){
Assert.assertEquals(getPageByStudio.getJSONObject(i).getString(result[j]),resultData[j],"约课产生的数据与实际数据不符合"+result[j]+":"+resultData[j]);
}
Assert.assertEquals(getPageByStudio.getJSONObject(i).getString("memberId"), memberInfo.getString(0),"查询的约课数据不是同一个会员");
}
}
Assert.assertTrue(success,"约课后在约课记录没有查询到相关信息");
// check 2.3 预约记录详情
JSONObject getDetailById = reserveTools.getDetailById(reserveId);
for(int j = 0;j<result.length;j++){
Assert.assertEquals(getDetailById.getString(result[j]),resultData[j],"约课产生的数据与实际数据不符合"+result[j]+":"+resultData[j]);
}
Assert.assertEquals(getDetailById.getString("memberId"), memberInfo.getString(0),"查询的约课数据不是同一个会员");
// check 3: 会员卡消耗记录中包含该记录签到消耗
JSONArray consumeRecord = cardTools.fetchPageOfConsumeRecord(memberInfo.getString(1),memberInfo.getString(2)).getJSONObject("result").getJSONArray("records");
String[] result2 = new String[] {"resourceId","consumeType","changeOfPurchaseBalance"};
String[] respect = new String[] {reserveId,"SIGN_IN","-1.00"};
String[] message = new String[] {"会员卡消耗记录中记录的资源id与实际约课记录id不符合","会员卡消耗记录中记录的资源id与实际约课记录类型不符合","会员卡消耗记录中记录的资源id与实际约课记录余额不符合"};
for (int i = 0; i < result2.length; i++){
Assert.assertEquals(consumeRecord.getJSONObject(0).getString(result2[i]),respect[i],message[i]);
}
}
@Test(description = "预约1VN课次,点名后再次其他学员约课点名",priority = 2)
public void testReservePerson_1VN() {
// 第一步:查询存量的约课课程
// 查询存量的课程分类
String categoryId = courseCategoryTools.getCourseCategoryPage("瑜伽");
courseId = courseTools.getPersonalOrGroupCourseId("PERSONAL", "普拉提器械1V2点名私教课程", categoryId, "STUDIO", "ONE_TO_MANY", 2, 1).getString(0);
String courseName = courseTools.getPersonalOrGroupCourseId("PERSONAL", "普拉提器械1V2点名私教课程", categoryId, "STUDIO", "ONE_TO_MANY", 2, 1).getString(1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 第二步:查询存量的学员,如果没有则新建
JSONArray memberInfo1 = createMember("1V2私教点名学员程程");
// 第三步:查询存量的私教教练,并将教练添加到课程中
// 获取到员工
// 获取教练列表
JSONObject pageStudioPersonalCoach = reserveTools.pageStudioPersonalCoach("");
int total = pageStudioPersonalCoach.getInteger("total");
Random rand = new Random();
// 随机取1个教练
coachedId = pageStudioPersonalCoach.getJSONArray("records").getJSONObject(rand.nextInt(total > 10 ? 10 : total)).getString("id");
// 编辑私教课程教练添加到课程中
courseTools.editPersonalCourse(categoryId, courseId, courseName, 10, coachedId, "2");
// 第四步:创建私教特殊可约时间
JSONObject specialTimeInfoRequest = new JSONObject();
// 可约时间类型
specialTimeInfoRequest.put("dutyType", "ON_DUTY");
// 设置特定日期
JSONArray selectedDates = new JSONArray();
selectedDates.add(TimeUtils.getTodayTime());
specialTimeInfoRequest.put("selectedDates", selectedDates);
// 如果是可约时间非全天休息,则传可约时间段
// 时间段 00:00 ~ 23:59
JSONArray timePeriodInfos = new JSONArray();
JSONObject timeInfo = new JSONObject();
timeInfo.put("minuteOffset", 60);
timeInfo.put("spanMinutes", 1380);
timePeriodInfos.add(timeInfo);
specialTimeInfoRequest.put("timePeriodInfos", timePeriodInfos);
// 设置特殊可约时间
reserveTools.createSpecialDate(coachedId, "ON_DUTY", specialTimeInfoRequest);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 第五步:获取老师第一条可约时间
JSONArray personalCoachTime = reserveTools.getPersonalTimeBlocks(coachedId, courseId, TimeUtils.getTodayTime());
// 获取当前日期的Calendar实例
Calendar calendar = Calendar.getInstance();
// 获取第一条的步长 转换成时间戳
int minuteOffset = personalCoachTime.getJSONObject(0).getIntValue("minuteOffset") / 60;
calendar.set(Calendar.HOUR_OF_DAY, minuteOffset);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
// 将Calendar对象转换为时间戳
timestamp = calendar.getTimeInMillis();
// 李萌预约生成课次
String reserveId = reserveTools.addPersonalReserve("", courseId, coachedId, memberInfo1.getString(0), memberInfo1.getString(1), 10, 1, "", timestamp, true);
memberInfo1.add(reserveId);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 从课表查询scheduleId
JSONArray personalScheduleTable = reserveTools.getPersonalScheduleTable(timestamp, TimeUtils.getTodayEndTime(), courseId);
for (int i = 0; i < personalScheduleTable.size(); i++) {
for (int j = 0; j < personalScheduleTable.getJSONObject(i).getJSONArray("reserveIds").size(); j++){
if (personalScheduleTable.getJSONObject(i).getString("startTime").equals(String.valueOf(timestamp)) && personalScheduleTable.getJSONObject(i).getJSONArray("reserveIds").getString(j).equals(reserveId)) {
scheduleId = personalScheduleTable.getJSONObject(i).getString("scheduleId");
break;
}
}
}
// check 1:课次学员是否包含该会员
JSONObject getScheduleItemDetail = groupScheduleTools.getScheduleItemDetail(scheduleId);
JSONArray reserveIds = getScheduleItemDetail.getJSONArray("reserveIds");
boolean success = false;
for (int i = 0; i < reserveIds.size(); i++) {
if (reserveIds.getString(i).equals(memberInfo1.getString(3))) {
success = true;
}
}
Assert.assertTrue(success, "约课后课次详情学员不在课次中");
reserveTools.signIn(true, reserveId, false);
// 学员2进行预约
JSONArray memberInfo2 = createMember("1V2私教点名学员2王菲");
reserveId = reserveTools.addPersonalReserve("", courseId, coachedId, memberInfo2.getString(0), memberInfo2.getString(1), 10, 1, scheduleId, timestamp, true);
memberInfo2.add(reserveId);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
reserveTools.signIn(true, memberInfo2.getString(3), false);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// check :两个学员的状态
for (int j = 0; j < 2; j++){
JSONArray memberInfo = j==0 ? memberInfo1 : memberInfo2;
// check 1:课次学员是否包含该会员且会员状态为已签到
getScheduleItemDetail = groupScheduleTools.getScheduleItemDetail(scheduleId);
reserveIds = getScheduleItemDetail.getJSONArray("memberReserveList");
success = false;
for (int i = 0; i < reserveIds.size(); i++){
if(reserveIds.getJSONObject(i).getString("id").equals(reserveId)){
success = true;
Assert.assertEquals(reserveIds.getJSONObject(i).getString("signInState"),"SIGNED","签到状态错误");
}
}
Assert.assertTrue(success,"约课后点名课次详情学员不在课次中");
// check 2: 预约记录是否包含该预约
// check 2.1 学员详情预约记录
JSONArray getPageByMember = reserveTools.getPageByMember(courseId,"SUCCESS","SIGNED","", timestamp,TimeUtils.getTodayEndTime(), memberInfo.getString(0),"PERSONAL");
String[] result = new String[] {"id","benefitId","reserveMemberNum","courseId","courseType","scheduleStartTime","reserveState","scheduleId","signInState"};
String[] resultData = new String[] {memberInfo.getString(3), memberInfo.getString(1),"1",courseId,"PERSONAL",timestamp+"","SUCCESS",scheduleId,"SIGNED"};
success = false;
for(int i =0;i<getPageByMember.size();i++){
if (getPageByMember.getJSONObject(i).getString("id").equals(memberInfo.getString(3))){
success = true;
for(int f = 0;f<result.length;f++){
Assert.assertEquals(getPageByMember.getJSONObject(i).getString(result[f]),resultData[f],"约课产生的数据与实际数据不符合"+result[f]+":"+resultData[f]);
}
}
}
Assert.assertTrue(success,"约课后在会员详情页面未查询到相关信息");
// check 2.2 预约记录列表
JSONArray getPageByStudio = reserveTools.getPageByStudio(courseId,"SUCCESS","SIGNED","",timestamp,TimeUtils.getTodayEndTime(), memberInfo.getString(0),"PERSONAL","");
success = false;
for(int i =0;i<getPageByStudio.size();i++){
if (getPageByStudio.getJSONObject(i).getString("id").equals(memberInfo.getString(3))){
success = true;
for(int f = 0;f<result.length;f++){
Assert.assertEquals(getPageByStudio.getJSONObject(i).getString(result[f]),resultData[f],"约课产生的数据与实际数据不符合"+result[f]+":"+resultData[f]);
}
Assert.assertEquals(getPageByStudio.getJSONObject(i).getString("memberId"), memberInfo.getString(0),"查询的约课数据不是同一个会员");
}
}
Assert.assertTrue(success,"约课后在约课记录没有查询到相关信息");
// check 2.3 预约记录详情
JSONObject getDetailById = reserveTools.getDetailById(memberInfo.getString(3));
for(int i = 0;i<result.length;i++){
Assert.assertEquals(getDetailById.getString(result[i]),resultData[i],"约课产生的数据与实际数据不符合"+result[i]+":"+resultData[i]);
}
Assert.assertEquals(getDetailById.getString("memberId"), memberInfo.getString(0),"查询的约课数据不是同一个会员");
// check 3: 会员卡消耗记录中包含该记录签到消耗
JSONArray consumeRecord = cardTools.fetchPageOfConsumeRecord(memberInfo.getString(1),memberInfo.getString(2)).getJSONObject("result").getJSONArray("records");
String[] result2 = new String[] {"resourceId","consumeType","changeOfPurchaseBalance"};
String[] respect = new String[] {memberInfo.getString(3),"SIGN_IN","-1.00"};
String[] message = new String[] {"会员卡消耗记录中记录的资源id与实际约课记录id不符合","会员卡消耗记录中记录的资源id与实际约课记录类型不符合","会员卡消耗记录中记录的资源id与实际约课记录余额不符合"};
for (int i = 0; i < result2.length; i++){
Assert.assertEquals(consumeRecord.getJSONObject(0).getString(result2[i]),respect[i],message[i]);
}
}
}
/**
* @description:查询学员
* @author: xuyamei
* @date: 2024/7/26 16:41
* @param memberName
* @return: com.alibaba.fastjson.JSONArray
**/
public JSONArray createMember(String memberName){
String memberId;
// 查询存量的学员没有则创建学员,
if (tools.commonSearch(memberName,"NORMAL").getJSONArray("result").size()>0){
memberId = tools.commonSearch(memberName,"NORMAL").getJSONArray("result").getJSONObject(0).getString("id");
}else if (tools.commonSearch(memberName,"HISTORY").getJSONArray("result").size()>0){
memberId = tools.commonSearch(memberName,"HISTORY").getJSONArray("result").getJSONObject(0).getString("id");
}else if (tools.commonSearch(memberName,"POTENTIAL").getJSONArray("result").size()>0){
memberId = tools.commonSearch(memberName,"POTENTIAL").getJSONArray("result").getJSONObject(0).getString("id");
}else{
memberId = memberTools.create(memberName, RandomStringUtil.randomMobile("203")).getString("result");
}
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 查询是否有可用的会员卡,没有则购买
JSONArray listUserReservableBenefit = cardTools.listUserReservableBenefit(courseId, "PERSONAL", "MEMBER", memberId, Long.parseLong(todayStartTimeTamp));
if (listUserReservableBenefit.size() == 0) {
// 购买适用的会员卡
signOrder(courseId, memberId);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
listUserReservableBenefit = cardTools.listUserReservableBenefit(courseId, "PERSONAL", "MEMBER", memberId, Long.parseLong(todayStartTimeTamp));
}
// 查询权益
String benefitId = listUserReservableBenefit.getJSONObject(0).getString("benefitId");
String memberCardId = listUserReservableBenefit.getJSONObject(0).getString("memberCardId");
JSONArray members = new JSONArray();
members.add(memberId);
members.add(benefitId);
members.add(memberCardId);
return members;
}
// 买卡
public void signOrder(String courseId,String memberId){
// 查询存量的卡
JSONObject fetchPageOfMemberCard = cardTools.fetchPageOfMemberCard(courseId);
int total = Integer.parseInt(fetchPageOfMemberCard.getString("total"));
String cardId = "";
BigDecimal quantity = new BigDecimal(0) ;
float price = 0;
int validPeriod = 0;
if (total == 0) {
cardId = cardTools.memberCardCreate("私教约课使用会员卡"+ TimeUtils.getCurrentTime()).getString("result");
}
cardId = fetchPageOfMemberCard.getJSONArray("records").getJSONObject(0).getString("id");
quantity = new BigDecimal(fetchPageOfMemberCard.getJSONArray("records").getJSONObject(0).getString("balance"));
price = Float.parseFloat(fetchPageOfMemberCard.getJSONArray("records").getJSONObject(0).getString("price"));
validPeriod = Integer.parseInt(fetchPageOfMemberCard.getJSONArray("records").getJSONObject(0).getString("validPeriod"));
//获取签单要用的卡快照id
String latestSnapshotId = orderTools.fetchDetailById(cardId,xmAppApi.getLoginInfo().getBrandId(),xmAppApi.getLoginInfo().getStudioId(),xmAppApi.getLoginInfo().getAdminId()).getJSONObject("result").getString("latestSnapshotId");
//检查会员对该卡是否超出购买上限
boolean limitResult= orderTools.checkAllowPurchase("MEMBER_CARD",cardId,cardId,"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",memberId,price-price/2,price-price/2,"1");
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment