zoujiajian před 1 rokem
rodič
revize
37f7bf2023

+ 72 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/CorpKfChangeFollowLogDto.java

@@ -0,0 +1,72 @@
+package com.cyksj.model.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: CorpKfChangeFollowLogDto
+ * 创建者: JavaZou
+ * 创建时间:2025/1/15 16:37
+ */
+@Getter
+@Setter
+public class CorpKfChangeFollowLogDto {
+	/**
+	 * 值班星期
+	 * 1星期天 2星期一 ....
+	 */
+	private Integer dutyWeek;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private List<String> beforeSelect;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private List<String> afterSelect;
+
+
+	public String toChangeString() {
+		StringBuilder sb = new StringBuilder();
+		sb.append(getDutyWeekName(this.dutyWeek));
+		if (beforeSelect.size() > 0) {
+			sb.append(" - 移除 - ");
+			String beforeCollect = beforeSelect.stream().collect(Collectors.joining("、"));
+			sb.append(beforeCollect);
+		}
+
+		if (afterSelect.size() > 0) {
+			sb.append(" - 增加 - ");
+			String afterCollect = afterSelect.stream().collect(Collectors.joining("、"));
+			sb.append(afterCollect);
+		}
+		return sb.toString();
+	}
+
+	public String getDutyWeekName(Integer week) {
+		switch (week) {
+			case 1:
+				return "周日";
+			case 2:
+				return "周一";
+			case 3:
+				return "周二";
+			case 4:
+				return "周三";
+			case 5:
+				return "周四";
+			case 6:
+				return "周五";
+			case 7:
+				return "周六";
+			default:
+				return null;
+		}
+	}
+}

+ 68 - 103
netflix-service/src/main/java/com/cyksj/service/corp/kf/impl/CorpKfServiceImpl.java

@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.RandomUtil;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -15,6 +14,7 @@ import com.cyksj.config.corp.YHLXWxCorpConfig;
 import com.cyksj.mapper.corp.CorpFollowMapper;
 import com.cyksj.mapper.corp.kf.*;
 import com.cyksj.mapper.manage.cms.CmsUserMapper;
+import com.cyksj.model.dto.CorpKfChangeFollowLogDto;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.kf.*;
 import com.cyksj.model.request.corp.kf.CorpKfDutyReq;
@@ -189,101 +189,44 @@ public class CorpKfServiceImpl implements CorpKfService {
 		if (cmsUser != null) {
 			operator = cmsUser.getNickname();
 		}
-
-		CorpKfFollowChangeRecord corpKfFollowChangeRecord = new CorpKfFollowChangeRecord();
-		corpKfFollowChangeRecord.setOpenKfId(openKfId);
-		corpKfFollowChangeRecord.setPreValue(Jsons.toJson(before));
-		corpKfFollowChangeRecord.setBackValue(Jsons.toJson(after));
-		corpKfFollowChangeRecord.setOperator(operator);
-		StringBuilder changeStr = new StringBuilder();
-		StringBuilder addChangeStr = new StringBuilder();
-		StringBuilder subChangStr = new StringBuilder();
-
+		//客服关联
 		List<SysCorpFollowView> sysCorpFollowViews = beanSearcher.searchAll(SysCorpFollowView.class, MapUtils.builder().build());
 		Map<String, List<SysCorpFollowView>> followMap = sysCorpFollowViews.stream().collect(Collectors.groupingBy(SysCorpFollowView::getFollowId));
 		Map<Integer, List<CorpKfAccountFollow>> bfDutyWeekFollowMap = before.stream().collect(Collectors.groupingBy(CorpKfAccountFollow::getDutyWeek));
 		Map<Integer, List<CorpKfAccountFollow>> afDutyWeekFollowMap = after.stream().collect(Collectors.groupingBy(CorpKfAccountFollow::getDutyWeek));
 
-		//增加
-		if (after.size() > before.size()) {
-			for (CorpKfAccountFollow af : after) {
-				Integer dutyWeek = af.getDutyWeek();
-				List<CorpKfAccountFollow> corpKfAccountFollows = bfDutyWeekFollowMap.get(dutyWeek);
-				if (CollUtil.isEmpty(corpKfAccountFollows)) {
-					changeStr.append(getDutyWeekName(dutyWeek));
-					addChangeStr.append("增加");
-					List<String> bfFollowIds = Jsons.parseList(af.getUserIdList(), String.class);
-					for (int i1 = 0; i1 < bfFollowIds.size(); i1++) {
-						String afUserId = bfFollowIds.get(i1);
-						SysCorpFollowView sysCorpFollowView = followMap.get(afUserId).get(0);
-						addChangeStr.append(String.format("%s(%s)", sysCorpFollowView.getName(), sysCorpFollowView.getFollowName()));
-						if (i1 != bfFollowIds.size() - 1) {
-							addChangeStr.append("、");
-						}
-					}
+		StringBuilder changeStr = new StringBuilder();
+		for (Integer dutyWeek : bfDutyWeekFollowMap.keySet()) {
+			List<CorpKfAccountFollow> bfFollow = bfDutyWeekFollowMap.get(dutyWeek);
+			List<CorpKfAccountFollow> afFollow = Optional.ofNullable(afDutyWeekFollowMap.get(dutyWeek)).orElse(new ArrayList<>());
+			CorpKfChangeFollowLogDto corpKfWeekChange = getCorpKfWeekChange(bfFollow, afFollow, dutyWeek, followMap);
+			if (corpKfWeekChange != null) {
+				if (changeStr.length() > 0) {
+					changeStr.append(";");
 				}
+				changeStr.append(corpKfWeekChange.toChangeString());
 			}
 		}
-
-		for (int i = 0; i < before.size(); i++) {
-			CorpKfAccountFollow bfCorpKfAccountFollow = before.get(i);
-			Integer bfDutyWeek = bfCorpKfAccountFollow.getDutyWeek();
-			List<CorpKfAccountFollow> afCorpKfAccountFollows = afDutyWeekFollowMap.get(bfDutyWeek);
-			//删除
-			if (CollUtil.isEmpty(afCorpKfAccountFollows)) {
-				changeStr.append(getDutyWeekName(bfDutyWeek));
-				subChangStr.append("移除");
-				List<String> bfFollowIds = Jsons.parseList(bfCorpKfAccountFollow.getUserIdList(), String.class);
-				for (int i1 = 0; i1 < bfFollowIds.size(); i1++) {
-					String afUserId = bfFollowIds.get(i1);
-					SysCorpFollowView sysCorpFollowView = followMap.get(afUserId).get(0);
-					subChangStr.append(String.format("%s(%s)", sysCorpFollowView.getName(), sysCorpFollowView.getFollowName()));
-					if (i1 != bfFollowIds.size() - 1) {
-						subChangStr.append("、");
-					}
-				}
-			} else {
-				//变更
-				String bfUserStr = bfCorpKfAccountFollow.getUserIdList();
-				String afUserStr = afCorpKfAccountFollows.get(0).getUserIdList();
-				if (StrUtil.equals(bfUserStr, afUserStr)) {
-					continue;
-				}
-				changeStr.append(getDutyWeekName(bfDutyWeek));
-				List<String> bfUserIds = Jsons.parseList(bfUserStr, String.class);
-				List<String> afUserIds = Jsons.parseList(afUserStr, String.class);
-				for (String userId : bfUserIds) {
-					if (!afUserIds.contains(userId)) {
-						if (!subChangStr.toString().contains("移除")) {
-							subChangStr.append("移除");
-						}
-						if (subChangStr.length() > 2) {
-							subChangStr.append("、");
-						}
-						SysCorpFollowView sysCorpFollowView = followMap.get(userId).get(0);
-						subChangStr.append(String.format("%s(%s)", sysCorpFollowView.getName(), sysCorpFollowView.getFollowName()));
-					}
-				}
-				for (String afterUserId : afUserIds) {
-					if (!bfUserIds.contains(afterUserId)) {
-						if (!addChangeStr.toString().contains("增加")) {
-							addChangeStr.append("增加");
-						}
-						if (addChangeStr.length() > 2) {
-							addChangeStr.append("、");
-						}
-						SysCorpFollowView sysCorpFollowView = followMap.get(afterUserId).get(0);
-						subChangStr.append(String.format("%s(%s)", sysCorpFollowView.getName(), sysCorpFollowView.getFollowName()));
-					}
+		for (Integer dutyWeek : afDutyWeekFollowMap.keySet()) {
+			List<CorpKfAccountFollow> afFollow = afDutyWeekFollowMap.get(dutyWeek);
+			List<CorpKfAccountFollow> bfFollow = Optional.ofNullable(bfDutyWeekFollowMap.get(dutyWeek)).orElse(new ArrayList<>());
+			if (bfFollow.size() > 0) {
+				continue;
+			}
+			CorpKfChangeFollowLogDto corpKfWeekChange = getCorpKfWeekChange(bfFollow, afFollow, dutyWeek, followMap);
+			if (corpKfWeekChange != null) {
+				if (changeStr.length() > 0) {
+					changeStr.append(";");
 				}
+				changeStr.append(corpKfWeekChange.toChangeString());
 			}
 		}
-		if (addChangeStr.length() > 0 || subChangStr.length() > 0) {
-			changeStr.append(addChangeStr);
-			if (addChangeStr.length() > 0 && subChangStr.length() > 0) {
-				changeStr.append("-");
-			}
-			changeStr.append(subChangStr);
+		if (changeStr.length() > 0) {
+			CorpKfFollowChangeRecord corpKfFollowChangeRecord = new CorpKfFollowChangeRecord();
+			corpKfFollowChangeRecord.setOpenKfId(openKfId);
+			corpKfFollowChangeRecord.setPreValue(Jsons.toJson(before));
+			corpKfFollowChangeRecord.setBackValue(Jsons.toJson(after));
+			corpKfFollowChangeRecord.setOperator(operator);
 			corpKfFollowChangeRecord.setChangeStr(changeStr.toString());
 			corpKfFollowChangeRecordMapper.insert(corpKfFollowChangeRecord);
 		}
@@ -489,24 +432,46 @@ public class CorpKfServiceImpl implements CorpKfService {
 		return thisHourDutyFollows;
 	}
 
-	public String getDutyWeekName(Integer week) {
-		switch (week) {
-			case 1:
-				return "周日";
-			case 2:
-				return "周一";
-			case 3:
-				return "周二";
-			case 4:
-				return "周三";
-			case 5:
-				return "周四";
-			case 6:
-				return "周五";
-			case 7:
-				return "周六";
-			default:
-				return null;
+	public CorpKfChangeFollowLogDto getCorpKfWeekChange(List<CorpKfAccountFollow> bfFollow, List<CorpKfAccountFollow> afFollow, Integer dutyWeek, Map<String, List<SysCorpFollowView>> followMap) {
+		List<String> beforeSelect = new ArrayList<>();
+		List<String> afterSelect = new ArrayList<>();
+
+		Set<String> bfFollowSet = new HashSet<>();
+		bfFollow.forEach(bf -> {
+			try {
+				bfFollowSet.addAll(Jsons.parseList(bf.getUserIdList(), String.class));
+			} catch (Exception e) {
+			}
+		});
+
+		Set<String> afFollowSet = new HashSet<>();
+		afFollow.forEach(af -> {
+			try {
+				afFollowSet.addAll(Jsons.parseList(af.getUserIdList(), String.class));
+			} catch (Exception e) {
+			}
+		});
+		//移除
+		for (String bfUserId : bfFollowSet) {
+			if (!afFollowSet.contains(bfUserId)) {
+				SysCorpFollowView sysCorpFollowView = followMap.get(bfUserId).get(0);
+				beforeSelect.add(String.format("%s(%s)", sysCorpFollowView.getName(), sysCorpFollowView.getFollowName()));
+			}
+		}
+		//增加
+		for (String afUserId : afFollowSet) {
+			if (!bfFollowSet.contains(afUserId)) {
+				SysCorpFollowView sysCorpFollowView = followMap.get(afUserId).get(0);
+				afterSelect.add(String.format("%s(%s)", sysCorpFollowView.getName(), sysCorpFollowView.getFollowName()));
+			}
+		}
+		if (beforeSelect.size() > 0 || afterSelect.size() > 0) {
+			CorpKfChangeFollowLogDto corpKfChangeFollowLogDto = new CorpKfChangeFollowLogDto();
+			corpKfChangeFollowLogDto.setDutyWeek(dutyWeek);
+			corpKfChangeFollowLogDto.setBeforeSelect(beforeSelect);
+			corpKfChangeFollowLogDto.setAfterSelect(afterSelect);
+			return corpKfChangeFollowLogDto;
 		}
+		return null;
 	}
 }