From 027e972482636488b75e64299623fac9f0ded757 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Tue, 7 Nov 2023 22:41:00 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=90=84=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E6=97=B6=E9=97=B4=E6=AE=B5=E9=A2=84=E7=BA=A6=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/HyPartnerInterviewPlanMapper.java | 11 +++ .../mapper/HyPartnerInterviewPlanMapper.xml | 28 ++++++ .../HyPartnerInterviewBookSituation.java | 33 +++++++ .../store/request/GetFreeBusyListReq.java | 2 + .../cool/store/vo/interview/FreeBusyInfo.java | 30 +++++++ .../com/cool/store/service/FeiShuService.java | 5 ++ .../cool/store/service/InterviewService.java | 7 ++ .../store/service/impl/FeiShuServiceImpl.java | 8 ++ .../service/impl/InterviewServiceImpl.java | 88 +++++++++++++++++-- .../store/service/impl/TimeSlotGenerator.java | 52 ++++++++++- .../store/controller/FeiShuController.java | 6 ++ .../store/controller/InterviewController.java | 9 ++ 12 files changed, 273 insertions(+), 6 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewBookSituation.java diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewPlanMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewPlanMapper.java index 6df52fa5a..6fb122077 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewPlanMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewPlanMapper.java @@ -1,10 +1,12 @@ package com.cool.store.mapper; +import com.cool.store.dto.calendar.UserFreeBusyInfoDTO; import com.cool.store.dto.message.RemindInterviewMsgDTO; import com.cool.store.dto.partner.AdvanceLineDTO; import com.cool.store.dto.partner.PartnerInterviewInfoDTO; import com.cool.store.dto.partner.SpecialDateRangeInterviewCountDTO; import com.cool.store.entity.HyInterviewRemindDO; +import com.cool.store.entity.HyPartnerInterviewBookSituation; import com.cool.store.entity.HyPartnerInterviewPlanDO; import com.cool.store.request.GetInterviewListReq; import com.cool.store.vo.EnterpriseUserBaseInfoVO; @@ -185,4 +187,13 @@ public interface HyPartnerInterviewPlanMapper { * @return */ List remindInterviewStartMinutes(); + + /** + * 获取招商经理各时段预约情况 + * @param interviewerId 招商经理 id + * @param startTimeStr 开始时间点 + * @param endTimeStr 结束时间点 + * @return + */ + List getInterviewBookSituation(@Param("interviewerId") String interviewerId, @Param("startTime") String startTimeStr, @Param("endTime") String endTimeStr); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml index b6d12c7bf..4a1314474 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml @@ -569,4 +569,32 @@ AND t1.update_time <= NOW() + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewBookSituation.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewBookSituation.java new file mode 100644 index 000000000..be5dbe355 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewBookSituation.java @@ -0,0 +1,33 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author Fun Li 2023/11/7 17:06 + * @version 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class HyPartnerInterviewBookSituation { + + @ApiModelProperty("预约人数") + private Integer bookingCount; + + @ApiModelProperty("预约的面试开始时间") + private String startTime; + + @ApiModelProperty("预约的面试结束时间") + private String endTime; + + @ApiModelProperty("是否已被预定") + private Boolean booked; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/GetFreeBusyListReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/GetFreeBusyListReq.java index 1e82f2859..83f97bbaf 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/GetFreeBusyListReq.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/GetFreeBusyListReq.java @@ -22,4 +22,6 @@ public class GetFreeBusyListReq { private String partnerId; @ApiModelProperty("面试官ID(B端使用,如果该字段传了,就查询该面试官的日程忙闲信息,否则查询加盟商对应的面试官的信息)") private String interviewerId; + @ApiModelProperty("是否是PC端请求") + private Boolean whetherPC; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java index 745d7f49e..5b30268b9 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java @@ -17,6 +17,12 @@ public class FreeBusyInfo { @ApiModelProperty("是否空闲") private boolean isFree; + @ApiModelProperty("预约人数") + private Integer appointmentCount; + + @ApiModelProperty("是否被预约") + private Boolean booked; + public FreeBusyInfo(String startTime, String endTime, boolean isFree) { this.startTime = startTime; this.endTime = endTime; @@ -29,6 +35,14 @@ public class FreeBusyInfo { this.isFree = isFree; } + public FreeBusyInfo(String startTime, String endTime, boolean isFree, Integer appointmentCount, Boolean booked) { + this.startTime = startTime; + this.endTime = endTime; + this.isFree = isFree; + this.appointmentCount = appointmentCount; + this.booked = booked; + } + public String getStartTime() { return startTime; } @@ -52,4 +66,20 @@ public class FreeBusyInfo { public void setFree(boolean free) { isFree = free; } + + public Integer getAppointmentCount() { + return appointmentCount; + } + + public void setAppointmentCount(Integer appointmentCount) { + this.appointmentCount = appointmentCount; + } + + public Boolean getBooked() { + return booked; + } + + public void setBooked(Boolean booked) { + this.booked = booked; + } } \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/FeiShuService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/FeiShuService.java index b2822345b..3a48f6320 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/FeiShuService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/FeiShuService.java @@ -14,6 +14,11 @@ import javax.annotation.Resource; * @Description: */ public interface FeiShuService { + + /** + * @deprecated {@link com.cool.store.service.InterviewService#getFreeBusyList} + */ + @Deprecated GetFreeBusyListVO getFreeBusyList(GetFreeBusyListReq request) throws ApiException; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java index 819c12804..df727c1ec 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java @@ -5,6 +5,7 @@ import com.cool.store.exception.ApiException; import com.cool.store.request.*; import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.interview.CreateAppointmentVO; +import com.cool.store.vo.interview.GetFreeBusyListVO; import com.cool.store.vo.interview.InterviewVO; import java.util.List; @@ -71,4 +72,10 @@ public interface InterviewService { public String generateFeiShuInterviewMsg(String partnerName, String partnerMobile, String interviewTime); + /** + * 获取预约时间段的预约信息 + * @param request {@link GetFreeBusyListReq} + * @return {@link GetFreeBusyListVO} + */ + GetFreeBusyListVO getFreeBusyList(GetFreeBusyListReq request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FeiShuServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FeiShuServiceImpl.java index 032923666..454ef06c3 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FeiShuServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FeiShuServiceImpl.java @@ -42,6 +42,14 @@ public class FeiShuServiceImpl implements FeiShuService { @Autowired private InterviewService interviewService; + /** + * + * @param request + * @return + * @throws ApiException + * @deprecated {@link com.cool.store.service.impl.InterviewServiceImpl#getFreeBusyList} + */ + @Deprecated @Override public GetFreeBusyListVO getFreeBusyList(GetFreeBusyListReq request) throws ApiException { GetFreeBusyListVO freeBusyListVO = new GetFreeBusyListVO(); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java index 27c1e4a93..ca8e40f8a 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java @@ -5,8 +5,6 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.cool.store.context.CurrentUserHolder; import com.cool.store.context.LoginUserInfo; import com.cool.store.context.PartnerUserHolder; @@ -15,7 +13,6 @@ import com.cool.store.dao.HyIntendDevMappingDAO; import com.cool.store.dao.HyInterviewDAO; import com.cool.store.dto.calendar.*; import com.cool.store.dto.log.*; -import com.cool.store.dto.message.SendCardMessageDTO; import com.cool.store.dto.partner.EnterInterviewDto; import com.cool.store.entity.*; import com.cool.store.enums.*; @@ -32,8 +29,7 @@ import com.cool.store.utils.TRTCUtils; import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.EnterpriseUserBaseInfoVO; import com.cool.store.vo.PartnerUserInfoVO; -import com.cool.store.vo.interview.CreateAppointmentVO; -import com.cool.store.vo.interview.InterviewVO; +import com.cool.store.vo.interview.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -692,4 +688,86 @@ public class InterviewServiceImpl implements InterviewService { hyPartnerInterviewPlanMapper.updateByPrimaryKeySelective(hyPartnerInterviewPlanDO); } + @Override + public GetFreeBusyListVO getFreeBusyList(GetFreeBusyListReq request) { + //1. 处理数据 + //1.1 传参整理 + GetFreeBusyListVO freeBusyListVO = new GetFreeBusyListVO(); + String startDate = request.getStartDate();//开始日期 + String endDate = request.getEndDate();//结束日期 + String partnerId = request.getPartnerId();//加盟商用户ID + String interviewerId = null;//面试官ID + String lineId = request.getLineId();//线索id + //如果加盟商用户ID为空且面试官ID为空,返回错误信息 + if (!(StringUtils.isNotEmpty(partnerId) && StringUtils.isNotEmpty(lineId)) && StringUtils.isEmpty(interviewerId)) { + throw new ServiceException(ErrorCodeEnum.INTERVIEW_AND_PARTNER_ID_IS_NULL); + } + //如果加盟商用户ID不为空且面试官ID为空 + if (StringUtils.isNotEmpty(partnerId) && StringUtils.isNotEmpty(lineId)) { + interviewerId = getInterviewerByPartner(partnerId, lineId); + } + //1.2 时间转换 + DateTime startDateTime = null; + DateTime endDateTime = null; + if (!StringUtils.isEmpty(startDate)&&!StringUtils.isEmpty(endDate)) { + startDateTime = DateUtil.beginOfDay(DateUtil.parse(startDate)); + endDateTime = DateUtil.endOfDay(DateUtil.parse(endDate)); + } + //1.3 校验时间 + if (startDateTime.isAfter(endDateTime)) { + throw new ServiceException(ErrorCodeEnum.DATE_PARAMS_IS_ERROR); + } + + //2. 查询招商经理各个已被预约时间段(成功或未成功)的预约情况 + //2.1 PC 端和小程序查询的开始和结束时间不同 + String startTimeSuffix = " 10:00:00"; + String endTimeSuffix = " 17:00:00"; + if (request.getWhetherPC()) { + startTimeSuffix = " 00:00:00"; + endTimeSuffix = " 23:59:59"; + } + String startTimeStr = DateUtil.format(startDateTime, "yyyy-MM-dd") + startTimeSuffix; + String endTimeStr = DateUtil.format(endDateTime, "yyyy-MM-dd") + endTimeSuffix; + List bookSituations = hyPartnerInterviewPlanMapper.getInterviewBookSituation(interviewerId, startTimeStr, endTimeStr); + + //3. 把数据装到各个时间槽里 + //3.1 创建时间槽 + // PC 端创建 8:00-24:00 的时间槽 + // 小程序端创建 10:00-17:00 的时间槽并且不包含中午 12:00-13:00 + List daySlots; + if (request.getWhetherPC().equals(Boolean.TRUE)) { + daySlots = TimeSlotGenerator.generateDaySlotsForPc(startTimeStr, endTimeStr); + } else { + daySlots = TimeSlotGenerator.generateDaySlots(startTimeStr, endTimeStr); + } + freeBusyListVO.setCalendarList(daySlots); + + //3.2 如果查询结果为空,则直接返回全部时间段都是空闲的 + if (org.springframework.util.CollectionUtils.isEmpty(bookSituations)) { + return freeBusyListVO; + } + + //3.3 装到槽里并返回 + //3.3.1 外层循环每一天 + for (CalendarInfo daySlot : daySlots) { + //3.3.2 内存循环每一天的每个时间段 + List freeBusyList = daySlot.getFreeBusyList(); + for (FreeBusyInfo freeBusyInfo : freeBusyList) { + //把日期和时间拼接成yyyy-MM-dd HH:mm格式 + String startStr = daySlot.getDateStr() + " " + freeBusyInfo.getStartTime(); + String endStr = daySlot.getDateStr() + " " + freeBusyInfo.getEndTime(); + for (HyPartnerInterviewBookSituation bookSituation : bookSituations) { + //比较两个时间段是否有重叠,重叠的就 set 数据进去 + if (startStr.compareTo(bookSituation.getStartTime()) >= 0 && endStr.compareTo(bookSituation.getEndTime()) <= 0) { + freeBusyInfo.setFree(Boolean.FALSE); + freeBusyInfo.setBooked(Boolean.TRUE); + freeBusyInfo.setAppointmentCount(bookSituation.getBookingCount()); + break; + } + } + } + } + return freeBusyListVO; + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java index b6caf8823..833537af6 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java @@ -52,6 +52,36 @@ public class TimeSlotGenerator { return daySlots; } + public static List generateDaySlotsForPc(String startDate, String endDate) { + List daySlots = new ArrayList<>(); + + Date start = DateUtil.parse(startDate); + Date end = DateUtil.parse(endDate); + + Calendar startCal = DateUtil.calendar(start); + Calendar endCal = DateUtil.calendar(end); + + while (!startCal.after(endCal)) { + int year = startCal.get(Calendar.YEAR); + int month = startCal.get(Calendar.MONTH) + 1; + int day = startCal.get(Calendar.DAY_OF_MONTH); + int dayOfWeek = startCal.get(Calendar.DAY_OF_WEEK); + + List hourSlots = generateHalfHourSlotsForPC(); + CalendarInfo daySlot = new CalendarInfo(transDayOfWeek(dayOfWeek), + String.valueOf(year), + StringUtil.addZeroForNum(String.valueOf(month),2), + StringUtil.addZeroForNum(String.valueOf(day),2), + DateUtil.format(startCal.getTime(), "yyyy-MM-dd"), + hourSlots); + daySlots.add(daySlot); + + startCal.add(Calendar.DATE, 1); + } + + return daySlots; + } + private static List generateHourSlots() { List hourSlots = new ArrayList<>(); @@ -83,7 +113,27 @@ public class TimeSlotGenerator { String startTime2 = String.format("%02d:30", hour); String endTime2 = String.format("%02d:00", hour + 1); //默认空闲 - FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true); + FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true, 0, false); + hourSlots.add(hourSlot2); + } + return hourSlots; + } + + private static List generateHalfHourSlotsForPC() { + List hourSlots = new ArrayList<>(); + + //循环打印半小时的时间段 + for (int hour = 8; hour < 24; hour++) { + String startTime = String.format("%02d:00", hour); + String endTime = String.format("%02d:30", hour); + //默认空闲 + FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true); + hourSlots.add(hourSlot); + + String startTime2 = String.format("%02d:30", hour); + String endTime2 = String.format("%02d:00", hour + 1); + //默认空闲,预约人数为 0 + FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true, 0, false); hourSlots.add(hourSlot2); } return hourSlots; diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/FeiShuController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/FeiShuController.java index 399ac1f5c..ced7dedd2 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/FeiShuController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/FeiShuController.java @@ -17,16 +17,22 @@ import org.springframework.web.bind.annotation.RestController; * @Author: young.yu * @Date: 2023-06-16 13:06 * @Description: + * @deprecated {@link com.cool.store.controller.InterviewController} */ @Api(tags = "飞书相关接口") @RestController @RequestMapping({"/feishu"}) +@Deprecated public class FeiShuController { + /** + * @deprecated {@link com.cool.store.controller.InterviewController#getFreeBusyList(GetFreeBusyListReq)} + */ @Autowired private FeiShuService feiShuService; @PostMapping("/interviewer/freebusy/list") @ApiOperation("查询日程忙闲信息") + @Deprecated public ResponseResult getFreeBusyList(@RequestBody GetFreeBusyListReq request) throws ApiException { GetFreeBusyListVO getFreeBusyListVO= feiShuService.getFreeBusyList(request); return ResponseResult.success(getFreeBusyListVO); diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java index b89b78d3f..52e2d093f 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java @@ -4,8 +4,10 @@ import com.cool.store.dto.partner.EnterInterviewDto; import com.cool.store.exception.ApiException; import com.cool.store.request.*; import com.cool.store.response.ResponseResult; +import com.cool.store.service.FeiShuService; import com.cool.store.service.InterviewService; import com.cool.store.vo.EnterInterviewVO; +import com.cool.store.vo.interview.GetFreeBusyListVO; import com.cool.store.vo.interview.InterviewVO; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @@ -54,6 +56,13 @@ public class InterviewController { return ResponseResult.success(); } + @PostMapping("/interviewer/freebusy/list") + @ApiOperation("查询各预约时间段情况") + public ResponseResult getFreeBusyList(@RequestBody GetFreeBusyListReq request) throws ApiException { + GetFreeBusyListVO getFreeBusyListVO= interviewService.getFreeBusyList(request); + return ResponseResult.success(getFreeBusyListVO); + } + @PostMapping("/modifyInterviewTime") @ApiOperation("修改面试时间") public ResponseResult modifyInterviewTime(@RequestBody ModifyInterviewTimeReq request) throws ApiException { From 790846c5d892bfbb2452845cf8e7d069ca26d9e2 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Wed, 8 Nov 2023 14:27:57 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=90=84=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E6=97=B6=E9=97=B4=E6=AE=B5=E9=A2=84=E7=BA=A6=E6=83=85?= =?UTF-8?q?=E5=86=B5bug-fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/vo/interview/FreeBusyInfo.java | 17 ++++++------ .../service/impl/InterviewServiceImpl.java | 2 +- .../store/service/impl/TimeSlotGenerator.java | 26 +++++++++---------- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java index 5b30268b9..5df3e5098 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java @@ -15,7 +15,7 @@ public class FreeBusyInfo { private String endTime; @ApiModelProperty("是否空闲") - private boolean isFree; + private boolean free; @ApiModelProperty("预约人数") private Integer appointmentCount; @@ -23,22 +23,21 @@ public class FreeBusyInfo { @ApiModelProperty("是否被预约") private Boolean booked; - public FreeBusyInfo(String startTime, String endTime, boolean isFree) { + public FreeBusyInfo(String startTime, String endTime, boolean free) { this.startTime = startTime; this.endTime = endTime; - this.isFree = isFree; + this.free = free; } public FreeBusyInfo(String startTime, String endTime) { this.startTime = startTime; this.endTime = endTime; - this.isFree = isFree; } - public FreeBusyInfo(String startTime, String endTime, boolean isFree, Integer appointmentCount, Boolean booked) { + public FreeBusyInfo(String startTime, String endTime, boolean free, Integer appointmentCount, Boolean booked) { this.startTime = startTime; this.endTime = endTime; - this.isFree = isFree; + this.free = free; this.appointmentCount = appointmentCount; this.booked = booked; } @@ -59,12 +58,12 @@ public class FreeBusyInfo { this.endTime = endTime; } - public boolean isFree() { - return isFree; + public boolean getFree() { + return free; } public void setFree(boolean free) { - isFree = free; + this.free = free; } public Integer getAppointmentCount() { diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java index ca8e40f8a..3cf1fb57f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java @@ -722,7 +722,7 @@ public class InterviewServiceImpl implements InterviewService { //2.1 PC 端和小程序查询的开始和结束时间不同 String startTimeSuffix = " 10:00:00"; String endTimeSuffix = " 17:00:00"; - if (request.getWhetherPC()) { + if (Boolean.TRUE.equals(request.getWhetherPC())) { startTimeSuffix = " 00:00:00"; endTimeSuffix = " 23:59:59"; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java index 833537af6..b6fa26f70 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java @@ -86,10 +86,10 @@ public class TimeSlotGenerator { List hourSlots = new ArrayList<>(); for (int hour = 10; hour < 17; hour++) { - String startTime = String.format("%02d:00", hour); - String endTime = String.format("%02d:00", hour + 1); + String startTime = String.format("%02d:00:00", hour); + String endTime = String.format("%02d:00:00", hour + 1); //默认空闲 - FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true); + FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false); hourSlots.add(hourSlot); } @@ -104,14 +104,14 @@ public class TimeSlotGenerator { if(hour == 12){ continue; } - String startTime = String.format("%02d:00", hour); - String endTime = String.format("%02d:30", hour); + String startTime = String.format("%02d:00:00", hour); + String endTime = String.format("%02d:30:00", hour); //默认空闲 - FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true); + FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false); hourSlots.add(hourSlot); - String startTime2 = String.format("%02d:30", hour); - String endTime2 = String.format("%02d:00", hour + 1); + String startTime2 = String.format("%02d:30:00", hour); + String endTime2 = String.format("%02d:00:00", hour + 1); //默认空闲 FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true, 0, false); hourSlots.add(hourSlot2); @@ -124,14 +124,14 @@ public class TimeSlotGenerator { //循环打印半小时的时间段 for (int hour = 8; hour < 24; hour++) { - String startTime = String.format("%02d:00", hour); - String endTime = String.format("%02d:30", hour); + String startTime = String.format("%02d:00:00", hour); + String endTime = String.format("%02d:30:00", hour); //默认空闲 - FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true); + FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false); hourSlots.add(hourSlot); - String startTime2 = String.format("%02d:30", hour); - String endTime2 = String.format("%02d:00", hour + 1); + String startTime2 = String.format("%02d:30:00", hour); + String endTime2 = String.format("%02d:00:00", hour + 1); //默认空闲,预约人数为 0 FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true, 0, false); hourSlots.add(hourSlot2); From f1c458a280b7aed3ca846703bce527f9bd56fff6 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Wed, 8 Nov 2023 17:13:02 +0800 Subject: [PATCH 03/14] =?UTF-8?q?=E6=8B=9B=E5=95=86=E7=BB=8F=E7=90=86?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E9=A2=84=E7=BA=A6=E9=9D=A2=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/OperateTypeEnum.java | 1 + .../store/request/CreateAppointmentReq.java | 2 +- .../vo/interview/CreateAppointmentVO.java | 7 ++ .../cool/store/service/InterviewService.java | 6 ++ .../service/impl/InterviewServiceImpl.java | 78 ++++++++++++++++++- .../store/controller/InterviewController.java | 9 ++- 6 files changed, 100 insertions(+), 3 deletions(-) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java index b5f46e902..83b02d491 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java @@ -21,6 +21,7 @@ public enum OperateTypeEnum { CLOSE_FOLLOW("close_follow", "结束跟进", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, REJECT_PUBLIC_REASON, REJECT_REAL_REASON, CERTIFY_FILE)), TRANSFER_INVESTMENT_MANAGER("transfer_investment_manager", "转让招商经理", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_INVESTMENT_MANAGER_USERNAME, BEFORE_INVESTMENT_MANAGER_MOBILE, AFTER_INVESTMENT_MANAGER_USERNAME, AFTER_INVESTMENT_MANAGER_MOBILE)), INTERVIEW_APPOINTMENT("interview_appointment", "预约面试时间", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)), + INTERVIEWER_BOOK_INTERVIEW("interviewer_book_interview", "招商经理主动预约面试时间", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)), MODIFY_INTERVIEW_TIME("modify_interview_time", "修改面试时间", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_INTERVIEW_TIME, AFTER_INTERVIEW_TIME)), ENTRUST_OTHERS("entrust_others", "委托他人", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, BEFORE_INTERVIEWR_NAME, AFTER_INTERVIEWR_NAME, BEFORE_INTERVIEWR_MOBILE, AFTER_INTERVIEWR_MOBILE)), diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/CreateAppointmentReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/CreateAppointmentReq.java index 8b07dd714..a9c238c42 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/CreateAppointmentReq.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/CreateAppointmentReq.java @@ -7,7 +7,7 @@ import io.swagger.annotations.ApiModelProperty; public class CreateAppointmentReq { @ApiModelProperty(value = "加盟商用户ID", required = true) private String partnerId; - @ApiModelProperty(value = "面试官id") + @ApiModelProperty(value = "面试官id,PC 端招商经理主动预约可以不传") private String interviewerId; @ApiModelProperty(value = "预约开始时间 (YYYY-MM-DD hh:mm:ss)", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CreateAppointmentVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CreateAppointmentVO.java index 0042e04b4..0d4e28f9a 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CreateAppointmentVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CreateAppointmentVO.java @@ -13,6 +13,13 @@ public class CreateAppointmentVO { @ApiModelProperty("面试安排id") private String interviewPlanId; + public CreateAppointmentVO() { + } + + public CreateAppointmentVO(String interviewPlanId) { + this.interviewPlanId = interviewPlanId; + } + public String getInterviewPlanId() { return interviewPlanId; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java index df727c1ec..d4c76f3c0 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java @@ -78,4 +78,10 @@ public interface InterviewService { * @return {@link GetFreeBusyListVO} */ GetFreeBusyListVO getFreeBusyList(GetFreeBusyListReq request); + + /** + * 招商经理主动预约面试 + * @param request {@link com.cool.store.request.CreateAppointmentReq} + */ + CreateAppointmentVO bookInterview(CreateAppointmentReq request) throws ApiException; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java index 3cf1fb57f..fcc7e2650 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java @@ -79,7 +79,6 @@ public class InterviewServiceImpl implements InterviewService { @Autowired private EnterpriseUserService enterpriseUserService; - // @Autowired // private SmsService smsService; @@ -770,4 +769,81 @@ public class InterviewServiceImpl implements InterviewService { return freeBusyListVO; } + @Transactional + @Override + public CreateAppointmentVO bookInterview(CreateAppointmentReq request) throws ApiException { + if(request.getPartnerLineId() == null || request.getPartnerLineId()<=0){ + throw new ApiException(ErrorCodeEnum.INTERVIEW_LINE_ID_IS_NULL); + } + //如果开始时间小于当前时间需要报错 + if(DateUtil.date().isAfter(DateUtil.parse(request.getStartBookingTime()))){ + throw new ApiException(ErrorCodeEnum.CREATE_APPOINTMENT_TIME_ERROR); + } + HyPartnerInterviewPlanDO hyPartnerInterviewPlanDO = new HyPartnerInterviewPlanDO(); + hyPartnerInterviewPlanDO.setPartnerLineId(request.getPartnerLineId()); + hyPartnerInterviewPlanDO.setDeleted(false); + List hyPartnerInterviewPlanDOS = hyPartnerInterviewPlanMapper.selectBySelective(hyPartnerInterviewPlanDO); + if(CollectionUtils.isNotEmpty(hyPartnerInterviewPlanDOS)&&hyPartnerInterviewPlanDOS.get(0).getId()!=null){ + throw new ApiException(ErrorCodeEnum.INTERVIEW_PLAN_ALREADY_EXIST); + } + String interviewrId = request.getInterviewerId(); + if(StringUtils.isEmpty(interviewrId)){ + interviewrId = getInterviewerByPartner(request.getPartnerId(),String.valueOf(request.getPartnerLineId())); + } + //1.创建面试计划 + Date now = new Date(); + HyPartnerInterviewPlanDO interviewPlanDO = new HyPartnerInterviewPlanDO(); + String startBookingTime = request.getStartBookingTime(); + String startDate = startBookingTime.substring(0, 10); + interviewPlanDO.setInterviewDate(Convert.toDate(startDate)); + interviewPlanDO.setCreateTime(now); + interviewPlanDO.setUpdateTime(now); + interviewPlanDO.setStartTime(Convert.toDate(request.getStartBookingTime())); + interviewPlanDO.setEndTime(Convert.toDate(request.getEndBookingTime())); + interviewPlanDO.setPartnerId(request.getPartnerId()); + interviewPlanDO.setPartnerLineId(request.getPartnerLineId()); + interviewPlanDO.setInterviewer(interviewrId); + interviewPlanDO.setIsPartnerInterview(0); + interviewPlanDO.setApplicationApproved(1); + //1.2 生成房间号 + interviewPlanDO.setRoomId(StringUtil.generateRoomId(startBookingTime)); + interviewPlanDO.setRoomStatus(RoomStatus.WAIT_FOR_OPEN.getCode()); + hyPartnerInterviewPlanMapper.insertSelective(interviewPlanDO); + + //2.创建面试信息 + HyPartnerInterviewDO hyPartnerInterviewDO = new HyPartnerInterviewDO(); + hyPartnerInterviewDO.setInterviewPlanId(interviewPlanDO.getId()); + hyPartnerInterviewDO.setStatus(Integer.parseInt(WorkflowStatusEnum.INTERVIEW_2.getCode())); + hyPartnerInterviewDO.setPartnerLineId(request.getPartnerLineId()); + hyPartnerInterviewDO.setPartnerId(request.getPartnerId()); + hyPartnerInterviewDO.setInterviewer(interviewrId); + hyPartnerInterviewDO.setCreateTime(now); + hyPartnerInterviewDO.setUpdateTime(now); + hyPartnerInterviewDO.setDeleted(false); + HyPartnerLineInfoDO hyPartnerLineDO = new HyPartnerLineInfoDO(); + hyPartnerInterviewDO.setUpdateTime(now); + hyPartnerInterviewMapper.insertSelective(hyPartnerInterviewDO); + + //3. 修改线索流程状态 + hyPartnerLineDO.setId(request.getPartnerLineId()); + hyPartnerLineDO.setUpdateTime(now); + hyPartnerLineDO.setWorkflowStage(WorkflowStageEnum.INTERVIEW.getCode()); + hyPartnerLineDO.setWorkflowStatus(WorkflowStatusEnum.INTERVIEW_2.getCode()); + hyPartnerLineInfoMapper.updateByPrimaryKeySelective(hyPartnerLineDO); + + //4. 异步发送短信给加盟商 + HyPartnerBaseInfoDO partnerBaseInfo = hyPartnerBaseInfoMapper.getByPartnerLineId(request.getPartnerLineId()); + if(partnerBaseInfo == null){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_PARTNER_NOT_EXIST); + } + eventCenterHttpRequest.sendSmsVariable(partnerBaseInfo.getMobile(), SMSMsgEnum.INTERVIEW_APPOINTMENT_PASS, DateUtil.format(DateUtil.parseDateTime(request.getStartBookingTime()), DatePattern.NORM_DATETIME_MINUTE_PATTERN), wechatMiniAppService.getMiniAppUrl()); + + //5. 记录日志 + PartnerUserInfoVO operator = PartnerUserHolder.getUser(); + LogBasicDTO log = LogBasicDTO.builder().mobile(operator.getMobile()).operateUserId(operator.getPartnerId()).operateUsername(operator.getUsername()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC)).mobile(operator.getMobile()).build(); + logService.recordPartnerBizLog(operator, request.getPartnerLineId(), OperateTypeEnum.INTERVIEWER_BOOK_INTERVIEW,log); + + return new CreateAppointmentVO(interviewPlanDO.getId().toString()); + } + } diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java index 52e2d093f..793299e75 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java @@ -7,6 +7,7 @@ import com.cool.store.response.ResponseResult; import com.cool.store.service.FeiShuService; import com.cool.store.service.InterviewService; import com.cool.store.vo.EnterInterviewVO; +import com.cool.store.vo.interview.CreateAppointmentVO; import com.cool.store.vo.interview.GetFreeBusyListVO; import com.cool.store.vo.interview.InterviewVO; import com.github.pagehelper.PageHelper; @@ -56,13 +57,19 @@ public class InterviewController { return ResponseResult.success(); } - @PostMapping("/interviewer/freebusy/list") + @PostMapping("/freebusy/list") @ApiOperation("查询各预约时间段情况") public ResponseResult getFreeBusyList(@RequestBody GetFreeBusyListReq request) throws ApiException { GetFreeBusyListVO getFreeBusyListVO= interviewService.getFreeBusyList(request); return ResponseResult.success(getFreeBusyListVO); } + @PostMapping("/appointment/booking") + @ApiOperation("招商经理主动预约面试") + public ResponseResult bookInterview(@RequestBody CreateAppointmentReq request) throws ApiException { + return ResponseResult.success(interviewService.bookInterview(request)); + } + @PostMapping("/modifyInterviewTime") @ApiOperation("修改面试时间") public ResponseResult modifyInterviewTime(@RequestBody ModifyInterviewTimeReq request) throws ApiException { From e0577b1ddca877c6f8e3e0e2d536ebb0c4ac0733 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Wed, 8 Nov 2023 17:49:21 +0800 Subject: [PATCH 04/14] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=A2=84=E7=BA=A6?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=AE=B5=E9=A2=84=E7=BA=A6=E6=83=85=E5=86=B5?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=97=B6=E9=97=B4=E6=A0=BC=E5=BC=8F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9&=E6=9F=A5=E8=AF=A2SQL=E9=94=99=E8=AF=AF=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/HyPartnerInterviewPlanMapper.xml | 35 +++++++++---------- .../service/impl/InterviewServiceImpl.java | 5 +-- .../store/service/impl/TimeSlotGenerator.java | 20 +++++------ 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml index 4a1314474..efe48dc7e 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml @@ -572,27 +572,26 @@ diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java index fcc7e2650..61face107 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java @@ -753,14 +753,15 @@ public class InterviewServiceImpl implements InterviewService { List freeBusyList = daySlot.getFreeBusyList(); for (FreeBusyInfo freeBusyInfo : freeBusyList) { //把日期和时间拼接成yyyy-MM-dd HH:mm格式 - String startStr = daySlot.getDateStr() + " " + freeBusyInfo.getStartTime(); - String endStr = daySlot.getDateStr() + " " + freeBusyInfo.getEndTime(); + String startStr = daySlot.getDateStr() + " " + freeBusyInfo.getStartTime() + ":00"; + String endStr = daySlot.getDateStr() + " " + freeBusyInfo.getEndTime() + ":00"; for (HyPartnerInterviewBookSituation bookSituation : bookSituations) { //比较两个时间段是否有重叠,重叠的就 set 数据进去 if (startStr.compareTo(bookSituation.getStartTime()) >= 0 && endStr.compareTo(bookSituation.getEndTime()) <= 0) { freeBusyInfo.setFree(Boolean.FALSE); freeBusyInfo.setBooked(Boolean.TRUE); freeBusyInfo.setAppointmentCount(bookSituation.getBookingCount()); + bookSituations.remove(bookSituation); break; } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java index b6fa26f70..a6c028562 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java @@ -86,8 +86,8 @@ public class TimeSlotGenerator { List hourSlots = new ArrayList<>(); for (int hour = 10; hour < 17; hour++) { - String startTime = String.format("%02d:00:00", hour); - String endTime = String.format("%02d:00:00", hour + 1); + String startTime = String.format("%02d:00", hour); + String endTime = String.format("%02d:00", hour + 1); //默认空闲 FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false); hourSlots.add(hourSlot); @@ -104,14 +104,14 @@ public class TimeSlotGenerator { if(hour == 12){ continue; } - String startTime = String.format("%02d:00:00", hour); - String endTime = String.format("%02d:30:00", hour); + String startTime = String.format("%02d:00", hour); + String endTime = String.format("%02d:30", hour); //默认空闲 FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false); hourSlots.add(hourSlot); - String startTime2 = String.format("%02d:30:00", hour); - String endTime2 = String.format("%02d:00:00", hour + 1); + String startTime2 = String.format("%02d:30", hour); + String endTime2 = String.format("%02d:00", hour + 1); //默认空闲 FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true, 0, false); hourSlots.add(hourSlot2); @@ -124,14 +124,14 @@ public class TimeSlotGenerator { //循环打印半小时的时间段 for (int hour = 8; hour < 24; hour++) { - String startTime = String.format("%02d:00:00", hour); - String endTime = String.format("%02d:30:00", hour); + String startTime = String.format("%02d:00", hour); + String endTime = String.format("%02d:30", hour); //默认空闲 FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false); hourSlots.add(hourSlot); - String startTime2 = String.format("%02d:30:00", hour); - String endTime2 = String.format("%02d:00:00", hour + 1); + String startTime2 = String.format("%02d:30", hour); + String endTime2 = String.format("%02d:00", hour + 1); //默认空闲,预约人数为 0 FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true, 0, false); hourSlots.add(hourSlot2); From bc986590e968a141ed6cf52db097656ae2d5f5de Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Thu, 9 Nov 2023 10:15:21 +0800 Subject: [PATCH 05/14] =?UTF-8?q?=E4=B8=BB=E5=8A=A8=E9=A2=84=E7=BA=A6?= =?UTF-8?q?=E9=9D=A2=E8=AF=95=E8=8E=B7=E5=8F=96tips=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E4=B8=BA=E7=A9=BAfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/service/impl/CommonServiceImpl.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonServiceImpl.java index e1eb3a19a..a0268e0ce 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonServiceImpl.java @@ -57,13 +57,21 @@ public class CommonServiceImpl implements CommonService { Long partnerLineId = hyPartnerLineInfoDO.getId(); if ((workflowStage.equals(WorkflowStageEnum.RESERVATION.getCode()) && workflowStatus.equals(WorkflowStatusEnum.RESERVATION_1.getCode()))|| (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_2.getCode()))) { - return getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "提交面试预约时间"); + String interviewAppointmentTips = getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "提交面试预约时间"); + if (StringUtils.isEmpty(interviewAppointmentTips)) { + interviewAppointmentTips = getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEWER_BOOK_INTERVIEW, "提交面试预约时间"); + } + return interviewAppointmentTips; } else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_3.getCode())) { String tips = getInterviewTips(partnerLineId, OperateTypeEnum.MODIFY_INTERVIEW_TIME, ""); if (StringUtils.isNotEmpty(tips)) { return tips + ("修改面试预约时间"); } else { - return getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "提交面试预约时间"); + String interviewAppointmentTips = getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "提交面试预约时间"); + if (StringUtils.isEmpty(interviewAppointmentTips)) { + interviewAppointmentTips = getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEWER_BOOK_INTERVIEW, "提交面试预约时间"); + } + return interviewAppointmentTips; } } else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_4.getCode())) { return getInterviewTips(partnerLineId, OperateTypeEnum.FINISH_INTERVIEW, "结束面试"); From 80f0f5b6d2394042c7a3369bd083a3fee58a4a90 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Thu, 9 Nov 2023 14:43:56 +0800 Subject: [PATCH 06/14] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E9=9D=A2=E8=AF=95=E5=BE=85=E5=AE=A1=E6=A0=B8=E7=9A=84?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=E5=BA=94=E6=97=B6=E6=AE=B5=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E6=83=85=E5=86=B5=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/HyPartnerInterviewPlanMapper.xml | 4 ++-- .../HyPartnerInterviewBookSituation.java | 7 +++++++ .../cool/store/vo/PartnerInterviewInfoVO.java | 7 +++++++ .../HyPartnerInterviewPlanServiceImpl.java | 21 +++++++++++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml index efe48dc7e..7a762c2d7 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml @@ -570,10 +570,10 @@ + select + from super_admin_config where + id = #{id,jdbcType=BIGINT} + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/test/resources/mybatis-generator.xml b/coolstore-partner-dao/src/test/resources/mybatis-generator.xml index 880e6e523..9c65c42b8 100644 --- a/coolstore-partner-dao/src/test/resources/mybatis-generator.xml +++ b/coolstore-partner-dao/src/test/resources/mybatis-generator.xml @@ -29,7 +29,7 @@ -
diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SuperAdminConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SuperAdminConfigDO.java new file mode 100644 index 000000000..aed084113 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SuperAdminConfigDO.java @@ -0,0 +1,43 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author zhangchenbiao + * @date 2023-11-09 02:24 + */ +@Table(name = "super_admin_config") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SuperAdminConfigDO implements Serializable { + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("超管用户ID") + private String superAdminUserId; + + @ApiModelProperty("删除标志 0-正常 1-删除") + private Integer deleted; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("新建人ID") + private String createUserId; + + @ApiModelProperty("更新人ID") + private String updateUserId; +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserService.java index 8d5d0addf..42f600de8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserService.java @@ -33,6 +33,7 @@ public interface EnterpriseUserService { + List getDevelopmentDirectorList(String wantShopArea); /** diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java index fc2781e21..422ef86f6 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java @@ -98,6 +98,8 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { HyFollowTaskDAO hyFollowTaskDAO; @Resource private HyPartnerIntentInfoDAO hyPartnerIntentInfoDAO; + @Resource + SuperAdminConfigDAO superAdminConfigDAO; @Autowired private WechatMiniAppService wechatMiniAppService; @@ -633,8 +635,16 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { public PageInfo privateSeaLineList(String userId, PrivateSeaLineListRequest request,Boolean allPrivateSeaFlag) { //allPrivateSeaFlag 为true的时候 查询全量私海 UserPositionAndUserScopeDTO userIdsByScope = new UserPositionAndUserScopeDTO(); - if (!allPrivateSeaFlag){ - userIdsByScope = enterpriseUserService.getUserIdsByScope(userId); + //如果是查询团队线索 判断是否是超管 不是超管 判断是是否是主管 + if (allPrivateSeaFlag){ + //如果不是超管 查询个人数据或者主管数据 如果是超管 查询所有数据 + if (!isSuperAdmin(userId)){ + userIdsByScope = enterpriseUserService.getUserIdsByScope(userId); + } + }else { + //如果是查询我的线索 只需要查询招商经理或者开发经理是我的线索 + userIdsByScope.setDevelopmentUserIds(Arrays.asList(userId)); + userIdsByScope.setInvestmentUserIds(Arrays.asList(userId)); } String intentAreaName = getIntentAreaName(request.getIntentAreaId()); PageHelper.startPage(request.getPageNum(),request.getPageSize()); @@ -671,6 +681,15 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { return privateLineList; } + private Boolean isSuperAdmin(String userId){ + SuperAdminConfigDO superAdmin = superAdminConfigDAO.isSuperAdmin(userId); + if (superAdmin!=null){ + return Boolean.TRUE; + } + return Boolean.FALSE; + } + + @Override public PartnerLineBaseInfoVO getPartnerLinBaseInfo(String partnerId) { PartnerLineBaseInfoVO lineBaseInfoVO = new PartnerLineBaseInfoVO(); From 2053b62d7629fe0b2e78ab39f5cc1d96982dbd3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Thu, 9 Nov 2023 15:08:27 +0800 Subject: [PATCH 08/14] =?UTF-8?q?=E7=A7=81=E6=B5=B7=E5=88=97=E8=A1=A8=20?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9=20=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/service/impl/HyPartnerLineInfoServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java index 422ef86f6..b1b6459e5 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java @@ -634,6 +634,7 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { @Override public PageInfo privateSeaLineList(String userId, PrivateSeaLineListRequest request,Boolean allPrivateSeaFlag) { //allPrivateSeaFlag 为true的时候 查询全量私海 + // V1.5.2 修改allPrivateSeaFlag 为False 查询我的线索 为true时根据是否是超管或者主管查询数据 UserPositionAndUserScopeDTO userIdsByScope = new UserPositionAndUserScopeDTO(); //如果是查询团队线索 判断是否是超管 不是超管 判断是是否是主管 if (allPrivateSeaFlag){ From ff86296106b1060cbb5ffed1c016a45bd98fbd59 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Thu, 9 Nov 2023 16:19:02 +0800 Subject: [PATCH 09/14] =?UTF-8?q?=E9=A2=84=E7=BA=A6=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=E6=98=AF=E5=90=A6=E6=9C=AC?= =?UTF-8?q?=E4=BA=BA=E9=A2=84=E7=BA=A6=E6=97=B6=E6=AE=B5=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HyPartnerInterviewBookSituation.java | 2 +- .../cool/store/vo/PartnerInterviewInfoVO.java | 2 +- .../cool/store/vo/interview/CalendarInfo.java | 2 +- .../cool/store/vo/interview/FreeBusyInfo.java | 26 ++++++++++++++++++- .../service/impl/InterviewServiceImpl.java | 17 ++++++++++-- .../store/service/impl/TimeSlotGenerator.java | 10 +++---- 6 files changed, 48 insertions(+), 11 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewBookSituation.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewBookSituation.java index bbf51f499..265390466 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewBookSituation.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerInterviewBookSituation.java @@ -27,7 +27,7 @@ public class HyPartnerInterviewBookSituation { @ApiModelProperty("预约的面试结束时间") private String endTime; - @ApiModelProperty("是否已被预定") + @ApiModelProperty("是否已被预定成功") private Boolean booked; @ApiModelProperty("预约成功人的 partnerId") diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerInterviewInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerInterviewInfoVO.java index 856558ca8..f8f810187 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerInterviewInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerInterviewInfoVO.java @@ -85,7 +85,7 @@ public class PartnerInterviewInfoVO { @ApiModelProperty("来源名称") private String userChannelName; - @ApiModelProperty("是否已被预约") + @ApiModelProperty("是否已被预约成功") private Boolean booked; @ApiModelProperty("该时间段面试预约人数") diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CalendarInfo.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CalendarInfo.java index 925107d5a..59ac84d88 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CalendarInfo.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CalendarInfo.java @@ -27,7 +27,7 @@ public class CalendarInfo { @ApiModelProperty("日期字符串") private String dateStr; - @ApiModelProperty("飞书日程忙闲清单") + @ApiModelProperty("忙闲清单") private List freeBusyList; public CalendarInfo(Integer dayOfWeek, String year, String month, String day, String dateStr, List freeBusyList) { diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java index 5df3e5098..b5e307e93 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/FreeBusyInfo.java @@ -20,9 +20,12 @@ public class FreeBusyInfo { @ApiModelProperty("预约人数") private Integer appointmentCount; - @ApiModelProperty("是否被预约") + @ApiModelProperty("是否被成功预约") private Boolean booked; + @ApiModelProperty("是否是自己预约的时间段") + private Boolean selfBooked; + public FreeBusyInfo(String startTime, String endTime, boolean free) { this.startTime = startTime; this.endTime = endTime; @@ -42,6 +45,15 @@ public class FreeBusyInfo { this.booked = booked; } + public FreeBusyInfo(String startTime, String endTime, boolean free, Integer appointmentCount, Boolean booked, Boolean selfBooked) { + this.startTime = startTime; + this.endTime = endTime; + this.free = free; + this.appointmentCount = appointmentCount; + this.booked = booked; + this.selfBooked = selfBooked; + } + public String getStartTime() { return startTime; } @@ -81,4 +93,16 @@ public class FreeBusyInfo { public void setBooked(Boolean booked) { this.booked = booked; } + + public boolean isFree() { + return free; + } + + public Boolean getSelfBooked() { + return selfBooked; + } + + public void setSelfBooked(Boolean selfBooked) { + this.selfBooked = selfBooked; + } } \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java index 61face107..44a90e5d5 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java @@ -39,6 +39,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -728,6 +729,17 @@ public class InterviewServiceImpl implements InterviewService { String startTimeStr = DateUtil.format(startDateTime, "yyyy-MM-dd") + startTimeSuffix; String endTimeStr = DateUtil.format(endDateTime, "yyyy-MM-dd") + endTimeSuffix; List bookSituations = hyPartnerInterviewPlanMapper.getInterviewBookSituation(interviewerId, startTimeStr, endTimeStr); + //2.2 查询该线索已有的面试预约开始时间 + HyPartnerInterviewPlanDO interviewPlanDO = new HyPartnerInterviewPlanDO(); + interviewPlanDO.setPartnerId(request.getPartnerId()); + interviewPlanDO.setDeleted(false); + List hyPartnerInterviewPlanDOS = hyPartnerInterviewPlanMapper.selectBySelective(interviewPlanDO); + String partnerAppointStartTime = ""; + if (CollectionUtils.isNotEmpty(hyPartnerInterviewPlanDOS)) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + interviewPlanDO = hyPartnerInterviewPlanDOS.get(0); + partnerAppointStartTime = dateFormat.format(interviewPlanDO.getStartTime()); + } //3. 把数据装到各个时间槽里 //3.1 创建时间槽 @@ -758,8 +770,9 @@ public class InterviewServiceImpl implements InterviewService { for (HyPartnerInterviewBookSituation bookSituation : bookSituations) { //比较两个时间段是否有重叠,重叠的就 set 数据进去 if (startStr.compareTo(bookSituation.getStartTime()) >= 0 && endStr.compareTo(bookSituation.getEndTime()) <= 0) { - freeBusyInfo.setFree(Boolean.FALSE); - freeBusyInfo.setBooked(Boolean.TRUE); + freeBusyInfo.setBooked(bookSituation.getBooked()); + freeBusyInfo.setSelfBooked(partnerAppointStartTime.equals(bookSituation.getStartTime())); + freeBusyInfo.setFree(!bookSituation.getBooked()); freeBusyInfo.setAppointmentCount(bookSituation.getBookingCount()); bookSituations.remove(bookSituation); break; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java index a6c028562..1d4cab7f4 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TimeSlotGenerator.java @@ -89,7 +89,7 @@ public class TimeSlotGenerator { String startTime = String.format("%02d:00", hour); String endTime = String.format("%02d:00", hour + 1); //默认空闲 - FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false); + FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false, false); hourSlots.add(hourSlot); } @@ -107,13 +107,13 @@ public class TimeSlotGenerator { String startTime = String.format("%02d:00", hour); String endTime = String.format("%02d:30", hour); //默认空闲 - FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false); + FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false, false); hourSlots.add(hourSlot); String startTime2 = String.format("%02d:30", hour); String endTime2 = String.format("%02d:00", hour + 1); //默认空闲 - FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true, 0, false); + FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true, 0, false, false); hourSlots.add(hourSlot2); } return hourSlots; @@ -127,13 +127,13 @@ public class TimeSlotGenerator { String startTime = String.format("%02d:00", hour); String endTime = String.format("%02d:30", hour); //默认空闲 - FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false); + FreeBusyInfo hourSlot = new FreeBusyInfo(startTime, endTime, true, 0, false, false); hourSlots.add(hourSlot); String startTime2 = String.format("%02d:30", hour); String endTime2 = String.format("%02d:00", hour + 1); //默认空闲,预约人数为 0 - FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true, 0, false); + FreeBusyInfo hourSlot2 = new FreeBusyInfo(startTime2, endTime2, true, 0, false, false); hourSlots.add(hourSlot2); } return hourSlots; From 18bec32568a7361c7e12517f04463622205b9450 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Thu, 9 Nov 2023 17:03:30 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E9=9D=A2=E8=AF=95=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A2=84=E7=BA=A6=E6=83=85=E5=86=B5=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/vo/interview/InterviewVO.java | 9 ++++++++ .../service/impl/InterviewServiceImpl.java | 21 ++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/InterviewVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/InterviewVO.java index 6d70c7dff..a8d640fef 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/InterviewVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/InterviewVO.java @@ -127,4 +127,13 @@ public class InterviewVO { @ApiModelProperty("所属战区id") private String affiliationZone; + @ApiModelProperty("该时间段是否被预约成功") + private Boolean booked; + + @ApiModelProperty("该时间段面试预约人数") + private Integer appointmentCount; + + @ApiModelProperty("该时段是否是自己预约的(不一定代表预约成功)") + private Boolean selfBooked; + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java index 44a90e5d5..99fdb5b74 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java @@ -121,7 +121,7 @@ public class InterviewServiceImpl implements InterviewService { vo.setVideoList(split); vo.setProcessInfo(""); } - //查询面试官和记录人信息(面试官必须有) + //1. 查询面试官和记录人信息(面试官必须有) EnterpriseUserBaseInfoVO interviewerInfo = hyPartnerInterviewPlanMapper.getEnterpriseUserBaseInfo(vo.getInterviewerId()); vo.setInterviewerName(interviewerInfo.getName()); vo.setInterviewerMobile(interviewerInfo.getMobile()); @@ -132,10 +132,10 @@ public class InterviewServiceImpl implements InterviewService { vo.setRecorderMobile(recorderInfo.getMobile()); } } - //查询开发主管信息 + + //2. 查询开发主管信息 if (request.getNeedDevelopmentDirector() != null && request.getNeedDevelopmentDirector()) { //查询所属战区 - String wantShopArea = hyPartnerLineInfoMapper.getAffiliationZoneIdByInterviewPlanId(interviewPlanId); HyIntendDevelopementMappingDO hyIntendDevelopementMappingDO = hyIntendDevMappingDAO.selectByOpenAreaMappingId(Long.valueOf(wantShopArea), "dev"); if (hyIntendDevelopementMappingDO == null) { @@ -145,6 +145,21 @@ public class InterviewServiceImpl implements InterviewService { EnterpriseUserDO development = enterpriseUserService.getDevelopmentByZoneId(hyIntendDevelopementMappingDO.getMappingId()); vo.setDevelopmentDirector(development); } + + //3. 查询该时段预约情况 + //如果还未提交预约申请就没有预约情况,面试完成以后也必要查询了 + if (!vo.getStatus().equals(Integer.parseInt(WorkflowStatusEnum.INTERVIEW_2.getCode())) + && !vo.getStatus().equals(Integer.parseInt(WorkflowStatusEnum.INTERVIEW_3.getCode())) + && !vo.getStatus().equals(Integer.parseInt(WorkflowStatusEnum.RESERVATION_1.getCode()))) { + return vo; + } + List bookSituations = hyPartnerInterviewPlanMapper.getInterviewBookSituation(vo.getInterviewerId(), vo.getStartTime(), vo.getEndTime()); + if (CollectionUtils.isNotEmpty(bookSituations)) { + HyPartnerInterviewBookSituation bookSituation = bookSituations.get(0); + vo.setBooked(bookSituation.getBooked()); + vo.setSelfBooked(Boolean.TRUE); + vo.setAppointmentCount(bookSituation.getBookingCount()); + } return vo; } From b8a159fb588623c25c57113a539e349ff64501ea Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Thu, 9 Nov 2023 17:17:03 +0800 Subject: [PATCH 11/14] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=8E=89=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E9=9D=A2=E8=AF=95=E9=A2=84=E7=BA=A6=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=9A=84=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/cool/store/job/JobHandler.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/job/JobHandler.java b/coolstore-partner-service/src/main/java/com/cool/store/job/JobHandler.java index 1cadde5b7..15fc747d3 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/job/JobHandler.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/job/JobHandler.java @@ -47,8 +47,9 @@ public class JobHandler { @XxlJob("updateInterviewOverTime") public void updateInterviewOverTime(){ try { - log.info("面试超时预约定时任务开始"); - hyPartnerInterviewPlanService.updateInterviewOverTime(); + log.info("面试超时预约定时任务已取消,请勿再执行"); + XxlJobHelper.log("面试超时预约定时任务已取消,请勿再执行"); +// hyPartnerInterviewPlanService.updateInterviewOverTime(); log.info("面试超时预约定时任务结束"); XxlJobHelper.handleSuccess(); }catch (Exception e){ From 0e623604e4a4ca6fb6f7bdaf074112047ad0649f Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Thu, 9 Nov 2023 17:43:11 +0800 Subject: [PATCH 12/14] =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=AF=B9=E9=A3=9E?= =?UTF-8?q?=E4=B9=A6=E6=97=A5=E7=A8=8B=E7=9A=84=E4=BB=BB=E4=BD=95=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=EF=BC=88=E9=99=A4=E5=B7=A5=E4=BD=9C=E5=8F=B0=E6=97=A5?= =?UTF-8?q?=E5=8E=86=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/http/ISVHttpRequest.java | 10 ++ .../service/impl/InterviewServiceImpl.java | 149 +++++++++--------- .../workflow/InterviewWorkFlowService.java | 17 +- 3 files changed, 93 insertions(+), 83 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java index 92ab1ae8c..200ef5364 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java @@ -233,8 +233,10 @@ public class ISVHttpRequest { * @param userId * @param startTime 开始时间 毫秒时间戳 * @param endTime 截止时间 毫秒时间戳 + * @deprecated 1.5.2 后取消飞书日程的任何使用 * @return */ + @Deprecated public List getFreeBusyList(String userId, long startTime, long endTime) throws ApiException{ String url = isvDomain + "/user/getFreeBusyList"; HashMap requestMap = new HashMap(); @@ -259,8 +261,10 @@ public class ISVHttpRequest { * 创建飞书日程 * @param param * @return + * @deprecated 1.5.2 后取消操作飞书日程 * @throws ApiException */ + @Deprecated public UserCalendarsEventDTO createUserCalendarEvent(CreateCalendarEventDTO param) throws ApiException{ String url = isvDomain + "/user/createUserCalendarEvent"; ResultDTO responseEntity = null; @@ -281,8 +285,10 @@ public class ISVHttpRequest { * 更新飞书日程 * @param param * @return + * @deprecated 1.5.2 后取消操作飞书日程 * @throws ApiException */ + @Deprecated public UserCalendarsEventDTO updateUserCalendarEvent(UpdateCalendarEventDTO param) throws ApiException{ String url = isvDomain + "/user/updateUserCalendarEvent"; ResultDTO responseEntity = null; @@ -303,8 +309,10 @@ public class ISVHttpRequest { * 取消飞书日程 * @param param * @return + * @deprecated 1.5.2 后取消操作飞书日程 * @throws ApiException */ + @Deprecated public UserCalendarsEventDTO deleteUserCalendarEvent(DeleteCalendarEventDTO param) throws ApiException { String url = isvDomain + "/user/deleteUserCalendarEvent"; ResultDTO responseEntity = null; @@ -352,7 +360,9 @@ public class ISVHttpRequest { /** * 发送飞书卡片消息 * @param param + * @deprecated {@link EventCenterHttpRequest#sendFeiShuNotice(FeiShuNoticeMsgEnum, List, Object...)} */ + @Deprecated @Async public void sendFeiShuCardMessage(SendCardMessageDTO param) throws ApiException{ if(CollectionUtils.isEmpty(param.getUserIds()) || StringUtils.isAnyBlank(param.getTitle(), param.getContent(), param.getMessageUrl()) || Objects.isNull(param.getMessageType())){ diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java index 99fdb5b74..11784851c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java @@ -198,35 +198,36 @@ public class InterviewServiceImpl implements InterviewService { // throw new ApiException(ErrorCodeEnum.FEISHU_DELETE_SCHEDULE_ERROR); // } + //1.5.2 后不再使用飞书日程 //有可能还未同意面试预约,这时候没有建立日程,只需要修改面试官 //1.4 优化多次转让,线索转让次数 >= 1 无需添加日程,只转让线索的招商经理及面试官 - Integer transferTimes = hyPartnerLineInfoMapper.getTransferTimes(request.getPartnerLineId()); - if (interviewInfo.getFeishuCalendarId() != null && interviewInfo.getFeishuScheduleId() != null - && transferTimes < 1) { - //V1.3 需求变更为将新面试官拉入原面试官日程,而非删除和新增日程 - //1. 原面试官面试日程信息 - String oldInterviewerId = CurrentUserHolder.getUserId(); - UpdateCalendarEventDTO updateCalendarEventDTO = new UpdateCalendarEventDTO(); - updateCalendarEventDTO.setUserId(oldInterviewerId); - updateCalendarEventDTO.setCalendarId(interviewInfo.getFeishuCalendarId()); - updateCalendarEventDTO.setEventId(interviewInfo.getFeishuScheduleId()); - updateCalendarEventDTO.setStartTime(DateUtil.parse(interviewInfo.getStartTime()).getTime()); - updateCalendarEventDTO.setEndTime(DateUtil.parse(interviewInfo.getEndTime()).getTime()); - updateCalendarEventDTO.setSummary(generateInterviewTitle(request.getPartnerLineId())); - - //2. 邀请新面试官加入日程 - List list = new ArrayList(); - list.add(request.getNewInterviewerId()); - //当前招商经理不是面试官,但是日程在招商经理这里 - if (!oldInterviewerId.equals(list.get(0))) { - list.add(oldInterviewerId); - } - updateCalendarEventDTO.setJoinUserIds(list); - UserCalendarsEventDTO userCalendarsEventDTO = isvHttpRequest.updateUserCalendarEvent(updateCalendarEventDTO); - if(userCalendarsEventDTO == null ){ - throw new ApiException(ErrorCodeEnum.FEISHU_UPDATE_SCHEDULE_ERROR); - } - } +// Integer transferTimes = hyPartnerLineInfoMapper.getTransferTimes(request.getPartnerLineId()); +// if (interviewInfo.getFeishuCalendarId() != null && interviewInfo.getFeishuScheduleId() != null +// && transferTimes < 1) { +// //V1.3 需求变更为将新面试官拉入原面试官日程,而非删除和新增日程 +// //1. 原面试官面试日程信息 +// String oldInterviewerId = CurrentUserHolder.getUserId(); +// UpdateCalendarEventDTO updateCalendarEventDTO = new UpdateCalendarEventDTO(); +// updateCalendarEventDTO.setUserId(oldInterviewerId); +// updateCalendarEventDTO.setCalendarId(interviewInfo.getFeishuCalendarId()); +// updateCalendarEventDTO.setEventId(interviewInfo.getFeishuScheduleId()); +// updateCalendarEventDTO.setStartTime(DateUtil.parse(interviewInfo.getStartTime()).getTime()); +// updateCalendarEventDTO.setEndTime(DateUtil.parse(interviewInfo.getEndTime()).getTime()); +// updateCalendarEventDTO.setSummary(generateInterviewTitle(request.getPartnerLineId())); +// +// //2. 邀请新面试官加入日程 +// List list = new ArrayList(); +// list.add(request.getNewInterviewerId()); +// //当前招商经理不是面试官,但是日程在招商经理这里 +// if (!oldInterviewerId.equals(list.get(0))) { +// list.add(oldInterviewerId); +// } +// updateCalendarEventDTO.setJoinUserIds(list); +// UserCalendarsEventDTO userCalendarsEventDTO = isvHttpRequest.updateUserCalendarEvent(updateCalendarEventDTO); +// if(userCalendarsEventDTO == null ){ +// throw new ApiException(ErrorCodeEnum.FEISHU_UPDATE_SCHEDULE_ERROR); +// } +// } // 3.面试信息计划变更 HyPartnerInterviewPlanDO record = new HyPartnerInterviewPlanDO(); @@ -277,38 +278,39 @@ public class InterviewServiceImpl implements InterviewService { throw new ApiException(ErrorCodeEnum.ROOM_STATUS_ERROR); } HyPartnerInterviewPlanDO record = new HyPartnerInterviewPlanDO(); - //被委托或者因转让导致的面试官变更的线索不操作日程 - Integer transferTimes = hyPartnerLineInfoMapper.getTransferTimes(interviewInfo.getPartnerLineId()); - if(transferTimes==0&&StringUtils.isNotEmpty(interviewInfo.getFeishuCalendarId())&&StringUtils.isNotEmpty(interviewInfo.getFeishuScheduleId())) { - //1.原面试官日程删除 - DeleteCalendarEventDTO deleteCalendarEventDTO = new DeleteCalendarEventDTO(); - deleteCalendarEventDTO.setCalendarId(interviewInfo.getFeishuCalendarId()); - deleteCalendarEventDTO.setEventId(interviewInfo.getFeishuScheduleId()); - deleteCalendarEventDTO.setUserId(interviewInfo.getInterviewerId()); - UserCalendarsEventDTO userCalendarsEventDTO = isvHttpRequest.deleteUserCalendarEvent(deleteCalendarEventDTO); - if (userCalendarsEventDTO == null) { - throw new ApiException(ErrorCodeEnum.FEISHU_DELETE_SCHEDULE_ERROR); - } - //2.新面试官日程新增 - CreateCalendarEventDTO createCalendarEventDTO = new CreateCalendarEventDTO(); - createCalendarEventDTO.setStartTime(DateUtil.parse(request.getNewStartBookingTime()).getTime()); - createCalendarEventDTO.setEndTime(DateUtil.parse(request.getNewEndBookingTime()).getTime()); - createCalendarEventDTO.setUserId(interviewInfo.getInterviewerId()); - List list = Arrays.asList(interviewInfo.getInterviewerId()); - //可能当前招商经理不是面试官,但是日程在招商经理这里 - String userId = CurrentUserHolder.getUserId(); - if (!userId.equals(list.get(0))) { - list.add(userId); - } - createCalendarEventDTO.setJoinUserIds(list); - createCalendarEventDTO.setSummary(generateInterviewTitle(interviewInfo.getPartnerLineId())); - UserCalendarsEventDTO userCalendarEvent = isvHttpRequest.createUserCalendarEvent(createCalendarEventDTO); - if (userCalendarEvent == null) { - throw new ApiException(ErrorCodeEnum.CREATE_CALENDAR_EVENT_FAIL); - } - record.setFeishuCalendarId(userCalendarEvent.getCalendarId()); - record.setFeishuScheduleId(userCalendarEvent.getEventId()); - } + //1.5.2 后不再使用飞书日程 +// //被委托或者因转让导致的面试官变更的线索不操作日程 +// Integer transferTimes = hyPartnerLineInfoMapper.getTransferTimes(interviewInfo.getPartnerLineId()); +// if(transferTimes==0&&StringUtils.isNotEmpty(interviewInfo.getFeishuCalendarId())&&StringUtils.isNotEmpty(interviewInfo.getFeishuScheduleId())) { +// //1.原面试官日程删除 +// DeleteCalendarEventDTO deleteCalendarEventDTO = new DeleteCalendarEventDTO(); +// deleteCalendarEventDTO.setCalendarId(interviewInfo.getFeishuCalendarId()); +// deleteCalendarEventDTO.setEventId(interviewInfo.getFeishuScheduleId()); +// deleteCalendarEventDTO.setUserId(interviewInfo.getInterviewerId()); +// UserCalendarsEventDTO userCalendarsEventDTO = isvHttpRequest.deleteUserCalendarEvent(deleteCalendarEventDTO); +// if (userCalendarsEventDTO == null) { +// throw new ApiException(ErrorCodeEnum.FEISHU_DELETE_SCHEDULE_ERROR); +// } +// //2.新面试官日程新增 +// CreateCalendarEventDTO createCalendarEventDTO = new CreateCalendarEventDTO(); +// createCalendarEventDTO.setStartTime(DateUtil.parse(request.getNewStartBookingTime()).getTime()); +// createCalendarEventDTO.setEndTime(DateUtil.parse(request.getNewEndBookingTime()).getTime()); +// createCalendarEventDTO.setUserId(interviewInfo.getInterviewerId()); +// List list = Arrays.asList(interviewInfo.getInterviewerId()); +// //可能当前招商经理不是面试官,但是日程在招商经理这里 +// String userId = CurrentUserHolder.getUserId(); +// if (!userId.equals(list.get(0))) { +// list.add(userId); +// } +// createCalendarEventDTO.setJoinUserIds(list); +// createCalendarEventDTO.setSummary(generateInterviewTitle(interviewInfo.getPartnerLineId())); +// UserCalendarsEventDTO userCalendarEvent = isvHttpRequest.createUserCalendarEvent(createCalendarEventDTO); +// if (userCalendarEvent == null) { +// throw new ApiException(ErrorCodeEnum.CREATE_CALENDAR_EVENT_FAIL); +// } +// record.setFeishuCalendarId(userCalendarEvent.getCalendarId()); +// record.setFeishuScheduleId(userCalendarEvent.getEventId()); +// } record.setId(Long.valueOf(request.getInterviewPlanId())); record.setStartTime(Convert.toDate(request.getNewStartBookingTime())); @@ -541,26 +543,23 @@ public class InterviewServiceImpl implements InterviewService { throw new ServiceException(ErrorCodeEnum.INTERVIEW_PARTNER_NOT_EXIST); } - List userFreeBusyInfoList = isvHttpRequest.getFreeBusyList(request.getInterviewerId(), DateUtil.parse(interviewVO.getStartTime()).getTime(), DateUtil.parse(interviewVO.getEndTime()).getTime()); - if (CollectionUtils.isNotEmpty(userFreeBusyInfoList)) { - throw new ServiceException(ErrorCodeEnum.INTERVIEW_INTERVIEW_TIME_IS_UNUSABLE,partnerBaseInfo.getUsername(),partnerBaseInfo.getMobile()); - } + //创建日程信息 - CreateCalendarEventDTO createCalendarEventDTO = new CreateCalendarEventDTO(); - createCalendarEventDTO.setStartTime(DateUtil.parse(interviewVO.getStartTime()).getTime()); - createCalendarEventDTO.setEndTime(DateUtil.parse(interviewVO.getEndTime()).getTime()); - createCalendarEventDTO.setUserId(request.getInterviewerId()); - createCalendarEventDTO.setJoinUserIds(Arrays.asList(request.getInterviewerId())); - createCalendarEventDTO.setSummary(generateInterviewTitle(request.getPartnerLineId())); - UserCalendarsEventDTO userCalendarEvent = isvHttpRequest.createUserCalendarEvent(createCalendarEventDTO); - if (userCalendarEvent == null || StringUtil.isEmpty(userCalendarEvent.getEventId())) { - throw new ServiceException(ErrorCodeEnum.CREATE_CALENDAR_EVENT_FAIL); - } +// CreateCalendarEventDTO createCalendarEventDTO = new CreateCalendarEventDTO(); +// createCalendarEventDTO.setStartTime(DateUtil.parse(interviewVO.getStartTime()).getTime()); +// createCalendarEventDTO.setEndTime(DateUtil.parse(interviewVO.getEndTime()).getTime()); +// createCalendarEventDTO.setUserId(request.getInterviewerId()); +// createCalendarEventDTO.setJoinUserIds(Arrays.asList(request.getInterviewerId())); +// createCalendarEventDTO.setSummary(generateInterviewTitle(request.getPartnerLineId())); +// UserCalendarsEventDTO userCalendarEvent = isvHttpRequest.createUserCalendarEvent(createCalendarEventDTO); +// if (userCalendarEvent == null || StringUtil.isEmpty(userCalendarEvent.getEventId())) { +// throw new ServiceException(ErrorCodeEnum.CREATE_CALENDAR_EVENT_FAIL); +// } //更新面试计划信息 HyPartnerInterviewPlanDO record = new HyPartnerInterviewPlanDO(); record.setId(Long.valueOf(request.getInterviewPlanId())); - record.setFeishuCalendarId(userCalendarEvent.getCalendarId()); - record.setFeishuScheduleId(userCalendarEvent.getEventId()); +// record.setFeishuCalendarId(userCalendarEvent.getCalendarId()); +// record.setFeishuScheduleId(userCalendarEvent.getEventId()); record.setApplicationApproved(1); //如果同意的时候已经超过预约的时间前 5 分钟,直接进入面试已开始阶段 DateTime interviewStartTime = DateUtil.offsetMinute(DateUtil.parseDateTime(interviewVO.getStartTime()), -5); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/InterviewWorkFlowService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/InterviewWorkFlowService.java index aad9d5d9a..29d8edd8c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/InterviewWorkFlowService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/workflow/InterviewWorkFlowService.java @@ -88,15 +88,16 @@ public class InterviewWorkFlowService extends WorkFlowBaseService { && StringUtils.isNotEmpty(interviewInfo.getFeishuCalendarId()) && StringUtils.isNotEmpty(interviewInfo.getFeishuScheduleId()) && interviewInfo.getInterviewerId().equals(operator.getUserId())){ + //1.5.2 后不再使用飞书日程 // 原面试官日程删除 - DeleteCalendarEventDTO deleteCalendarEventDTO = new DeleteCalendarEventDTO(); - deleteCalendarEventDTO.setCalendarId(interviewInfo.getFeishuCalendarId()); - deleteCalendarEventDTO.setEventId(interviewInfo.getFeishuScheduleId()); - deleteCalendarEventDTO.setUserId(interviewInfo.getInterviewerId()); - UserCalendarsEventDTO userCalendarsEventDTO = isvHttpRequest.deleteUserCalendarEvent(deleteCalendarEventDTO); - if(userCalendarsEventDTO == null ){ - throw new ApiException(ErrorCodeEnum.FEISHU_DELETE_SCHEDULE_ERROR); - } +// DeleteCalendarEventDTO deleteCalendarEventDTO = new DeleteCalendarEventDTO(); +// deleteCalendarEventDTO.setCalendarId(interviewInfo.getFeishuCalendarId()); +// deleteCalendarEventDTO.setEventId(interviewInfo.getFeishuScheduleId()); +// deleteCalendarEventDTO.setUserId(interviewInfo.getInterviewerId()); +// UserCalendarsEventDTO userCalendarsEventDTO = isvHttpRequest.deleteUserCalendarEvent(deleteCalendarEventDTO); +// if(userCalendarsEventDTO == null ){ +// throw new ApiException(ErrorCodeEnum.FEISHU_DELETE_SCHEDULE_ERROR); +// } } else if (Integer.parseInt(WorkflowStatusEnum.INTERVIEW_6.getCode()) == interviewBaseInfo.getStatus()) { //删除稽核信息 HyInspectionDO rawHyInspection = inspectionMapper.selectByInterviewPlanId(interviewBaseInfo.getInterviewPlanId()); From 081c0944b274d44915203a7a9415a4590abcae94 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Fri, 10 Nov 2023 11:03:08 +0800 Subject: [PATCH 13/14] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E5=BE=85?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=A2=84=E7=BA=A6=E9=9D=A2=E8=AF=95=E4=BA=BA?= =?UTF-8?q?=E6=95=B0=E4=B8=8D=E5=86=8D-1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/HyPartnerInterviewPlanServiceImpl.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java index 804fe3185..53a1ac7db 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java @@ -174,10 +174,8 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan if (CommonConstants.PENDING.equals(type)) { //设置对应时间段的被预约情况 HyPartnerInterviewBookSituation bookSituation = orderSituationMap.getOrDefault(partnerInterviewInfoVO.getStartTime().replace("/", "-"), new HyPartnerInterviewBookSituation(0, Boolean.FALSE)); - Integer appointmentCount = bookSituation.getBookingCount(); - //预约人数需要减去自己 - appointmentCount = appointmentCount == 0 ? appointmentCount : appointmentCount - 1; - partnerInterviewInfoVO.setAppointmentCount(appointmentCount); + //预约人数 + partnerInterviewInfoVO.setAppointmentCount(bookSituation.getBookingCount()); //是否被预约 partnerInterviewInfoVO.setBooked(bookSituation.getBooked()); } From fcd0b44f34b973556515079a206485b378fc25cc Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Fri, 10 Nov 2023 16:08:02 +0800 Subject: [PATCH 14/14] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=AB=AF?= =?UTF-8?q?=E9=A2=84=E7=BA=A6=E6=97=B6=E9=97=B4=E5=88=97=E8=A1=A8=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/request/GetFreeBusyListReq.java | 8 ++++---- .../store/service/PartnerInterviewService.java | 9 ++++++++- .../impl/PartnerInterviewServiceImpl.java | 18 ++++++++++++++++++ .../store/controller/FeiShuController.java | 6 ++++++ .../store/controller/InterviewController.java | 9 +++++++++ 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/GetFreeBusyListReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/GetFreeBusyListReq.java index 83f97bbaf..d64656c6e 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/GetFreeBusyListReq.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/GetFreeBusyListReq.java @@ -16,12 +16,12 @@ public class GetFreeBusyListReq { private String startDate; @ApiModelProperty(value = "结束时间",required = true) private String endDate; - @ApiModelProperty("线索id(C端使用)") + @ApiModelProperty(value = "线索id", required = true) private String lineId; - @ApiModelProperty("加盟商用户ID(C端使用,与面试官id两个字段中必传一个,该字段传值时,线索id必传)") + @ApiModelProperty(value = "加盟商用户ID", required = true) private String partnerId; - @ApiModelProperty("面试官ID(B端使用,如果该字段传了,就查询该面试官的日程忙闲信息,否则查询加盟商对应的面试官的信息)") + @ApiModelProperty(value = "面试官ID", required = false) private String interviewerId; - @ApiModelProperty("是否是PC端请求") + @ApiModelProperty(value = "是否是PC端请求", required = true) private Boolean whetherPC; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java index fc090431c..e196ecba5 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java @@ -3,10 +3,12 @@ package com.cool.store.service; import com.cool.store.dto.partner.EnterInterviewDto; import com.cool.store.dto.partner.LineQueryInterviewDto; import com.cool.store.exception.ApiException; +import com.cool.store.request.GetFreeBusyListReq; import com.cool.store.request.ModifyInterviewTimeReq; import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.PartnerInterviewInfoVO; import com.cool.store.vo.PartnerPassLetterDetailVO; +import com.cool.store.vo.interview.GetFreeBusyListVO; public interface PartnerInterviewService { @@ -39,5 +41,10 @@ public interface PartnerInterviewService { void modifyInterviewTime(ModifyInterviewTimeReq request) throws ApiException; - + /** + * 获取面试预约时间列表 + * @param request {@link GetFreeBusyListReq} + * @return {@link GetFreeBusyListVO} + */ + GetFreeBusyListVO getFreeBusyList(GetFreeBusyListReq request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java index 1d43cc19c..61c3e7f57 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java @@ -8,6 +8,7 @@ import com.cool.store.dao.HyInterviewDAO; import com.cool.store.dto.log.ModifyInterviewTimeDTO; import com.cool.store.dto.partner.EnterInterviewDto; import com.cool.store.dto.partner.LineQueryInterviewDto; +import com.cool.store.entity.HyPartnerInterviewBookSituation; import com.cool.store.entity.HyPartnerInterviewDO; import com.cool.store.entity.HyPartnerInterviewPlanDO; import com.cool.store.enums.ErrorCodeEnum; @@ -18,7 +19,9 @@ import com.cool.store.exception.ApiException; import com.cool.store.exception.ServiceException; import com.cool.store.mapper.HyPartnerInterviewMapper; import com.cool.store.mapper.HyPartnerInterviewPlanMapper; +import com.cool.store.request.GetFreeBusyListReq; import com.cool.store.request.ModifyInterviewTimeReq; +import com.cool.store.service.InterviewService; import com.cool.store.service.LogService; import com.cool.store.service.PartnerInterviewService; import com.cool.store.utils.CoolDateUtils; @@ -27,14 +30,21 @@ import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.PartnerInterviewInfoVO; import com.cool.store.vo.PartnerPassLetterDetailVO; import com.cool.store.vo.PartnerUserInfoVO; +import com.cool.store.vo.interview.CalendarInfo; +import com.cool.store.vo.interview.FreeBusyInfo; +import com.cool.store.vo.interview.GetFreeBusyListVO; import com.cool.store.vo.interview.InterviewVO; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; @Service @Slf4j @@ -49,6 +59,9 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService { @Autowired private HyInterviewDAO interviewDAO; + @Autowired + private InterviewService interviewService; + @Value("${trtc.sdkAppId}") private Long sdkAppId; @@ -204,4 +217,9 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService { logService.recordPartnerBizLog(operator,interviewInfo.getPartnerLineId(), OperateTypeEnum.MODIFY_INTERVIEW_TIME,log); } + @Override + public GetFreeBusyListVO getFreeBusyList(GetFreeBusyListReq request) { + return interviewService.getFreeBusyList(request); + } + } diff --git a/coolstore-partner-webc/src/main/java/com/cool/store/controller/FeiShuController.java b/coolstore-partner-webc/src/main/java/com/cool/store/controller/FeiShuController.java index 399ac1f5c..5184a8154 100644 --- a/coolstore-partner-webc/src/main/java/com/cool/store/controller/FeiShuController.java +++ b/coolstore-partner-webc/src/main/java/com/cool/store/controller/FeiShuController.java @@ -17,16 +17,22 @@ import org.springframework.web.bind.annotation.RestController; * @Author: young.yu * @Date: 2023-06-16 13:06 * @Description: + * @deprecated {@link InterviewController} */ @Api(tags = "飞书相关接口") @RestController @RequestMapping({"/feishu"}) +@Deprecated public class FeiShuController { + /** + * @deprecated {@link InterviewController#getFreeBusyList(GetFreeBusyListReq)} + */ @Autowired private FeiShuService feiShuService; @PostMapping("/interviewer/freebusy/list") @ApiOperation("查询日程忙闲信息") + @Deprecated public ResponseResult getFreeBusyList(@RequestBody GetFreeBusyListReq request) throws ApiException { GetFreeBusyListVO getFreeBusyListVO= feiShuService.getFreeBusyList(request); return ResponseResult.success(getFreeBusyListVO); diff --git a/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java b/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java index ad22ef790..1a9d45055 100644 --- a/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java +++ b/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java @@ -6,6 +6,7 @@ import com.cool.store.dto.partner.PartnerGetPassLetterDetailDto; import com.cool.store.dto.partner.PartnerQueryInterviewDto; import com.cool.store.exception.ApiException; import com.cool.store.request.CreateAppointmentReq; +import com.cool.store.request.GetFreeBusyListReq; import com.cool.store.request.ModifyInterviewTimeReq; import com.cool.store.response.ResponseResult; import com.cool.store.service.InterviewService; @@ -14,6 +15,7 @@ import com.cool.store.vo.EnterInterviewVO; import com.cool.store.vo.PartnerInterviewInfoVO; import com.cool.store.vo.PartnerPassLetterDetailVO; import com.cool.store.vo.interview.CreateAppointmentVO; +import com.cool.store.vo.interview.GetFreeBusyListVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +39,13 @@ public class InterviewController { // return ResponseResult.success(interviewService.queryByPartnerId(dto.getPartnerId())); // } + @PostMapping("/freebusy/list") + @ApiOperation("查询各预约时间段情况") + public ResponseResult getFreeBusyList(@RequestBody GetFreeBusyListReq request) throws ApiException { + GetFreeBusyListVO getFreeBusyListVO= interviewService.getFreeBusyList(request); + return ResponseResult.success(getFreeBusyListVO); + } + @PostMapping("/queryByPartnerLineId") @ApiOperation("根据线索id查询面试信息") public ResponseResult queryByPartnerLineId(@RequestBody LineQueryInterviewDto dto) throws ApiException {