Commit f88d2ee3 by 徐高华

Merge branch 'feature/社群' into 'developer'

Feature/社群

See merge request !568
parents 55333ac4 768f1fb3
......@@ -13,6 +13,15 @@ public class ChatHmSearchQDTO implements Serializable {
private String enterpriseId;
private String searchParams;
private Integer status;
private Long linkId ;
public Long getLinkId() {
return linkId;
}
public void setLinkId(Long linkId) {
this.linkId = linkId;
}
public Date getStartDate() {
return startDate;
......
......@@ -33,13 +33,13 @@ public interface GroupChatMapper {
@Param("totalMemberCount") int totalMemberCount, @Param("addMemberCount") int addMemberCount,
@Param("addCount") int addCount, @Param("quitCount") int quitCount,
@Param("quitMemberCount") int quitMemberCount);
public int addMemberCount(@Param("groupChatId")Long groupChatId) ;
public int addMemberCount(@Param("groupChatId") Long groupChatId);
// 更新群状态
public int updateChatStatus(@Param("groupChatId") Long groupChatId, @Param("chatStatus") int chatStatus);
// 更下线
// 下线(标识不能通过活码入群)
public int chatOff(@Param("groupChatId") Long groupChatId);
public TabGroupChat selectById(Long groupChatId);
......
......@@ -25,8 +25,10 @@ import com.gic.haoban.manage.api.dto.chat.GroupChatOwnerDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.ChatDataSearchQDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.OwnerSearchQDTO;
import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.dao.mapper.WxEnterpriseMapper;
import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatDataMapper;
import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatOwnerMapper;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise;
import com.gic.haoban.manage.service.entity.chat.TabGroupChatData;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.haoban.manage.service.service.chat.GroupChatDataService;
......@@ -49,32 +51,51 @@ public class GroupChatDataServiceImpl implements GroupChatDataService {
private GroupChatOwnerMapper groupChatOwnerMapper;
@Autowired
private GroupChatDataMapper groupChatDataMapper;
@Autowired
private WxEnterpriseMapper wxEnterpriseMapper;
@Override
public List<GroupChatDataDTO> list(ChatDataSearchQDTO qdto) {
return null;
}
@Override
public Page<GroupChatDataDTO> listPage(ChatDataSearchQDTO qdto, BasePageInfo basePageInfo) {
return null;
}
@Override
public void chatDataTimer(String params) {
t("f5f8c78e395e4ca1a493707316096097");
logger.info("群统计定时开始");
List<TabHaobanWxEnterprise> wxEnterpriseList = this.wxEnterpriseMapper.listByIds(null);
for (TabHaobanWxEnterprise item : wxEnterpriseList) {
try {
this.getDataFormQw(item.getWxEnterpriseId());
} catch (Exception e) {
logger.info("统计异常,wxeid={}", item.getWxEnterpriseId());
e.printStackTrace();
}
}
}
private void t(String wxEnterpriseId) {
private void getDataFormQw(String wxEnterpriseId) {
logger.info("开始处理wxEnterpriseId={}",wxEnterpriseId);
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
if (null == qwDTO) {
logger.info("wxEnterpriseId不存在,id={}", wxEnterpriseId);
return;
}
if (qwDTO.getWxSecurityType() == 0) {
logger.info("wxSecurityType=0,不处理,id={}", wxEnterpriseId);
return;
}
OwnerSearchQDTO qdto = new OwnerSearchQDTO();
qdto.setWxEnterpriseId(wxEnterpriseId);
List<GroupChatOwnerDTO> list = this.groupChatOwnerMapper.listOwner(qdto);
if(CollectionUtils.isEmpty(list)) {
logger.info("无群主记录,不处理");
return ;
}
List<String> userIdList = null;
Map<String, String> staffIdMap = new HashMap<>();
if (qwDTO.needOpenUserId3th()) {
......@@ -86,9 +107,11 @@ public class GroupChatDataServiceImpl implements GroupChatDataService {
staffIdMap = list.stream().collect(
Collectors.toMap(GroupChatOwnerDTO::getWxUserId, GroupChatOwnerDTO::getStaffId, (k1, k2) -> k1));
}
Date date = DateUtil.addDay(DateUtil.getStartTimeOfDay(), -1);
Long time = date.getTime() / 1000;
ServiceResponse<List<GroupChatQwDataDTO>> resp = this.qywxChatApiService.statistic(qwDTO.getThirdCorpid(),
config.getWxSuiteid(), userIdList, date.getTime() / 1000, date.getTime() / 1000);
config.getWxSuiteid(), userIdList, time, time);
logger.info(JSON.toJSONString(resp));
List<GroupChatQwDataDTO> dataList = resp.getResult();
......
package com.gic.haoban.manage.service.service.chat.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
......@@ -19,6 +20,7 @@ import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.PageHelperUtils;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.common.utils.RolesListUtils;
import com.gic.haoban.manage.api.constants.Manage3Constants;
import com.gic.haoban.manage.api.dto.SecretSettingDTO;
import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO;
......@@ -91,40 +93,82 @@ public class GroupChatHmServiceImpl implements GroupChatHmService {
logger.info("群活码不存在,chatHmId={}", chatHmId);
return;
}
if (hm.getAutoCreateRoom() == 0) {
logger.info("无开启自动建群,不处理自动踢群hmid={}", hm.getChatHmId());
return;
}
List<TabGroupChatHmRelation> chatRelation = this.groupChatHmRelationMapper.listByChatHmId(chatHmId);
if (CollectionUtils.isEmpty(chatRelation)) {
logger.info("群活码无关联群,chatHmId={}", chatHmId);
break;
}
String wxEnterpriseId = hm.getWxEnterpriseId();
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
SecretSettingDTO secretSetting = secretSettingService.getSecretSetting(wxEnterpriseId,
SecretTypeEnum.CUSTOMIZED_APP.getVal());
if (null == secretSetting) {
logger.info("没有配置代开应用");
return;
}
String configId = hm.getWxConfigId();
ServiceResponse<AddJoinWayDTO> joinResp = this.qywxChatApiService.getJoinWay(qwDTO.getDkCorpid(),
secretSetting.getSecretVal(), configId);
logger.info("查询群活码={}", JSON.toJSON(joinResp));
if (joinResp.isSuccess()) {
AddJoinWayDTO join = joinResp.getResult();
List<String> qwChatIdList = join.getChat_id_list();
if (CollectionUtils.isNotEmpty(qwChatIdList)) {
List<Long> chatIdList = chatRelation.stream().map(dto -> dto.getGroupChatId())
.collect(Collectors.toList());
List<TabGroupChat> chatList = this.groupChatMapper.listByIdSet(new HashSet<>(chatIdList));
List<String> hbIdList = chatList.stream().map(dto -> dto.getWxChatId())
.collect(Collectors.toList());
this.t(qwChatIdList, hbIdList, chatHmId);
}
}
this.handleAutoCreateRoom(wxEnterpriseId, secretSetting.getSecretVal(), hm, chatRelation);
}
}
private void t(List<String> qwIdList, List<String> hbIdList, Long chatHmId) {
if (CollectionUtils.isEmpty(hbIdList)) {
}
/**
* 处理开启自动建群的,如果群满自动下线后,需要从活码中提出
*/
private void handleAutoCreateRoom(String wxEnterpriseId, String secret, TabGroupChatHm hm,
List<TabGroupChatHmRelation> chatRelation) {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
String configId = hm.getWxConfigId();
ServiceResponse<AddJoinWayDTO> joinResp = this.qywxChatApiService.getJoinWay(qwDTO.getDkCorpid(), secret,
configId);
logger.info("查询群活码={}", JSON.toJSON(joinResp));
if (joinResp.isSuccess()) {
AddJoinWayDTO join = joinResp.getResult();
List<String> qwChatIdList = join.getChat_id_list();
if (CollectionUtils.isNotEmpty(qwChatIdList)) {
if (qwChatIdList.size() == 1) {
logger.info("只有1个群");
return;
}
List<Long> chatIdList = chatRelation.stream().map(dto -> dto.getGroupChatId())
.collect(Collectors.toList());
List<TabGroupChat> chatList = this.groupChatMapper.listByIdSet(new HashSet<>(chatIdList));
List<String> hbIdList = chatList.stream().map(dto -> dto.getWxChatId()).collect(Collectors.toList());
logger.info("企微群列表={},haoban列表={}", qwChatIdList, hbIdList);
// 差异列表
List<String> qwList = RolesListUtils.differenceList(qwChatIdList, hbIdList);
if (qwChatIdList.size() == hbIdList.size() && CollectionUtils.isEmpty(qwList)) {
logger.info("群未变化");
return;
}
if (CollectionUtils.isNotEmpty(qwList)) {
// 处理要踢的
for (String wxChatId : qwList) {
TabGroupChat chat = this.groupChatMapper.selectByWxChatId(wxEnterpriseId, wxChatId);
TabGroupChat cid = null;
String staffId = chat.getStaffId();
for (TabGroupChat obj : chatList) {
if (obj.getStaffId().equals(staffId)) {
if (null == cid) {
cid = obj;
} else {
if (obj.getTotalCount() > cid.getTotalCount()) {
cid = obj;
}
}
}
}
if (null != cid) {
logger.info("hm={},群={},要删={}", wxChatId, qwChatIdList, cid.getWxChatId());
qwChatIdList.remove(cid.getWxChatId());
// 保存活码
}
}
}
}
}
}
......@@ -136,6 +180,7 @@ public class GroupChatHmServiceImpl implements GroupChatHmService {
SecretTypeEnum.CUSTOMIZED_APP.getVal());
if (null == secretSetting) {
logger.info("没有配置代开应用");
return;
}
boolean updateFlag = false;
Long hmid = UniqueIdUtils.uniqueLong();
......
......@@ -36,9 +36,11 @@ import com.gic.haoban.manage.api.dto.chat.GroupChatPlanOwnerLogDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO;
import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.dao.mapper.StaffMapper;
import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatOwnerMapper;
import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatPlanLogMapper;
import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatPlanMapper;
import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.chat.TabGroupChatOwner;
import com.gic.haoban.manage.service.entity.chat.TabGroupChatPlan;
import com.gic.haoban.manage.service.entity.chat.TabGroupChatPlanLog;
import com.gic.haoban.manage.service.entity.chat.TabGroupChatPlanOwnerLog;
......@@ -85,6 +87,8 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
private StoreService storeService;
@Autowired
private QuartzService quartzService;
@Autowired
private GroupChatOwnerMapper groupChatOwnerMapper;
private static GicMQClient mqClient = GICMQClientUtil.getClientInstance();
......@@ -153,8 +157,8 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
logger.info("计划已执行过,planid={}", planId);
return;
}
this.groupChatPlanMapper.updateSendFlag(planId);
// 控制重复发送
this.groupChatPlanMapper.updateSendFlag(planId);
String[] staffIdList = plan.getStaffIdList().split(",");
String wxEnterpriseId = plan.getWxEnterpriseId();
String enterpriseId = plan.getEnterpriseId();
......@@ -178,8 +182,9 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
ownerDTO.setSendStatus(0);
}
// 群主群数量
TabGroupChatOwner owner = this.groupChatOwnerMapper.selectByStaffId(staffId);
ownerDTO.setExpireDate(DateUtil.addDay(new Date(), plan.getExpireDays()));
ownerDTO.setTotalCount(0);
ownerDTO.setTotalCount(owner.getChatCount());
ownerDTO.setWxEnterpriseId(wxEnterpriseId);
ownerDTO.setEnterpriseId(enterpriseId);
ownerDTO.setStaffId(staffId);
......
......@@ -142,8 +142,8 @@
<if test="null != startDate">
and create_time >= #{startDate} and create_time <![CDATA[<=]]> #{endDate}
</if>
<if test="null != searchParams">
and plan like '%${searchParams}%'
<if test="null != searchParams and '' !=searchParams ">
and name like '%${searchParams}%'
</if>
</select>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment