|
|
@@ -1,51 +1,241 @@
|
|
|
package com.tzld.piaoquan.api.service.wecom.thirdparty.impl;
|
|
|
|
|
|
-import com.tzld.piaoquan.api.component.WeComThirdPartyApiClient;
|
|
|
-import com.tzld.piaoquan.api.model.param.wecom.thirdpart.ThirdPartyConfigGetParam;
|
|
|
-import com.tzld.piaoquan.api.model.param.wecom.thirdpart.ThirdPartyRoomConfigParam;
|
|
|
-import com.tzld.piaoquan.api.model.param.wecom.thirdpart.ThirdPartyRoomListParam;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomConfigMapper;
|
|
|
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomConfigTaskContentMapper;
|
|
|
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomConfigTaskMapper;
|
|
|
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ext.ThirdPartWeComRoomMapperExt;
|
|
|
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ext.ThirdPartWeComStaffMapperExt;
|
|
|
+import com.tzld.piaoquan.api.model.param.wecom.thirdpart.*;
|
|
|
+import com.tzld.piaoquan.api.model.po.wecom.thirdpart.*;
|
|
|
import com.tzld.piaoquan.api.model.vo.IdNameVO;
|
|
|
+import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyRoomConfigTaskContentVO;
|
|
|
+import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyRoomConfigTaskVO;
|
|
|
import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyRoomConfigVO;
|
|
|
import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyRoomVO;
|
|
|
import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyRoomService;
|
|
|
import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyService;
|
|
|
-import com.tzld.piaoquan.growth.common.utils.RedisUtils;
|
|
|
+import com.tzld.piaoquan.growth.common.utils.DistributedIdGenerator;
|
|
|
import com.tzld.piaoquan.growth.common.utils.page.Page;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
public class WeComThirdPartyRoomServiceImpl implements WeComThirdPartyRoomService {
|
|
|
|
|
|
- @Autowired
|
|
|
- private WeComThirdPartyApiClient apiClient;
|
|
|
@Autowired
|
|
|
private WeComThirdPartyService weComThirdPartyService;
|
|
|
-
|
|
|
@Autowired
|
|
|
- private RedisUtils redisUtils;
|
|
|
+ private ThirdPartWeComRoomConfigMapper roomConfigMapper;
|
|
|
+ @Autowired
|
|
|
+ private ThirdPartWeComRoomConfigTaskMapper roomConfigTaskMapper;
|
|
|
+ @Autowired
|
|
|
+ private ThirdPartWeComRoomConfigTaskContentMapper roomConfigTaskContentMapper;
|
|
|
+ @Autowired
|
|
|
+ private ThirdPartWeComStaffMapperExt staffMapperExt;
|
|
|
+ @Autowired
|
|
|
+ private ThirdPartWeComRoomMapperExt roomMapperExt;
|
|
|
|
|
|
@Override
|
|
|
public Page<ThirdPartyRoomVO> list(ThirdPartyRoomListParam param) {
|
|
|
- return null;
|
|
|
+ Page<ThirdPartyRoomVO> result = new Page<>(param.getPageNum(), param.getPageSize());
|
|
|
+ int offset = (param.getPageNum() - 1) * param.getPageSize();
|
|
|
+ int count = roomMapperExt.getRoomCount(param);
|
|
|
+ result.setTotalSize(count);
|
|
|
+ if (count == 0) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ List<ThirdPartWeComRoom> roomList = roomMapperExt.getRoomList(param, offset, param.getPageSize());
|
|
|
+ List<ThirdPartyRoomVO> list = buildThirdPartyRoomVOList(roomList);
|
|
|
+ result.setObjs(list);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<ThirdPartyRoomVO> buildThirdPartyRoomVOList(List<ThirdPartWeComRoom> roomList) {
|
|
|
+ List<Long> roomIds = roomList.stream().map(ThirdPartWeComRoom::getId).collect(Collectors.toList());
|
|
|
+ List<Long> corpIds = roomList.stream().map(ThirdPartWeComRoom::getCorpId).collect(Collectors.toList());
|
|
|
+ List<ThirdPartWeComCorp> corpList = weComThirdPartyService.getCorpListByIds(corpIds);
|
|
|
+ Map<Long, ThirdPartWeComCorp> corpMap = corpList.stream()
|
|
|
+ .collect(Collectors.toMap(ThirdPartWeComCorp::getId, corp -> corp));
|
|
|
+ List<Long> staffIds = roomList.stream().map(ThirdPartWeComRoom::getStaffId).collect(Collectors.toList());
|
|
|
+ List<ThirdPartWeComStaff> staffList = weComThirdPartyService.getStaffByIds(staffIds);
|
|
|
+ Map<Long, ThirdPartWeComStaff> staffMap = staffList.stream()
|
|
|
+ .collect(Collectors.toMap(ThirdPartWeComStaff::getId, staff -> staff));
|
|
|
+ List<ThirdPartWeComRoomConfig> roomConfigList = getRoomConfigList(roomIds);
|
|
|
+ Map<Long, ThirdPartWeComRoomConfig> roomConfigMap = roomConfigList.stream()
|
|
|
+ .collect(Collectors.toMap(ThirdPartWeComRoomConfig::getRoomId, config -> config));
|
|
|
+ List<ThirdPartWeComStaff> pushStaffList = getRoomConfigPushList(roomConfigList);
|
|
|
+ Map<Long, ThirdPartWeComStaff> pushStaffMap = pushStaffList.stream()
|
|
|
+ .collect(Collectors.toMap(ThirdPartWeComStaff::getThirdStaffId, staff -> staff));
|
|
|
+
|
|
|
+ List<ThirdPartyRoomVO> result = new ArrayList<>();
|
|
|
+ for (ThirdPartWeComRoom room : roomList) {
|
|
|
+ ThirdPartyRoomVO vo = new ThirdPartyRoomVO();
|
|
|
+ vo.setId(room.getId());
|
|
|
+ vo.setCorpName(corpMap.get(room.getCorpId()).getName());
|
|
|
+ vo.setRoomName(room.getName());
|
|
|
+ vo.setGroupLeaderName(staffMap.get(room.getStaffId()).getName());
|
|
|
+ ThirdPartWeComRoomConfig roomConfig = roomConfigMap.get(room.getId());
|
|
|
+ if (Objects.nonNull(roomConfig)) {
|
|
|
+ List<IdNameVO<Long>> pushAccountNameList = new ArrayList<>();
|
|
|
+ ThirdPartWeComStaff primaryStaff = pushStaffMap.get(roomConfig.getPrimaryThirdStaffId());
|
|
|
+ if (Objects.nonNull(primaryStaff)) {
|
|
|
+ pushAccountNameList.add(new IdNameVO<>(primaryStaff.getThirdStaffId(), primaryStaff.getName()));
|
|
|
+ }
|
|
|
+ ThirdPartWeComStaff secondaryStaff = pushStaffMap.get(roomConfig.getSecondThirdStaffId());
|
|
|
+ if (Objects.nonNull(secondaryStaff)) {
|
|
|
+ pushAccountNameList.add(new IdNameVO<>(secondaryStaff.getThirdStaffId(), secondaryStaff.getName()));
|
|
|
+ }
|
|
|
+ vo.setPushAccountNameList(pushAccountNameList);
|
|
|
+ }
|
|
|
+ vo.setMemberCount(room.getMemberCount());
|
|
|
+ result.add(vo);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<ThirdPartWeComRoomConfig> getRoomConfigList(List<Long> roomIds) {
|
|
|
+ ThirdPartWeComRoomConfigExample example = new ThirdPartWeComRoomConfigExample();
|
|
|
+ example.createCriteria().andRoomIdIn(roomIds).andStatusEqualTo(1);
|
|
|
+ return roomConfigMapper.selectByExample(example);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public List<IdNameVO<Long>> getPushAccountList(Long roomId, String name) {
|
|
|
- return null;
|
|
|
+ ThirdPartWeComRoom room = weComThirdPartyService.getRoomById(roomId);
|
|
|
+ Long accountId = room.getStaffId();
|
|
|
+ List<ThirdPartWeComStaff> pushStaffList = staffMapperExt.getPushStaffList(accountId, roomId, name);
|
|
|
+ return pushStaffList.stream().map(staff -> new IdNameVO<>(staff.getThirdStaffId(), staff.getName())).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public ThirdPartyRoomConfigVO getRoomConfig(ThirdPartyConfigGetParam param) {
|
|
|
- return null;
|
|
|
+ ThirdPartWeComRoomConfig config = getRoomConfig(param.getId());
|
|
|
+ if (Objects.isNull(config)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ List<ThirdPartWeComStaff> pushStaffList = getRoomConfigPushList(Collections.singletonList(config));
|
|
|
+ Map<Long, String> pushStaffMap = pushStaffList.stream()
|
|
|
+ .collect(Collectors.toMap(ThirdPartWeComStaff::getThirdStaffId, ThirdPartWeComStaff::getName));
|
|
|
+ List<ThirdPartWeComRoomConfigTask> taskList = getRoomConfigTasks(config.getId());
|
|
|
+ List<String> taskIds = taskList.stream().map(ThirdPartWeComRoomConfigTask::getId).collect(Collectors.toList());
|
|
|
+ List<ThirdPartWeComRoomConfigTaskContent> contentList = getRoomConfigTaskContents(taskIds);
|
|
|
+ Map<String, List<ThirdPartWeComRoomConfigTaskContent>> taskContentMap = contentList.stream()
|
|
|
+ .collect(Collectors.groupingBy(ThirdPartWeComRoomConfigTaskContent::getTaskId));
|
|
|
+ ThirdPartyRoomConfigVO result = new ThirdPartyRoomConfigVO();
|
|
|
+ result.setPutScene(config.getPutScene());
|
|
|
+ result.setChannel(config.getChannel());
|
|
|
+ if (Objects.nonNull(config.getPrimaryThirdStaffId())) {
|
|
|
+ result.setPrimaryThirdStaffId(config.getPrimaryThirdStaffId());
|
|
|
+ result.setPrimaryThirdStaffName(pushStaffMap.get(config.getPrimaryThirdStaffId()));
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(config.getSecondThirdStaffId())) {
|
|
|
+ result.setSecondThirdStaffId(config.getSecondThirdStaffId());
|
|
|
+ result.setSecondThirdStaffName(pushStaffMap.get(config.getSecondThirdStaffId()));
|
|
|
+ }
|
|
|
+ result.setTaskList(taskList.stream().map(task -> {
|
|
|
+ ThirdPartyRoomConfigTaskVO vo = new ThirdPartyRoomConfigTaskVO();
|
|
|
+ vo.setSwitchFlag(task.getSwitchFlag());
|
|
|
+ vo.setSendTime(JSONObject.parseArray(task.getSendTime(), String.class));
|
|
|
+ vo.setRandomMin(task.getRandomMin());
|
|
|
+ vo.setSeq(task.getSeq());
|
|
|
+ List<ThirdPartWeComRoomConfigTaskContent> contents = taskContentMap.get(task.getId());
|
|
|
+ vo.setContentList(contents.stream().map(content -> {
|
|
|
+ ThirdPartyRoomConfigTaskContentVO contentVO = new ThirdPartyRoomConfigTaskContentVO();
|
|
|
+ contentVO.setType(content.getType());
|
|
|
+ contentVO.setContent(content.getContent());
|
|
|
+ contentVO.setSource(content.getSource());
|
|
|
+ contentVO.setSourceContent(content.getSourceContent());
|
|
|
+ contentVO.setSeq(content.getSeq());
|
|
|
+ return contentVO;
|
|
|
+ }).collect(Collectors.toList()));
|
|
|
+ return vo;
|
|
|
+ }).collect(Collectors.toList()));
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<ThirdPartWeComStaff> getRoomConfigPushList(List<ThirdPartWeComRoomConfig> configList) {
|
|
|
+ List<Long> thirdStaffIds = new ArrayList<>();
|
|
|
+ for (ThirdPartWeComRoomConfig config : configList) {
|
|
|
+ if (Objects.nonNull(config.getPrimaryThirdStaffId())) {
|
|
|
+ thirdStaffIds.add(config.getPrimaryThirdStaffId());
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(config.getSecondThirdStaffId())) {
|
|
|
+ thirdStaffIds.add(config.getSecondThirdStaffId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return weComThirdPartyService.getStaffListByThirdStaffIds(thirdStaffIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ private ThirdPartWeComRoomConfig getRoomConfig(Long roomId) {
|
|
|
+ ThirdPartWeComRoomConfigExample example = new ThirdPartWeComRoomConfigExample();
|
|
|
+ example.createCriteria().andRoomIdEqualTo(roomId).andStatusEqualTo(1);
|
|
|
+ List<ThirdPartWeComRoomConfig> configs = roomConfigMapper.selectByExample(example);
|
|
|
+ if (configs.isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return configs.get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<ThirdPartWeComRoomConfigTask> getRoomConfigTasks(String configId) {
|
|
|
+ ThirdPartWeComRoomConfigTaskExample example = new ThirdPartWeComRoomConfigTaskExample();
|
|
|
+ example.createCriteria().andConfigIdEqualTo(configId);
|
|
|
+ return roomConfigTaskMapper.selectByExample(example);
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<ThirdPartWeComRoomConfigTaskContent> getRoomConfigTaskContents(List<String> taskIds) {
|
|
|
+ ThirdPartWeComRoomConfigTaskContentExample example = new ThirdPartWeComRoomConfigTaskContentExample();
|
|
|
+ example.createCriteria().andTaskIdIn(taskIds);
|
|
|
+ return roomConfigTaskContentMapper.selectByExample(example);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void saveRoomConfig(ThirdPartyRoomConfigParam param) {
|
|
|
-
|
|
|
+ // todo check param
|
|
|
+ ThirdPartWeComRoomConfig config = getRoomConfig(param.getRoomId());
|
|
|
+ if (Objects.nonNull(config)) {
|
|
|
+ config.setStatus(0);
|
|
|
+ config.setUpdateTime(new Date());
|
|
|
+ roomConfigMapper.updateByPrimaryKey(config);
|
|
|
+ }
|
|
|
+ ThirdPartWeComRoomConfig newConfig = new ThirdPartWeComRoomConfig();
|
|
|
+ newConfig.setId(DistributedIdGenerator.generate());
|
|
|
+ newConfig.setRoomId(param.getRoomId());
|
|
|
+ newConfig.setPutScene(param.getPutScene());
|
|
|
+ newConfig.setChannel(param.getChannel());
|
|
|
+ newConfig.setPrimaryThirdStaffId(param.getPrimaryThirdStaffId());
|
|
|
+ newConfig.setSecondThirdStaffId(param.getSecondThirdStaffId());
|
|
|
+ newConfig.setStatus(1);
|
|
|
+ newConfig.setCreateTime(new Date());
|
|
|
+ newConfig.setUpdateTime(new Date());
|
|
|
+ roomConfigMapper.insert(newConfig);
|
|
|
+ for (ThirdPartyRoomConfigTaskParam taskParam : param.getTaskList()) {
|
|
|
+ ThirdPartWeComRoomConfigTask newTask = new ThirdPartWeComRoomConfigTask();
|
|
|
+ newTask.setConfigId(newConfig.getId());
|
|
|
+ newTask.setSwitchFlag(taskParam.getSwitchFlag());
|
|
|
+ newTask.setSendTime(JSONObject.toJSONString(taskParam.getSendTime()));
|
|
|
+ newTask.setRandomMin(taskParam.getRandomMin());
|
|
|
+ newTask.setSeq(taskParam.getSeq());
|
|
|
+ newTask.setCreateTime(new Date());
|
|
|
+ newTask.setUpdateTime(new Date());
|
|
|
+ roomConfigTaskMapper.insert(newTask);
|
|
|
+ for (ThirdPartyRoomConfigTaskContentParam taskContentParam : taskParam.getContentList()) {
|
|
|
+ ThirdPartWeComRoomConfigTaskContent newContent = new ThirdPartWeComRoomConfigTaskContent();
|
|
|
+ newContent.setTaskId(newTask.getId());
|
|
|
+ newContent.setType(taskContentParam.getType());
|
|
|
+ newContent.setContent(taskContentParam.getContent());
|
|
|
+ newContent.setSource(taskContentParam.getSource());
|
|
|
+ newContent.setSourceContent(taskContentParam.getSourceContent());
|
|
|
+ newContent.setSeq(taskContentParam.getSeq());
|
|
|
+ newContent.setCreateTime(new Date());
|
|
|
+ newContent.setUpdateTime(new Date());
|
|
|
+ roomConfigTaskContentMapper.insert(newContent);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|