| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- package com.cyksj.service.sys.impl;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.util.RandomUtil;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.cyksj.common.constant.Constant;
- import com.cyksj.common.util.Jsons;
- import com.cyksj.mapper.SysConfigMapper;
- import com.cyksj.model.dto.DefaultShopConfig;
- import com.cyksj.model.dto.YhServiceDto;
- import com.cyksj.model.entity.ShopConfig;
- import com.cyksj.model.entity.SysConfig;
- import com.cyksj.service.sys.SysConfigService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import java.time.DayOfWeek;
- import java.time.LocalDateTime;
- import java.time.LocalTime;
- import java.util.List;
- import java.util.Map;
- import java.util.Optional;
- import java.util.stream.Collectors;
- /**
- * @author chan
- * @date 2022/10/20 10:07 AM
- */
- @Slf4j
- @Service
- public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper,SysConfig> implements SysConfigService {
- @Override
- public String getDefaultShopConfigByType(String type) {
- SysConfig shopConfig = this.getOne(Wrappers.lambdaQuery(SysConfig.class)
- .eq(SysConfig::getSysKey, Constant.SYS_DEFAULT_SHOP_KEY).last("limit 1"));
- if (shopConfig == null) {
- return getShopIdByType(type);
- }
- String sysValue = shopConfig.getSysValue();
- try {
- DefaultShopConfig defaultShopConfig = Jsons.parseObject(sysValue, DefaultShopConfig.class);
- String wxDefaultAppId = defaultShopConfig.getWxDefaultAppId();
- String zfbDefaultAppId = defaultShopConfig.getZfbDefaultAppId();
- if ("wx".equals(type)) {
- return Optional.ofNullable(wxDefaultAppId).orElse(ShopConfig.WX_DEFAULT_APP_ID);
- }
- return Optional.ofNullable(zfbDefaultAppId).orElse(ShopConfig.ZFB_DEFAULT_APP_ID);
- } catch (Exception e) {
- }
- return getShopIdByType(type);
- }
- public String getShopIdByType(String type) {
- if ("wx".equals(type)) {
- return ShopConfig.WX_DEFAULT_APP_ID;
- }
- return ShopConfig.ZFB_DEFAULT_APP_ID;
- }
- @Override
- public List<String> getDutyServices() {
- SysConfig sysConfig = this.getOne(Wrappers.lambdaQuery(SysConfig.class)
- .eq(SysConfig::getSysKey, Constant.serviceKeys.get(0))
- .last("limit 1"));
- // 用当前日期时间创建一个 LocalDateTime 对象
- LocalDateTime now = LocalDateTime.now();
- // 获取当前时间
- LocalTime currentTime = now.toLocalTime();
- if (sysConfig != null) {
- String sysValue = sysConfig.getSysValue();
- if (StrUtil.isNotEmpty(sysValue)) {
- try {
- List<YhServiceDto> yhServiceDtos = Jsons.parseList(sysValue, YhServiceDto.class);
- Map<String, List<YhServiceDto>> dutyServices = yhServiceDtos.stream().collect(Collectors.groupingBy(YhServiceDto::getSign));
- DayOfWeek currentDayOfWeek = now.getDayOfWeek();
- List<YhServiceDto> workdayService = dutyServices.get("workday");
- if (CollUtil.isNotEmpty(workdayService)) {
- List<YhServiceDto> saturdayService = dutyServices.get("Saturday");
- List<YhServiceDto> sundayServices = dutyServices.get("Sunday");
- List<YhServiceDto> carryServices = getDutyService(currentDayOfWeek, workdayService, saturdayService, sundayServices);
- //获取值班客服
- YhServiceDto dutyServiceCode = getDutyServiceCode(carryServices, workdayService, saturdayService, sundayServices, currentDayOfWeek, currentTime);
- if (CollUtil.isNotEmpty(dutyServiceCode.getSelect())) {
- return dutyServiceCode.getSelect().stream().filter(e -> StrUtil.isNotBlank(e.getFollowId())).map(YhServiceDto.CustomerServiceDto::getFollowId).collect(Collectors.toList());
- }
- }
- } catch (Exception e) {
- }
- }
- }
- return null;
- }
- /**
- * 返回明天星期几 用户获取对应周期工作客服
- */
- private static DayOfWeek getNextWorkDay(DayOfWeek currentDay) {
- // 如果当前是周五,下一个工作日是周一;否则,是当前星期的下一天
- if (currentDay == java.time.DayOfWeek.FRIDAY) {
- return java.time.DayOfWeek.SATURDAY;
- }
- if (currentDay == DayOfWeek.SATURDAY) {
- return DayOfWeek.SUNDAY;
- }
- return DayOfWeek.MONDAY;
- }
- private List<YhServiceDto> getDutyService(DayOfWeek nextWorkDay, List<YhServiceDto> workday, List<YhServiceDto> saturday, List<YhServiceDto> sunday) {
- if (nextWorkDay == DayOfWeek.SATURDAY) {
- return Optional.ofNullable(saturday).orElse(Optional.ofNullable(sunday).orElse(workday));
- }
- if (nextWorkDay == DayOfWeek.SUNDAY) {
- return Optional.ofNullable(sunday).orElse(workday);
- }
- return workday;
- }
- /**
- * 获取工作日
- */
- public YhServiceDto getDutyServiceCode(List<YhServiceDto> carryServices, List<YhServiceDto> workday, List<YhServiceDto> saturday, List<YhServiceDto> sunday, DayOfWeek currentDayOfWeek, LocalTime currentTime) {
- List<YhServiceDto> collect = carryServices.stream().filter(time -> time.isBetween(currentTime)).collect(Collectors.toList());
- if (CollUtil.isEmpty(collect)) {
- collect = carryServices.stream().filter(time -> time.isAfter(currentTime)).collect(Collectors.toList());
- if (CollUtil.isEmpty(collect)) {
- // 如果没有下一个时间段,获取下一个工作时间段的开始时间
- DayOfWeek nextWorkDay = getNextWorkDay(currentDayOfWeek);
- List<YhServiceDto> nextServices = getDutyService(nextWorkDay, workday, saturday, sunday);
- //获取下一天的早时
- return nextServices.get(0);
- }
- }
- return collect.get(RandomUtil.randomInt(collect.size()));
- }
- }
|