Explorar el Código

查询人员列表修改

zhangchen hace 3 meses
padre
commit
bc0577fafb

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreStaffConfig.java

@@ -152,4 +152,8 @@ public class StoreStaffConfig extends Model<StoreStaffConfig> {
     @ApiModelProperty(value = "点赞数量")
     @TableField("like_count")
     private Integer likeCount;
+
+    @ApiModelProperty(value = "今日是否有演出(true-有演出,false-无演出)")
+    @TableField(exist = false)
+    private Boolean hasPerformanceToday;
 }

+ 127 - 1
alien-store/src/main/java/shop/alien/store/service/impl/StoreStaffConfigServiceImpl.java

@@ -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