|
|
@@ -77,6 +77,8 @@ public class StoreStaffConfigServiceImpl implements StoreStaffConfigService {
|
|
|
|
|
|
private final shop.alien.store.util.ai.AiVideoModerationUtil aiVideoModerationUtil;
|
|
|
|
|
|
+ private final BarPerformanceMapper barPerformanceMapper;
|
|
|
+
|
|
|
private final StoreStaffFitnessExperienceService storeStaffFitnessExperienceService;
|
|
|
|
|
|
/**
|
|
|
@@ -820,7 +822,131 @@ public class StoreStaffConfigServiceImpl implements StoreStaffConfigService {
|
|
|
.orderByDesc(StoreStaffConfig::getTopTime)
|
|
|
.orderByDesc(StoreStaffConfig::getCreatedTime);
|
|
|
|
|
|
- return storeStaffConfigMapper.selectPage(staffPage, queryWrapper);
|
|
|
+ IPage<StoreStaffConfig> result = storeStaffConfigMapper.selectPage(staffPage, queryWrapper);
|
|
|
+
|
|
|
+ // 填充今日是否有演出字段
|
|
|
+ if (result != null && result.getRecords() != null) {
|
|
|
+ for (StoreStaffConfig staff : result.getRecords()) {
|
|
|
+ Boolean hasPerformanceToday = checkHasPerformanceToday(staff.getId());
|
|
|
+ staff.setHasPerformanceToday(hasPerformanceToday);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断员工今日是否有演出
|
|
|
+ * <p>
|
|
|
+ * 根据演出表(bar_performance)查询该员工是否有今日的演出安排
|
|
|
+ * 判断条件:
|
|
|
+ * 1. 演出审核状态为通过(review_status = 1)
|
|
|
+ * 2. 演出未删除(delete_flag = 0)
|
|
|
+ * 3. 演出已上线(online_status = 1)
|
|
|
+ * 4. 演出时间包含今天:
|
|
|
+ * - 单次演出:开始时间 <= 今天结束 AND 结束时间 >= 今天开始
|
|
|
+ * - 每天定时:开始日期 <= 今天 <= 结束日期
|
|
|
+ * - 每周定时:开始日期 <= 今天 <= 结束日期 且 演出日期包含今天对应的星期几
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param staffId 员工ID
|
|
|
+ * @return true-今日有演出,false-今日无演出
|
|
|
+ */
|
|
|
+ private Boolean checkHasPerformanceToday(Integer staffId) {
|
|
|
+ if (staffId == null || staffId <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 获取今天的开始时间(00:00:00)和结束时间(23:59:59)
|
|
|
+ Date now = new Date();
|
|
|
+ java.util.Calendar cal = java.util.Calendar.getInstance();
|
|
|
+ cal.setTime(now);
|
|
|
+ cal.set(java.util.Calendar.HOUR_OF_DAY, 0);
|
|
|
+ cal.set(java.util.Calendar.MINUTE, 0);
|
|
|
+ cal.set(java.util.Calendar.SECOND, 0);
|
|
|
+ cal.set(java.util.Calendar.MILLISECOND, 0);
|
|
|
+ Date todayStart = cal.getTime();
|
|
|
+
|
|
|
+ // 获取今天是星期几(0-周一,1-周二,...,6-周日)
|
|
|
+ int dayOfWeek = cal.get(java.util.Calendar.DAY_OF_WEEK);
|
|
|
+
|
|
|
+ // 重新设置Calendar获取今天的结束时间
|
|
|
+ cal.set(java.util.Calendar.HOUR_OF_DAY, 23);
|
|
|
+ cal.set(java.util.Calendar.MINUTE, 59);
|
|
|
+ cal.set(java.util.Calendar.SECOND, 59);
|
|
|
+ cal.set(java.util.Calendar.MILLISECOND, 999);
|
|
|
+ Date todayEnd = cal.getTime();
|
|
|
+ // Calendar中:1=周日,2=周一,...,7=周六
|
|
|
+ // 转换为:0=周一,1=周二,...,6=周日
|
|
|
+ int todayWeekDay = (dayOfWeek == 1) ? 6 : (dayOfWeek - 2);
|
|
|
+ String todayWeekDayStr = String.valueOf(todayWeekDay);
|
|
|
+
|
|
|
+ // 查询包含该员工的演出
|
|
|
+ LambdaQueryWrapper<BarPerformance> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(BarPerformance::getDeleteFlag, CommonConstant.DELETE_FLAG_UNDELETE)
|
|
|
+ .eq(BarPerformance::getReviewStatus, 1)
|
|
|
+ .eq(BarPerformance::getOnlineStatus, 1)
|
|
|
+ .like(BarPerformance::getStaffConfigIds, staffId.toString());
|
|
|
+
|
|
|
+ List<BarPerformance> performances = barPerformanceMapper.selectList(queryWrapper);
|
|
|
+
|
|
|
+ if (performances == null || performances.isEmpty()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 遍历演出,判断是否有今日的演出
|
|
|
+ for (BarPerformance performance : performances) {
|
|
|
+ String frequency = performance.getPerformanceFrequency();
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(frequency)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean isToday = false;
|
|
|
+
|
|
|
+ switch (frequency) {
|
|
|
+ case "0": // 单次演出
|
|
|
+ Date singleStart = performance.getSingleStartDatetime();
|
|
|
+ Date singleEnd = performance.getSingleEndDatetime();
|
|
|
+ if (singleStart != null && singleEnd != null) {
|
|
|
+ // 判断:开始时间 <= 今天结束 AND 结束时间 >= 今天开始
|
|
|
+ isToday = !singleStart.after(todayEnd) && !singleEnd.before(todayStart);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "1": // 每天定时
|
|
|
+ Date dailyStart = performance.getDailyStartDate();
|
|
|
+ Date dailyEnd = performance.getDailyEndDate();
|
|
|
+ if (dailyStart != null && dailyEnd != null) {
|
|
|
+ // 判断:开始日期 <= 今天 <= 结束日期
|
|
|
+ isToday = !dailyStart.after(todayEnd) && !dailyEnd.before(todayStart);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "2": // 每周定时
|
|
|
+ Date weeklyStart = performance.getDailyStartDate();
|
|
|
+ Date weeklyEnd = performance.getDailyEndDate();
|
|
|
+ String performanceWeek = performance.getPerformanceWeek();
|
|
|
+ if (weeklyStart != null && weeklyEnd != null && StringUtils.isNotEmpty(performanceWeek)) {
|
|
|
+ // 判断:开始日期 <= 今天 <= 结束日期 且 演出日期包含今天对应的星期几
|
|
|
+ boolean dateInRange = !weeklyStart.after(todayEnd) && !weeklyEnd.before(todayStart);
|
|
|
+ boolean weekDayMatch = performanceWeek.contains(todayWeekDayStr);
|
|
|
+ isToday = dateInRange && weekDayMatch;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isToday) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("判断员工今日是否有演出异常,staffId={},异常信息:{}", staffId, e.getMessage(), e);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|