|
|
@@ -14,13 +14,17 @@ 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;
|
|
|
import com.cyksj.model.views.CorpKfDutyServicersStatusView;
|
|
|
+import com.cyksj.model.views.SysCorpFollowView;
|
|
|
import com.cyksj.service.corp.WxCorpOps;
|
|
|
import com.cyksj.service.corp.kf.CorpKfService;
|
|
|
import com.cyksj.service.mange.cms.service.CmsUserService;
|
|
|
+import com.ejlchina.searcher.BeanSearcher;
|
|
|
+import com.ejlchina.searcher.util.MapUtils;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
@@ -54,6 +58,10 @@ public class CorpKfServiceImpl implements CorpKfService {
|
|
|
|
|
|
private final CmsUserMapper cmsUserMapper;
|
|
|
|
|
|
+ private final BeanSearcher beanSearcher;
|
|
|
+
|
|
|
+ private final CorpKfFollowChangeRecordMapper corpKfFollowChangeRecordMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public void addKfAccount(CorpKfAccount corpKfAccount) throws Exception {
|
|
|
WxCpKfAccountAdd wxCpKfAccountAdd = new WxCpKfAccountAdd();
|
|
|
@@ -113,6 +121,9 @@ public class CorpKfServiceImpl implements CorpKfService {
|
|
|
@Override
|
|
|
public void setKfDuty(CorpKfDutyReq dutyReq) throws Exception {
|
|
|
String openKfId = dutyReq.getOpenKfId();
|
|
|
+ //记录变更记录
|
|
|
+ List<CorpKfAccountFollow> before = corpKfAccountFollowMapper.selectList(Wrappers.lambdaQuery(CorpKfAccountFollow.class)
|
|
|
+ .eq(CorpKfAccountFollow::getOpenKfId, openKfId));
|
|
|
List<CorpKfAccountFollow> dutyList = Optional.ofNullable(dutyReq.getDutyList()).orElse(new ArrayList<>());
|
|
|
//非单个 删除其他设置
|
|
|
if (!dutyReq.getIsUpdateSingle()) {
|
|
|
@@ -167,6 +178,58 @@ public class CorpKfServiceImpl implements CorpKfService {
|
|
|
if (delDutyFollowIds.size() > 0) {
|
|
|
wxCorpOps.delCorpKfServicer(openKfId, delDutyFollowIds);
|
|
|
}
|
|
|
+ List<CorpKfAccountFollow> after = corpKfAccountFollowMapper.selectList(Wrappers.lambdaQuery(CorpKfAccountFollow.class)
|
|
|
+ .eq(CorpKfAccountFollow::getOpenKfId, openKfId));
|
|
|
+ CmsUser cmsUser = cmsUserMapper.selectById(dutyReq.getAdminId());
|
|
|
+ recordChangeKfFollows(openKfId, cmsUser, before, after);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void recordChangeKfFollows(String openKfId, CmsUser cmsUser, List<CorpKfAccountFollow> before, List<CorpKfAccountFollow> after) throws Exception {
|
|
|
+ String operator = null;
|
|
|
+ if (cmsUser != null) {
|
|
|
+ operator = cmsUser.getNickname();
|
|
|
+ }
|
|
|
+ //客服关联
|
|
|
+ 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));
|
|
|
+
|
|
|
+ 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 (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 (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);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -368,4 +431,47 @@ public class CorpKfServiceImpl implements CorpKfService {
|
|
|
}
|
|
|
return thisHourDutyFollows;
|
|
|
}
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
}
|