|
|
@@ -1,16 +1,29 @@
|
|
|
package com.cyksj.service.sys.impl;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.cyksj.common.EnvCommonService;
|
|
|
import com.cyksj.common.constant.Constant;
|
|
|
-import com.cyksj.mapper.sys.SysConfigChangeRecordMapper;
|
|
|
+import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
+import com.cyksj.common.util.Jsons;
|
|
|
+import com.cyksj.common.util.SmsUtil;
|
|
|
+import com.cyksj.enums.GatewayApiCode;
|
|
|
import com.cyksj.mapper.manage.cms.CmsUserMapper;
|
|
|
+import com.cyksj.mapper.sys.SysConfigChangeRecordMapper;
|
|
|
+import com.cyksj.model.dto.YhServiceChangeDto;
|
|
|
+import com.cyksj.model.dto.YhServiceDto;
|
|
|
+import com.cyksj.model.entity.CmsUser;
|
|
|
import com.cyksj.model.entity.SysConfigChangeRecord;
|
|
|
import com.cyksj.service.sys.SysConfigChangeRecordService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.util.Optional;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 项目名: yhlxj
|
|
|
@@ -23,8 +36,14 @@ import java.util.Optional;
|
|
|
public class SysConfigChangeRecordServiceImpl extends ServiceImpl<SysConfigChangeRecordMapper, SysConfigChangeRecord> implements SysConfigChangeRecordService {
|
|
|
private final CmsUserMapper cmsUserMapper;
|
|
|
|
|
|
+ private final EnvCommonService envCommonService;
|
|
|
+
|
|
|
@Override
|
|
|
public Boolean changeRecord(Long adminId, String sysKey, String sysValue, String updateValue) throws Exception {
|
|
|
+ CmsUser cmsUser = cmsUserMapper.selectById(adminId);
|
|
|
+ if (cmsUser == null) {
|
|
|
+ throw BusinessRuntimeException.getGatewayApiCode(GatewayApiCode.CMS_TOKEN_VALID);
|
|
|
+ }
|
|
|
//保存客服系统配置key前后更新数据
|
|
|
if (Constant.serviceKeys.contains(sysKey)) {
|
|
|
if (!StrUtil.equals(sysValue, updateValue)) {
|
|
|
@@ -32,12 +51,96 @@ public class SysConfigChangeRecordServiceImpl extends ServiceImpl<SysConfigChang
|
|
|
sysConfigChangeRecord.setSysKey(sysKey);
|
|
|
sysConfigChangeRecord.setPreValue(sysValue);
|
|
|
sysConfigChangeRecord.setBackValue(updateValue);
|
|
|
- Optional.ofNullable(cmsUserMapper.selectById(adminId))
|
|
|
- .ifPresent(cm -> sysConfigChangeRecord.setOperator(cm.getNickname()));
|
|
|
+ sysConfigChangeRecord.setOperator(cmsUser.getNickname());
|
|
|
+ if (Constant.serviceKeys.get(0).equals(sysKey)) {
|
|
|
+ //变更记录
|
|
|
+ List<YhServiceDto> before = Jsons.parseList(sysValue, YhServiceDto.class);
|
|
|
+ List<YhServiceDto> after = Jsons.parseList(updateValue, YhServiceDto.class);
|
|
|
+ //周末值班人员缺失 通知
|
|
|
+ StringBuilder weekdayMsgNotifySb = new StringBuilder();
|
|
|
+ //客服值班变更记录
|
|
|
+ StringBuilder changeStr = new StringBuilder();
|
|
|
+ AtomicInteger saturdaySelect = new AtomicInteger(0);
|
|
|
+ AtomicInteger sundaySelect = new AtomicInteger(0);
|
|
|
+ for (int i = 0; i < before.size(); i++) {
|
|
|
+ YhServiceDto beforeServiceDto = before.get(i);
|
|
|
+ //节假日按钮 关闭开启不做处理
|
|
|
+ if (after.size() > i) {
|
|
|
+ YhServiceDto afterServiceDto = after.get(i);
|
|
|
+ //变更记录
|
|
|
+ YhServiceChangeDto changeService = getChangeService(beforeServiceDto, afterServiceDto);
|
|
|
+ if (changeService != null) {
|
|
|
+ if (changeStr.length() > 0) {
|
|
|
+ changeStr.append(";");
|
|
|
+ }
|
|
|
+ changeStr.append(changeService.toChangeString());
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((StrUtil.equals(afterServiceDto.getSign(), "Saturday"))) {
|
|
|
+ saturdaySelect.addAndGet(afterServiceDto.getSelect().size());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StrUtil.equals(afterServiceDto.getSign(), "Sunday")) {
|
|
|
+ sundaySelect.addAndGet(afterServiceDto.getSelect().size());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (saturdaySelect.get() != 0 && saturdaySelect.get() < 3) {
|
|
|
+ weekdayMsgNotifySb.append("周六");
|
|
|
+ }
|
|
|
+ if (sundaySelect.get() != 0 && sundaySelect.get() < 3) {
|
|
|
+ weekdayMsgNotifySb.append("周日");
|
|
|
+ }
|
|
|
+ if (changeStr.length() > 0) {
|
|
|
+ sysConfigChangeRecord.setChangeStr(changeStr.toString());
|
|
|
+ }
|
|
|
+ if (weekdayMsgNotifySb.length() > 0 && envCommonService.isPrdEnv()) {
|
|
|
+ SmsUtil.sendLuoKey2Msg(Constant.DUTY_SERVICE_CHANGE_NOTIFY_PHONE, String.format(Constant.DUTY_SERVICE_CHANGE_MSG, weekdayMsgNotifySb));
|
|
|
+ }
|
|
|
+ }
|
|
|
this.save(sysConfigChangeRecord);
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ public YhServiceChangeDto getChangeService(YhServiceDto beforeServiceDto, YhServiceDto afterServiceDto) {
|
|
|
+ Integer index = beforeServiceDto.getIndex();
|
|
|
+ String sign = beforeServiceDto.getSign();
|
|
|
+ String date = beforeServiceDto.getDate();
|
|
|
+ String workType = beforeServiceDto.getWorkType();
|
|
|
+
|
|
|
+ Map<Integer, List<YhServiceDto.CustomerServiceDto>> afterIndxMap = afterServiceDto.getSelect().stream().collect(Collectors.groupingBy(YhServiceDto.CustomerServiceDto::getIndex));
|
|
|
+
|
|
|
+ Map<Integer, List<YhServiceDto.CustomerServiceDto>> beforeIndxMap = beforeServiceDto.getSelect().stream().collect(Collectors.groupingBy(YhServiceDto.CustomerServiceDto::getIndex));
|
|
|
+
|
|
|
+ List<String> beforeSelect = new ArrayList<>();
|
|
|
+ List<String> afterSelect = new ArrayList<>();
|
|
|
+
|
|
|
+ beforeServiceDto.getSelect().forEach(bfSelect -> {
|
|
|
+ if (afterIndxMap.get(bfSelect.getIndex()) == null) {
|
|
|
+ beforeSelect.add(bfSelect.getName());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ afterServiceDto.getSelect().forEach(afSelect -> {
|
|
|
+ if (beforeIndxMap.get(afSelect.getIndex()) == null) {
|
|
|
+ afterSelect.add(afSelect.getName());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ if (CollUtil.isNotEmpty(beforeSelect) || CollUtil.isNotEmpty(afterSelect)) {
|
|
|
+ YhServiceChangeDto yhServiceChangeDto = new YhServiceChangeDto();
|
|
|
+ yhServiceChangeDto.setSign(sign);
|
|
|
+ yhServiceChangeDto.setIndex(index);
|
|
|
+ yhServiceChangeDto.setDate(date);
|
|
|
+ yhServiceChangeDto.setWorkType(workType);
|
|
|
+ yhServiceChangeDto.setBeforeSelect(beforeSelect);
|
|
|
+ yhServiceChangeDto.setAfterSelect(afterSelect);
|
|
|
+ return yhServiceChangeDto;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|