|
|
@@ -4,6 +4,7 @@ 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;
|
|
|
@@ -12,15 +13,21 @@ import com.cyksj.common.util.Jsons;
|
|
|
import com.cyksj.common.util.StringUtil;
|
|
|
import com.cyksj.config.corp.YHLXWxCorpConfig;
|
|
|
import com.cyksj.mapper.corp.CorpFollowMapper;
|
|
|
-import com.cyksj.mapper.corp.kf.*;
|
|
|
+import com.cyksj.mapper.corp.kf.CorpKfAccountFollowMapper;
|
|
|
+import com.cyksj.mapper.corp.kf.CorpKfAccountMapper;
|
|
|
+import com.cyksj.mapper.corp.kf.CorpKfAccountSessionConfigMapper;
|
|
|
+import com.cyksj.mapper.corp.kf.CorpKfServicerSessionRecordMapper;
|
|
|
import com.cyksj.mapper.manage.cms.CmsUserMapper;
|
|
|
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 +61,8 @@ public class CorpKfServiceImpl implements CorpKfService {
|
|
|
|
|
|
private final CmsUserMapper cmsUserMapper;
|
|
|
|
|
|
+ private final BeanSearcher beanSearcher;
|
|
|
+
|
|
|
@Override
|
|
|
public void addKfAccount(CorpKfAccount corpKfAccount) throws Exception {
|
|
|
WxCpKfAccountAdd wxCpKfAccountAdd = new WxCpKfAccountAdd();
|
|
|
@@ -113,6 +122,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 +179,69 @@ 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();
|
|
|
+ }
|
|
|
+
|
|
|
+ CorpKfFollowChangeRecord corpKfFollowChangeRecord = new CorpKfFollowChangeRecord();
|
|
|
+ corpKfFollowChangeRecord.setOpenKfId(openKfId);
|
|
|
+ corpKfFollowChangeRecord.setPreValue(Jsons.toJson(before));
|
|
|
+ corpKfFollowChangeRecord.setBackValue(Jsons.toJson(after));
|
|
|
+ corpKfFollowChangeRecord.setOperator(operator);
|
|
|
+ StringBuilder changeStr = 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>> afDutyWeekFollowMap = after.stream().collect(Collectors.groupingBy(CorpKfAccountFollow::getDutyWeek));
|
|
|
+
|
|
|
+ for (int i = 0; i < before.size(); i++) {
|
|
|
+ CorpKfAccountFollow bfCorpKfAccountFollow = before.get(i);
|
|
|
+ Integer bfDutyWeek = bfCorpKfAccountFollow.getDutyWeek();
|
|
|
+ List<CorpKfAccountFollow> afCorpKfAccountFollows = afDutyWeekFollowMap.get(bfDutyWeek);
|
|
|
+ changeStr.append(getDutyWeekName(bfDutyWeek));
|
|
|
+ if (CollUtil.isEmpty(afCorpKfAccountFollows)) {
|
|
|
+ changeStr.append("移除");
|
|
|
+ List<String> bfFollowIds = Jsons.parseList(bfCorpKfAccountFollow.getUserIdList(), String.class);
|
|
|
+ for (int i1 = 0; i1 < bfFollowIds.size(); i1++) {
|
|
|
+ changeStr.append(followMap.get(bfFollowIds.get(0)).get(0).getName());
|
|
|
+ if (i1 != bfFollowIds.size() - 1) {
|
|
|
+ changeStr.append("、");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ String bfUserStr = bfCorpKfAccountFollow.getUserIdList();
|
|
|
+ String afUserStr = afCorpKfAccountFollows.get(0).getUserIdList();
|
|
|
+ if (StrUtil.equals(bfUserStr, afUserStr)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ 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 (!changeStr.toString().contains("移除")) {
|
|
|
+ changeStr.append("移除");
|
|
|
+ }
|
|
|
+ changeStr.append(followMap.get(userId).get(0).getName()).append("、");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (String afterUserId : afUserIds) {
|
|
|
+ if (!bfUserIds.contains(afterUserId)) {
|
|
|
+ if (!changeStr.toString().contains("增加")) {
|
|
|
+ changeStr.append("增加");
|
|
|
+ }
|
|
|
+ changeStr.append(followMap.get(afterUserId).get(0).getName()).append("、");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -368,4 +443,25 @@ 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;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|