SysConfigServiceImpl.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package com.cyksj.service.sys.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.RandomUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.cyksj.common.constant.Constant;
  8. import com.cyksj.common.util.Jsons;
  9. import com.cyksj.mapper.SysConfigMapper;
  10. import com.cyksj.model.dto.DefaultShopConfig;
  11. import com.cyksj.model.dto.YhServiceDto;
  12. import com.cyksj.model.entity.ShopConfig;
  13. import com.cyksj.model.entity.SysConfig;
  14. import com.cyksj.service.sys.SysConfigService;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.stereotype.Service;
  17. import java.time.DayOfWeek;
  18. import java.time.LocalDateTime;
  19. import java.time.LocalTime;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.Optional;
  23. import java.util.stream.Collectors;
  24. /**
  25. * @author chan
  26. * @date 2022/10/20 10:07 AM
  27. */
  28. @Slf4j
  29. @Service
  30. public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper,SysConfig> implements SysConfigService {
  31. @Override
  32. public String getDefaultShopConfigByType(String type) {
  33. SysConfig shopConfig = this.getOne(Wrappers.lambdaQuery(SysConfig.class)
  34. .eq(SysConfig::getSysKey, Constant.SYS_DEFAULT_SHOP_KEY).last("limit 1"));
  35. if (shopConfig == null) {
  36. return getShopIdByType(type);
  37. }
  38. String sysValue = shopConfig.getSysValue();
  39. try {
  40. DefaultShopConfig defaultShopConfig = Jsons.parseObject(sysValue, DefaultShopConfig.class);
  41. String wxDefaultAppId = defaultShopConfig.getWxDefaultAppId();
  42. String zfbDefaultAppId = defaultShopConfig.getZfbDefaultAppId();
  43. if ("wx".equals(type)) {
  44. return Optional.ofNullable(wxDefaultAppId).orElse(ShopConfig.WX_DEFAULT_APP_ID);
  45. }
  46. return Optional.ofNullable(zfbDefaultAppId).orElse(ShopConfig.ZFB_DEFAULT_APP_ID);
  47. } catch (Exception e) {
  48. }
  49. return getShopIdByType(type);
  50. }
  51. public String getShopIdByType(String type) {
  52. if ("wx".equals(type)) {
  53. return ShopConfig.WX_DEFAULT_APP_ID;
  54. }
  55. return ShopConfig.ZFB_DEFAULT_APP_ID;
  56. }
  57. @Override
  58. public List<String> getDutyServices() {
  59. SysConfig sysConfig = this.getOne(Wrappers.lambdaQuery(SysConfig.class)
  60. .eq(SysConfig::getSysKey, Constant.serviceKeys.get(0))
  61. .last("limit 1"));
  62. // 用当前日期时间创建一个 LocalDateTime 对象
  63. LocalDateTime now = LocalDateTime.now();
  64. // 获取当前时间
  65. LocalTime currentTime = now.toLocalTime();
  66. if (sysConfig != null) {
  67. String sysValue = sysConfig.getSysValue();
  68. if (StrUtil.isNotEmpty(sysValue)) {
  69. try {
  70. List<YhServiceDto> yhServiceDtos = Jsons.parseList(sysValue, YhServiceDto.class);
  71. Map<String, List<YhServiceDto>> dutyServices = yhServiceDtos.stream().collect(Collectors.groupingBy(YhServiceDto::getSign));
  72. DayOfWeek currentDayOfWeek = now.getDayOfWeek();
  73. List<YhServiceDto> workdayService = dutyServices.get("workday");
  74. if (CollUtil.isNotEmpty(workdayService)) {
  75. List<YhServiceDto> saturdayService = dutyServices.get("Saturday");
  76. List<YhServiceDto> sundayServices = dutyServices.get("Sunday");
  77. List<YhServiceDto> carryServices = getDutyService(currentDayOfWeek, workdayService, saturdayService, sundayServices);
  78. //获取值班客服
  79. YhServiceDto dutyServiceCode = getDutyServiceCode(carryServices, workdayService, saturdayService, sundayServices, currentDayOfWeek, currentTime);
  80. if (CollUtil.isNotEmpty(dutyServiceCode.getSelect())) {
  81. return dutyServiceCode.getSelect().stream().filter(e -> StrUtil.isNotBlank(e.getFollowId())).map(YhServiceDto.CustomerServiceDto::getFollowId).collect(Collectors.toList());
  82. }
  83. }
  84. } catch (Exception e) {
  85. }
  86. }
  87. }
  88. return null;
  89. }
  90. /**
  91. * 返回明天星期几 用户获取对应周期工作客服
  92. */
  93. private static DayOfWeek getNextWorkDay(DayOfWeek currentDay) {
  94. // 如果当前是周五,下一个工作日是周一;否则,是当前星期的下一天
  95. if (currentDay == java.time.DayOfWeek.FRIDAY) {
  96. return java.time.DayOfWeek.SATURDAY;
  97. }
  98. if (currentDay == DayOfWeek.SATURDAY) {
  99. return DayOfWeek.SUNDAY;
  100. }
  101. return DayOfWeek.MONDAY;
  102. }
  103. private List<YhServiceDto> getDutyService(DayOfWeek nextWorkDay, List<YhServiceDto> workday, List<YhServiceDto> saturday, List<YhServiceDto> sunday) {
  104. if (nextWorkDay == DayOfWeek.SATURDAY) {
  105. return Optional.ofNullable(saturday).orElse(Optional.ofNullable(sunday).orElse(workday));
  106. }
  107. if (nextWorkDay == DayOfWeek.SUNDAY) {
  108. return Optional.ofNullable(sunday).orElse(workday);
  109. }
  110. return workday;
  111. }
  112. /**
  113. * 获取工作日
  114. */
  115. public YhServiceDto getDutyServiceCode(List<YhServiceDto> carryServices, List<YhServiceDto> workday, List<YhServiceDto> saturday, List<YhServiceDto> sunday, DayOfWeek currentDayOfWeek, LocalTime currentTime) {
  116. List<YhServiceDto> collect = carryServices.stream().filter(time -> time.isBetween(currentTime)).collect(Collectors.toList());
  117. if (CollUtil.isEmpty(collect)) {
  118. collect = carryServices.stream().filter(time -> time.isAfter(currentTime)).collect(Collectors.toList());
  119. if (CollUtil.isEmpty(collect)) {
  120. // 如果没有下一个时间段,获取下一个工作时间段的开始时间
  121. DayOfWeek nextWorkDay = getNextWorkDay(currentDayOfWeek);
  122. List<YhServiceDto> nextServices = getDutyService(nextWorkDay, workday, saturday, sunday);
  123. //获取下一天的早时
  124. return nextServices.get(0);
  125. }
  126. }
  127. return collect.get(RandomUtil.randomInt(collect.size()));
  128. }
  129. }