Commit 093d8dd9 by 徐高华

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

Feature/社群

See merge request !516
parents 6b944b21 1a8ebe50
......@@ -56,4 +56,14 @@ public interface HaobanTimerApiService {
*/
public ServiceResponse<Void> handChatNotice(String params);
/**
*
* @Title: handChatNotice
* @Description: 收到建群事件后,初始化群
* @author xugh
* @param params
* @return
* @throws
*/
public ServiceResponse<Void> initGroupChat(String params);
}
......@@ -5,6 +5,10 @@ import com.gic.haoban.manage.api.dto.chat.ChatEventDTO;
public interface GroupChatApiService {
// 群列表
// 群详情
/**
*
* @Title: qwEventNotice
......
package com.gic.haoban.manage.api.service.chat;
/**
*
* @ClassName: GroupChatPlanApiService
* @Description: 群群发
* @author xugh
* @date 2022年12月1日 下午10:58:07
*
*/
public interface GroupChatPlanApiService {
// 群列表
// 群详情
}
......@@ -35,5 +35,5 @@ public interface GroupChatMapper {
public TabGroupChat selectByWxChatId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("wxChatId") String wxChatId);
public List<TabGroupChat> listAll(TabGroupChat tabHaobanGroupChat);
public List<TabGroupChat> listAllNeedInit();
}
\ No newline at end of file
......@@ -50,10 +50,18 @@ public class TabGroupChat implements Serializable{
private Integer quitMemberCount;
/**gic企业ID*/
private String enterpriseId;
/**gic侧状态1可用,2不可用*/
private Integer statusFlag;
private Integer initFlag ;
public void setGroupChatId(Long groupChatId){
public Integer getInitFlag() {
return initFlag;
}
public void setInitFlag(Integer initFlag) {
this.initFlag = initFlag;
}
public void setGroupChatId(Long groupChatId){
this.groupChatId = groupChatId;
}
......
......@@ -16,4 +16,7 @@ public interface GroupChatService {
// 处理企微群事件
public void handChatNotice(String params);
// 定时初始化新建的群
public void initGroupChatForTimer(String params);
}
\ No newline at end of file
package com.gic.haoban.manage.service.service.chat.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
......@@ -64,6 +65,10 @@ public class GroupChatServiceImpl implements GroupChatService {
private SecretSettingService secretSettingService;
@Autowired
private ChatNoticeMapper chatNoticeMapper;
// 每次拉取成员数
private int pageSize = 10;
// 每次拉取群数
private int limit = 1;
@Override
public void createChat(String corpid, String wxChatId) {
......@@ -133,7 +138,7 @@ public class GroupChatServiceImpl implements GroupChatService {
this.updateGroupChatDetail(qwDTO, groupChatId, false);
}
if (type == 2) {
this.updateChatStatus(qwDTO, groupChatId);
}
if (type == 3) {
this.updateGroupChatDetail(qwDTO, groupChatId, true);
......@@ -142,6 +147,48 @@ public class GroupChatServiceImpl implements GroupChatService {
}
@Override
public void initGroupChatForTimer(String params) {
List<TabGroupChat> list = this.groupChatMapper.listAllNeedInit();
if (list.isEmpty()) {
return;
}
logger.info("待初始化群数={}", list.size());
for (TabGroupChat item : list) {
String wxEnterpriseId = item.getWxEnterpriseId();
Long groupChatId = item.getGroupChatId();
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
this.updateGroupChatDetail(qwDTO, groupChatId, true);
}
}
// 更新群状态
public void updateChatStatus(WxEnterpriseQwDTO qwDTO, Long groupChatId) {
TabGroupChat chat = this.groupChatMapper.selectById(groupChatId);
if (null == chat) {
logger.info("群主变更事件,群不存在");
return;
}
String staffId = chat.getStaffId();
if (StringUtils.isBlank(staffId)) {
logger.info("群主staffid不存在,groupChatId={}", groupChatId);
return;
}
TabHaobanStaff staff = this.staffMapper.selectByPrimaryKey(staffId);
if (null == staff) {
logger.info("群主已删除,staffid={}", staffId);
return;
}
String userId = staff.getWxUserId();
if (qwDTO.needOpenUserIdDk()) {
userId = staff.getWxOpenUseId();
}
this.syncGroupChat(qwDTO, Arrays.asList(userId), null, false);
}
/**
* 初始化整个群数据,拉取所有成员的所有群,并立即获取群信息、群成员、同时也会匹配客户标识
*/
@Override
public void initEnterpriseGroupChat(String wxEnterpriseId) {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
if (null == qwDTO) {
......@@ -149,7 +196,6 @@ public class GroupChatServiceImpl implements GroupChatService {
return;
}
int pageNum = 0;
int pageSize = 10;
while (true) {
List<TabHaobanStaff> staffList = this.staffMapper.listAllByPage(wxEnterpriseId, pageNum * pageSize,
pageSize);
......@@ -166,16 +212,16 @@ public class GroupChatServiceImpl implements GroupChatService {
.map(dto -> dto.getWxUserId()).collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(userIdList)) {
this.syncGroupChat(qwDTO, userIdList, null);
this.syncGroupChat(qwDTO, userIdList, null, true);
}
pageNum++;
}
}
// 同步成员的群
private void syncGroupChat(WxEnterpriseQwDTO qwDTO, List<String> userIdList, String cursor) {
private void syncGroupChat(WxEnterpriseQwDTO qwDTO, List<String> userIdList, String cursor,
boolean syncDetailFlag) {
logger.info("qwDTO={},idlist={},cursor={}", JSON.toJSONString(qwDTO), JSON.toJSONString(userIdList), cursor);
int limit = 1;
SecretSettingDTO secretSetting = secretSettingService.getSecretSetting(qwDTO.getWxEnterpriseId(),
SecretTypeEnum.CUSTOMIZED_APP.getVal());
if (null == secretSetting) {
......@@ -194,20 +240,24 @@ public class GroupChatServiceImpl implements GroupChatService {
for (GroupChatListItemDTO item : list) {
String wxChatId = item.getChat_id();
int chatStatus = item.getStatus();
this.insertGroupChat(qwDTO, wxChatId, chatStatus, true);
this.insertGroupChat(qwDTO, wxChatId, chatStatus, syncDetailFlag);
}
// 从企微拉取下一批数据
if (org.apache.commons.lang3.StringUtils.isNotBlank(cursor)) {
this.syncGroupChat(qwDTO, userIdList, cursor);
this.syncGroupChat(qwDTO, userIdList, cursor, syncDetailFlag);
}
}
// 新增群记录
/**
* 新增群记录, 如果是更新,只更新群状态,新增只记录群id和群状态,其他数据都在详情修改维护
*/
private void insertGroupChat(WxEnterpriseQwDTO qwDTO, String wxChatId, int chatStatus, boolean syncDetailFlag) {
TabGroupChat groupChat = this.groupChatMapper.selectByWxChatId(qwDTO.getWxEnterpriseId(), wxChatId);
Long groupChatId = null;
if (null != groupChat) {
groupChatId = groupChat.getGroupChatId();
logger.info("群已存在,chatid={},groupChatId={}", wxChatId, groupChatId);
this.groupChatMapper.updateChatStatus(groupChatId, chatStatus);
} else {
groupChatId = UniqueIdUtils.uniqueLong();
TabGroupChat chat = new TabGroupChat();
......@@ -232,7 +282,7 @@ public class GroupChatServiceImpl implements GroupChatService {
}
}
private void initGroupChatDetail(WxEnterpriseQwDTO qwDTO, TabGroupChat chat, boolean syncMember) {
private void updateGroupChatDetail(WxEnterpriseQwDTO qwDTO, TabGroupChat chat, boolean syncMember) {
// 控制同时刷新
Long groupChatId = chat.getGroupChatId();
String wxEnterpriseId = chat.getWxEnterpriseId();
......@@ -323,7 +373,7 @@ public class GroupChatServiceImpl implements GroupChatService {
// 初始化群信息-不包括群状态
private void updateGroupChatDetail(WxEnterpriseQwDTO qwDTO, Long groupChatId, boolean syncMember) {
TabGroupChat chat = this.groupChatMapper.selectById(groupChatId);
this.initGroupChatDetail(qwDTO, chat, syncMember);
this.updateGroupChatDetail(qwDTO, chat, syncMember);
}
// 匹配群成员-客户
......
......@@ -45,5 +45,11 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
this.groupChatService.handChatNotice(params);
return ServiceResponse.success();
}
@Override
public ServiceResponse<Void> initGroupChat(String params) {
this.groupChatService.initGroupChatForTimer(params);
return ServiceResponse.success();
}
}
package com.gic.haoban.manage.service.service.out.impl.chat;
import org.springframework.stereotype.Service;
import com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService;
@Service("groupChatPlanApiService")
public class GroupChatPlanApiServiceImpl implements GroupChatPlanApiService {
}
......@@ -22,6 +22,7 @@
<constructor-arg index="0" value="haoban-manage-service"/>
</bean>
<dubbo:service interface="com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService" ref="groupChatPlanApiService" timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.chat.GroupChatHmApiService" ref="groupChatHmApiService" timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.chat.GroupChatApiService" ref="groupChatApiService" timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.HaobanCommonMQApiService" ref="haobanCommonMQApiService" timeout="10000"/>
......
......@@ -23,6 +23,7 @@
<result column="quit_member_count" property="quitMemberCount" />
<result column="enterprise_id" property="enterpriseId" />
<result column="status_flag" property="statusFlag" />
<result column="init_flag" property="initFlag" />
</resultMap>
<sql id="Base_Column_List">
group_chat_id,
......@@ -44,7 +45,7 @@
quit_count,
quit_member_count,
enterprise_id,
status_flag
status_flag , init_flag
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert"
......@@ -70,28 +71,28 @@
quit_count,
quit_member_count,
enterprise_id,
status_flag
status_flag , init_flag
)VALUES(
#{groupChatId,jdbcType=BIGINT},
#{wxEnterpriseId,jdbcType=CHAR},
#{name,jdbcType=VARCHAR},
#{staffId,jdbcType=CHAR},
#{wxChatId,jdbcType=VARCHAR},
#{chatAddTime,jdbcType=TIMESTAMP},
#{chatDissolveTime,jdbcType=TIMESTAMP},
#{chatNotice,jdbcType=VARCHAR},
#{chatStatus,jdbcType=INTEGER},
#{createTime,jdbcType=TIMESTAMP},
#{updateTime,jdbcType=TIMESTAMP},
#{deleteFlag,jdbcType=INTEGER},
#{totalCount,jdbcType=INTEGER},
#{totalMemberCount,jdbcType=INTEGER},
#{addMemberCount,jdbcType=INTEGER},
#{addCount,jdbcType=INTEGER},
#{quitCount,jdbcType=INTEGER},
#{quitMemberCount,jdbcType=INTEGER},
#{enterpriseId,jdbcType=CHAR},
#{statusFlag,jdbcType=INTEGER}
#{groupChatId},
#{wxEnterpriseId},
#{name},
#{staffId},
#{wxChatId},
#{chatAddTime},
#{chatDissolveTime},
#{chatNotice},
#{chatStatus},
#{createTime},
#{updateTime},
#{deleteFlag},
#{totalCount},
#{totalMemberCount},
#{addMemberCount},
#{addCount},
#{quitCount},
#{quitMemberCount},
#{enterpriseId},
#{statusFlag} , #{initFlag}
)
]]>
</insert>
......@@ -109,15 +110,16 @@
parameterType="com.gic.haoban.manage.service.entity.chat.TabGroupChat">
<![CDATA[
UPDATE tab_haoban_group_chat SET
group_chat_id=#{groupChatId,jdbcType=BIGINT},
name=#{name,jdbcType=VARCHAR},
staff_id=#{staffId,jdbcType=CHAR},
chat_add_time=#{chatAddTime,jdbcType=TIMESTAMP},
chat_dissolve_time=#{chatDissolveTime,jdbcType=TIMESTAMP},
chat_notice=#{chatNotice,jdbcType=VARCHAR},
chat_status=#{chatStatus,jdbcType=INTEGER},
group_chat_id=#{groupChatId},
name=#{name},
staff_id=#{staffId},
chat_add_time=#{chatAddTime},
chat_dissolve_time=#{chatDissolveTime},
chat_notice=#{chatNotice},
chat_status=#{chatStatus},
update_time=now(),
status_flag=#{statusFlag,jdbcType=INTEGER}
status_flag=#{statusFlag},
init_flag = 1
where group_chat_id = #{groupChatId}
]]>
</update>
......@@ -160,9 +162,7 @@
and delete_flag = 0
</select>
<select id="listAll"
parameterType="com.gic.haoban.manage.service.entity.chat.TabGroupChat"
resultMap="result-map-tabHaobanGroupChat">
select * from tab_haoban_group_chat
<select id="listAllNeedInit" resultMap="result-map-tabHaobanGroupChat">
select <include refid="Base_Column_List" /> from tab_haoban_group_chat where create_time > DATE_ADD(NOW(),INTERVAL -7 day) and init_flag = 0
</select>
</mapper>
\ No newline at end of file
......@@ -150,6 +150,6 @@
</select>
<select id="listAllChatUser" resultMap="result-map-tabHaobanGroupChatUser">
select <include refid="Base_Column_List" /> from tab_haoban_group_chat_user where group_chat_id = #{groupChatId} and wx_enterprise_id = #{wxEnterpriseId} and delete_flag = 0
select <include refid="Base_Column_List" /> from tab_haoban_group_chat_user where group_chat_id = #{groupChatId} and wx_enterprise_id = #{wxEnterpriseId} and status_flag = 1 and delete_flag = 0
</select>
</mapper>
\ No newline at end of file
......@@ -14,6 +14,8 @@
<dubbo:application name="haoban-manage3-web"/>
<dubbo:protocol name="dubbo" port="30009"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService" id="groupChatPlanApiService" timeout="10000"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.chat.GroupChatApiService" id="groupChatApiService" timeout="10000"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.chat.GroupChatHmApiService" id="groupChatHmApiService" timeout="10000"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.QwFriendApiService" id="qwFriendApiService" timeout="10000"/>
......
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