Commit 8ccdea0c by DuJunLi

增加时间工具类

创建团课排课工具类和新建排课case
parent 87ee3c3e
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;
}
}
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
...@@ -14,6 +14,9 @@ public class ApiModule { ...@@ -14,6 +14,9 @@ public class ApiModule {
public static String Polar_Finance="polar_finance";//财务中心 public static String Polar_Finance="polar_finance";//财务中心
public static String Polar_Schedule="polar_schedule";//课程排期
......
...@@ -10,7 +10,7 @@ public class LoginAccount { ...@@ -10,7 +10,7 @@ public class LoginAccount {
public static String YFF_DEV = "yff_dev"; public static String YFF_DEV = "yff_dev";
public static String ZYX_DEV = "zyx_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" + public static String GYM_PROD = "GYM_PROd" +
""; "";
......
package com.xiaomai.utils; 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.BeanInfo;
import java.beans.Introspector; import java.beans.Introspector;
import java.beans.PropertyDescriptor; import java.beans.PropertyDescriptor;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.HashMap; import java.util.*;
import java.util.Map;
import java.util.Properties;
public class CommUtil { public class CommUtil {
public static Date now = new Date();
public static String getCurrentTime() { public static String getCurrentTime() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
...@@ -67,4 +71,143 @@ public class CommUtil { ...@@ -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));
}
} }
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