Commit d202f3c0 by 徐高华

代码优化

parent c0157cc7
...@@ -25,4 +25,7 @@ public class Manage3Constants { ...@@ -25,4 +25,7 @@ public class Manage3Constants {
* 企微最大分页 * 企微最大分页
*/ */
public static final Integer QW_LIMIT = 1000; public static final Integer QW_LIMIT = 1000;
// 群群发统计
public static final Integer CHAT_PLAN_PAGE_SIZE = 1 ;
} }
...@@ -56,25 +56,26 @@ public interface GroupChatApiService { ...@@ -56,25 +56,26 @@ public interface GroupChatApiService {
/** /**
* *
* @Title: refreshChatInfo * @Title: refreshChatInfo
* @Description: 刷新群信息 * @Description: 刷新群
* @author xugh * @author xugh
* @param groupChatId * @param groupChatId
* @return * @return
* @throws * @throws
*/ */
public ServiceResponse<Void> refreshChatInfo(Long groupChatId); public ServiceResponse<Void> refreshChatInfoFromMQ(String params);
/** /**
* *
* @Title: refreshChatInfo * @Title: refreshChatStatus
* @Description: 刷新群信息,从队列获取 * @Description: 刷新群的状态
* @author xugh * @author xugh
* @param groupChatId * @param params
* @return * @return
* @throws * @throws
*/ */
public ServiceResponse<Void> refreshChatInfoFromMQ(String params); public ServiceResponse<Void> refreshChatStatusFromMQ(String params) ;
/** /**
* *
* @Title: updateChatEnterpriseId * @Title: updateChatEnterpriseId
......
...@@ -21,6 +21,8 @@ public interface GroupChatUserMapper { ...@@ -21,6 +21,8 @@ public interface GroupChatUserMapper {
public int insert(TabGroupChatUser tabHaobanGroupChatUser); public int insert(TabGroupChatUser tabHaobanGroupChatUser);
public int batchInsert(@Param("list")List<TabGroupChatUser> userList);
public int dismiss(@Param("idList") List<Long> chatUserIdList, @Param("ownerId") String ownerId); public int dismiss(@Param("idList") List<Long> chatUserIdList, @Param("ownerId") String ownerId);
public int update(TabGroupChatUser tabHaobanGroupChatUser); public int update(TabGroupChatUser tabHaobanGroupChatUser);
......
package com.gic.haoban.manage.service.entity.chat; package com.gic.haoban.manage.service.entity.chat;
import java.io.Serializable ; import java.io.Serializable;
/** /**
* *
...@@ -11,51 +11,51 @@ import java.io.Serializable ; ...@@ -11,51 +11,51 @@ import java.io.Serializable ;
* @Modify * @Modify
* @CopyRight * @CopyRight
*/ */
public class TabGroupChatUser implements Serializable{ public class TabGroupChatUser implements Serializable {
private static final long serialVersionUID = 21771431486600L; private static final long serialVersionUID = 21771431486600L;
private Long chatUserId; private Long chatUserId;
/**微信企业id*/ /**微信企业id*/
private String wxEnterpriseId; private String wxEnterpriseId;
private String enterpriseId; private String enterpriseId;
/**1企业成员2外部联系人3客户*/ /**1企业成员2外部联系人3客户*/
private Integer userType; private Integer userType;
/**入群时间*/ /**入群时间*/
private java.util.Date joinTime; private java.util.Date joinTime;
/**姓名*/ /**姓名*/
private String userName; private String userName;
/**昵称*/ /**昵称*/
private String nickName; private String nickName;
/**群成员id*/ /**群成员id*/
private String userId; private String userId;
/**unionid*/ /**unionid*/
private String unionid; private String unionid;
private String memberId; private String memberId;
/**邀请者*/ /**邀请者*/
private String invitorUserId; private String invitorUserId;
private String invitorUserName ; private String invitorUserName;
private java.util.Date createTime; private java.util.Date createTime;
private java.util.Date updateTime; private java.util.Date updateTime;
/**1是0否*/ /**1是0否*/
private Integer deleteFlag; private Integer deleteFlag;
/**群id*/ /**群id*/
private Long groupChatId; private Long groupChatId;
/**1有效 2已退群*/ /**1有效 2已退群*/
private Integer statusFlag; private Integer statusFlag;
/**用户退群时间*/ /**用户退群时间*/
private java.util.Date userQuitTime; private java.util.Date userQuitTime;
/**0自己退群 1 - 群主/群管理员移出*/ /**0自己退群 1 - 群主/群管理员移出*/
private Integer quitScene; private Integer quitScene;
/**0 - 由成员邀请入群(包括直接邀请入群和通过邀请链接入群)3 - 通过扫描群二维码入群*/ /**0 - 由成员邀请入群(包括直接邀请入群和通过邀请链接入群)3 - 通过扫描群二维码入群*/
private Integer joinScene; private Integer joinScene;
/**入群说明*/ /**入群说明*/
private String joinRemark; private String joinRemark;
private String joinState; private String joinState;
// 0 成员 1群主 2管理员 // 0 成员 1群主 2管理员
private Integer adminFlag ; private Integer adminFlag = 0;
public Integer getAdminFlag() { public Integer getAdminFlag() {
return adminFlag; return adminFlag;
} }
...@@ -71,151 +71,171 @@ public class TabGroupChatUser implements Serializable{ ...@@ -71,151 +71,171 @@ public class TabGroupChatUser implements Serializable{
this.invitorUserName = invitorUserName; this.invitorUserName = invitorUserName;
} }
public void setChatUserId(Long chatUserId){ public void setChatUserId(Long chatUserId) {
this.chatUserId = chatUserId; this.chatUserId = chatUserId;
} }
public Long getChatUserId(){ public Long getChatUserId() {
return chatUserId; return chatUserId;
} }
public void setWxEnterpriseId(String wxEnterpriseId){
this.wxEnterpriseId = wxEnterpriseId; public void setWxEnterpriseId(String wxEnterpriseId) {
} this.wxEnterpriseId = wxEnterpriseId;
}
public String getWxEnterpriseId(){
return wxEnterpriseId; public String getWxEnterpriseId() {
} return wxEnterpriseId;
public void setEnterpriseId(String enterpriseId){ }
this.enterpriseId = enterpriseId;
} public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
public String getEnterpriseId(){ }
return enterpriseId;
} public String getEnterpriseId() {
public void setUserType(Integer userType){ return enterpriseId;
this.userType = userType; }
}
public void setUserType(Integer userType) {
public Integer getUserType(){ this.userType = userType;
return userType; }
}
public void setJoinTime(java.util.Date joinTime){ public Integer getUserType() {
this.joinTime = joinTime; return userType;
} }
public java.util.Date getJoinTime(){ public void setJoinTime(java.util.Date joinTime) {
return joinTime; this.joinTime = joinTime;
} }
public void setUserName(String userName){
this.userName = userName; public java.util.Date getJoinTime() {
} return joinTime;
}
public String getUserName(){
return userName; public void setUserName(String userName) {
} this.userName = userName;
public void setNickName(String nickName){ }
this.nickName = nickName;
} public String getUserName() {
return userName;
public String getNickName(){ }
return nickName;
} public void setNickName(String nickName) {
public void setUserId(String userId){ this.nickName = nickName;
this.userId = userId; }
}
public String getNickName() {
public String getUserId(){ return nickName;
return userId; }
}
public void setUnionid(String unionid){ public void setUserId(String userId) {
this.unionid = unionid; this.userId = userId;
} }
public String getUnionid(){ public String getUserId() {
return unionid; return userId;
} }
public void setMemberId(String memberId){
this.memberId = memberId; public void setUnionid(String unionid) {
} this.unionid = unionid;
}
public String getMemberId(){
return memberId; public String getUnionid() {
} return unionid;
public void setInvitorUserId(String invitorUserId){ }
this.invitorUserId = invitorUserId;
} public void setMemberId(String memberId) {
this.memberId = memberId;
public String getInvitorUserId(){ }
return invitorUserId;
} public String getMemberId() {
public void setCreateTime(java.util.Date createTime){ return memberId;
this.createTime = createTime; }
}
public void setInvitorUserId(String invitorUserId) {
public java.util.Date getCreateTime(){ this.invitorUserId = invitorUserId;
return createTime; }
}
public void setUpdateTime(java.util.Date updateTime){ public String getInvitorUserId() {
this.updateTime = updateTime; return invitorUserId;
} }
public java.util.Date getUpdateTime(){ public void setCreateTime(java.util.Date createTime) {
return updateTime; this.createTime = createTime;
} }
public void setDeleteFlag(Integer deleteFlag){
this.deleteFlag = deleteFlag; public java.util.Date getCreateTime() {
} return createTime;
}
public Integer getDeleteFlag(){
return deleteFlag; public void setUpdateTime(java.util.Date updateTime) {
} this.updateTime = updateTime;
public void setGroupChatId(Long groupChatId){ }
this.groupChatId = groupChatId;
} public java.util.Date getUpdateTime() {
return updateTime;
public Long getGroupChatId(){ }
return groupChatId;
} public void setDeleteFlag(Integer deleteFlag) {
public void setStatusFlag(Integer statusFlag){ this.deleteFlag = deleteFlag;
this.statusFlag = statusFlag; }
}
public Integer getDeleteFlag() {
public Integer getStatusFlag(){ return deleteFlag;
return statusFlag; }
}
public void setUserQuitTime(java.util.Date userQuitTime){ public void setGroupChatId(Long groupChatId) {
this.userQuitTime = userQuitTime; this.groupChatId = groupChatId;
} }
public java.util.Date getUserQuitTime(){ public Long getGroupChatId() {
return userQuitTime; return groupChatId;
} }
public void setQuitScene(Integer quitScene){
this.quitScene = quitScene; public void setStatusFlag(Integer statusFlag) {
} this.statusFlag = statusFlag;
}
public Integer getQuitScene(){
return quitScene; public Integer getStatusFlag() {
} return statusFlag;
public void setJoinScene(Integer joinScene){ }
this.joinScene = joinScene;
} public void setUserQuitTime(java.util.Date userQuitTime) {
this.userQuitTime = userQuitTime;
public Integer getJoinScene(){ }
return joinScene;
} public java.util.Date getUserQuitTime() {
public void setJoinRemark(String joinRemark){ return userQuitTime;
this.joinRemark = joinRemark; }
}
public void setQuitScene(Integer quitScene) {
public String getJoinRemark(){ this.quitScene = quitScene;
return joinRemark; }
}
public void setJoinState(String joinState){ public Integer getQuitScene() {
this.joinState = joinState; return quitScene;
} }
public String getJoinState(){ public void setJoinScene(Integer joinScene) {
return joinState; this.joinScene = joinScene;
} }
public Integer getJoinScene() {
return joinScene;
}
public void setJoinRemark(String joinRemark) {
this.joinRemark = joinRemark;
}
public String getJoinRemark() {
return joinRemark;
}
public void setJoinState(String joinState) {
this.joinState = joinState;
}
public String getJoinState() {
return joinState;
}
} }
\ No newline at end of file
...@@ -39,7 +39,17 @@ public interface GroupChatService { ...@@ -39,7 +39,17 @@ public interface GroupChatService {
* @param chatHmId * @param chatHmId
* @throws * @throws
*/ */
public void refreshChatInfo(Long chatHmId); public void refreshChatInfo(Long groupChatId);
/**
*
* @Title: refreshChatStatus
* @Description: 刷新群的状态
* @author xugh
* @param groupChatId
* @throws
*/
public void refreshChatStatus(Long groupChatId);
/** /**
* *
......
...@@ -111,6 +111,9 @@ public class GroupChatPlanOwnerLogServiceImpl implements GroupChatPlanOwnerLogSe ...@@ -111,6 +111,9 @@ public class GroupChatPlanOwnerLogServiceImpl implements GroupChatPlanOwnerLogSe
@Override @Override
public void batchAdd(String staffIdList, TabGroupChatPlan entity) { public void batchAdd(String staffIdList, TabGroupChatPlan entity) {
if (StringUtils.isBlank(staffIdList)) {
return;
}
String[] arr = staffIdList.split(","); String[] arr = staffIdList.split(",");
List<TabGroupChatPlanOwnerLog> logList = new ArrayList<>(); List<TabGroupChatPlanOwnerLog> logList = new ArrayList<>();
for (int i = 0; i < arr.length; i++) { for (int i = 0; i < arr.length; i++) {
...@@ -132,7 +135,7 @@ public class GroupChatPlanOwnerLogServiceImpl implements GroupChatPlanOwnerLogSe ...@@ -132,7 +135,7 @@ public class GroupChatPlanOwnerLogServiceImpl implements GroupChatPlanOwnerLogSe
@Override @Override
public void update(TabGroupChatPlanOwnerLog entity) { public void update(TabGroupChatPlanOwnerLog entity) {
String staffId = entity.getStaffId() ; String staffId = entity.getStaffId();
TabHaobanClerkMainStoreRelated mainStore = this.clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, TabHaobanClerkMainStoreRelated mainStore = this.clerkMainStoreRelatedService.getMainStoreByStaffId(staffId,
entity.getWxEnterpriseId()); entity.getWxEnterpriseId());
if (null == mainStore) { if (null == mainStore) {
...@@ -159,8 +162,14 @@ public class GroupChatPlanOwnerLogServiceImpl implements GroupChatPlanOwnerLogSe ...@@ -159,8 +162,14 @@ public class GroupChatPlanOwnerLogServiceImpl implements GroupChatPlanOwnerLogSe
@Override @Override
public void deleteByStaffIds(Long planId, String delStaffIds) { public void deleteByStaffIds(Long planId, String delStaffIds) {
if (StringUtils.isBlank(delStaffIds)) {
return;
}
String[] arr = delStaffIds.split(","); String[] arr = delStaffIds.split(",");
List<String> delStaffIdList = Arrays.asList(arr); List<String> delStaffIdList = Arrays.asList(arr);
if (CollectionUtils.isEmpty(delStaffIdList)) {
return;
}
this.groupChatPlanOwnerLogMapper.deleteByStaffIds(planId, delStaffIdList); this.groupChatPlanOwnerLogMapper.deleteByStaffIds(planId, delStaffIdList);
} }
......
...@@ -31,6 +31,7 @@ import com.gic.dubbo.entity.ProviderLocalTag; ...@@ -31,6 +31,7 @@ import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.enterprise.api.dto.StoreDTO; import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService; import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.common.utils.DingUtils; import com.gic.haoban.common.utils.DingUtils;
import com.gic.haoban.manage.api.constants.Manage3Constants;
import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO; import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO;
import com.gic.haoban.manage.api.dto.chat.GroupChatPlanDTO; import com.gic.haoban.manage.api.dto.chat.GroupChatPlanDTO;
import com.gic.haoban.manage.api.dto.chat.GroupChatPlanLogDTO; import com.gic.haoban.manage.api.dto.chat.GroupChatPlanLogDTO;
...@@ -101,7 +102,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService { ...@@ -101,7 +102,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
// 发送队列 // 发送队列
private void putMQForSend(Long id) { private void putMQForSend(Long id) {
try { try {
mqClient.sendCommonMessage("haobanCommonRouter", id + "", mqClient.sendCommonMessage("haobanChatMQ", id + "",
"com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService", "doPlanTimer"); "com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService", "doPlanTimer");
} catch (Exception e) { } catch (Exception e) {
logger.error("发送MQ异常"); logger.error("发送MQ异常");
...@@ -112,7 +113,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService { ...@@ -112,7 +113,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
// 统计队列 // 统计队列
private void putMQForData(Long id) { private void putMQForData(Long id) {
try { try {
mqClient.sendCommonMessage("haobanCommonRouter", id + "", mqClient.sendCommonMessage("haobanChatMQ", id + "",
"com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService", "doPlanSendInfoTimer"); "com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService", "doPlanSendInfoTimer");
} catch (Exception e) { } catch (Exception e) {
logger.error("发送MQ异常"); logger.error("发送MQ异常");
...@@ -145,20 +146,16 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService { ...@@ -145,20 +146,16 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
} else { } else {
this.groupChatPlanMapper.updateById(entity); this.groupChatPlanMapper.updateById(entity);
// 删除本次删除的 // 删除本次删除的
String delStaffIdList = dto.getDelStaffIdList(); this.groupChatPlanOwnerLogService.deleteByStaffIds(planId, dto.getDelStaffIdList());
if (StringUtils.isNotBlank(delStaffIdList)) {
this.groupChatPlanOwnerLogService.deleteByStaffIds(planId, delStaffIdList);
}
// 新增本次新增的 // 新增本次新增的
if (StringUtils.isNotBlank(staffIdList)) { this.groupChatPlanOwnerLogService.batchAdd(staffIdList, entity);
this.groupChatPlanOwnerLogService.batchAdd(staffIdList, entity);
}
} }
// 立即发送 // 立即发送
if (entity.getSendType() == 1) { if (entity.getSendType() == 1) {
this.putMQForSend(entity.getPlanId()); this.addOrDelTimer(planId, entity.getSendTime(), 0);
this.putMQForSend(planId);
} else { } else {
this.addOrDelTimer(entity.getPlanId(), entity.getSendTime(), 1); this.addOrDelTimer(planId, entity.getSendTime(), 1);
} }
} }
...@@ -200,7 +197,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService { ...@@ -200,7 +197,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
madidList.add(json.getString("relation_id")); madidList.add(json.getString("relation_id"));
} }
int pageNum = 0; int pageNum = 0;
int pageSize = 1; int pageSize = Manage3Constants.CHAT_PLAN_PAGE_SIZE;
List<TabGroupChatPlanOwnerLog> ownerList = null; List<TabGroupChatPlanOwnerLog> ownerList = null;
while (true) { while (true) {
ownerList = this.groupChatPlanOwnerLogMapper.listForDoPlan(planId, pageNum * pageSize, pageSize); ownerList = this.groupChatPlanOwnerLogMapper.listForDoPlan(planId, pageNum * pageSize, pageSize);
......
...@@ -3,6 +3,7 @@ package com.gic.haoban.manage.service.service.chat.impl; ...@@ -3,6 +3,7 @@ package com.gic.haoban.manage.service.service.chat.impl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -125,15 +126,27 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -125,15 +126,27 @@ public class GroupChatServiceImpl implements GroupChatService {
private static GicMQClient mqClient = GICMQClientUtil.getClientInstance(); private static GicMQClient mqClient = GICMQClientUtil.getClientInstance();
// 每次拉取成员数 // 每次拉取成员数
private int pageSize = 10; private int pageSize = 8;
// 每次拉取群数 // 每次拉取群数
private int limit = 1; private int limit = 1;
// 群下线成员数 // 群下线成员数
private int offNum = 200; private int offNum = 200;
private void sendMQ(String params) { // 刷新群
private void putMQRefreshChat(String params) {
try { try {
mqClient.sendCommonMessage("haobanCommonRouter", params, mqClient.sendCommonMessage("haobanChatMQ", params,
"com.gic.haoban.manage.api.service.chat.GroupChatApiService", "refreshChatInfoFromMQ");
} catch (Exception e) {
logger.error("发送MQ异常");
e.printStackTrace();
}
}
// 刷新群状态
private void putMQRefreshChatStatus(String params) {
try {
mqClient.sendCommonMessage("haobanChatMQ", params,
"com.gic.haoban.manage.api.service.chat.GroupChatApiService", "refreshChatInfoFromMQ"); "com.gic.haoban.manage.api.service.chat.GroupChatApiService", "refreshChatInfoFromMQ");
} catch (Exception e) { } catch (Exception e) {
logger.error("发送MQ异常"); logger.error("发送MQ异常");
...@@ -203,7 +216,7 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -203,7 +216,7 @@ public class GroupChatServiceImpl implements GroupChatService {
logger.info("刷新群信息={}", groupChatId); logger.info("刷新群信息={}", groupChatId);
TabGroupChat chat = this.groupChatMapper.selectById(groupChatId); TabGroupChat chat = this.groupChatMapper.selectById(groupChatId);
if (null == chat) { if (null == chat) {
logger.info("群不存在"); logger.info("群不存在,groupChatId={}", groupChatId);
return; return;
} }
String wxEnterpriseId = chat.getWxEnterpriseId(); String wxEnterpriseId = chat.getWxEnterpriseId();
...@@ -254,7 +267,7 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -254,7 +267,7 @@ public class GroupChatServiceImpl implements GroupChatService {
// 更新后重新同步群数据 // 更新后重新同步群数据
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
json.put("groupChatIdList", groupChatIdList); json.put("groupChatIdList", groupChatIdList);
this.sendMQ(json.toJSONString()); this.putMQRefreshChat(json.toJSONString());
} }
// 处理群通知 // 处理群通知
...@@ -348,7 +361,7 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -348,7 +361,7 @@ public class GroupChatServiceImpl implements GroupChatService {
} }
// 更新群状态 // 更新群状态
public void updateChatStatus(WxEnterpriseQwDTO qwDTO, Long groupChatId) { private void updateChatStatus(WxEnterpriseQwDTO qwDTO, Long groupChatId) {
logger.info("更新群状态,groupchatId={}", groupChatId); logger.info("更新群状态,groupchatId={}", groupChatId);
TabGroupChat chat = this.groupChatMapper.selectById(groupChatId); TabGroupChat chat = this.groupChatMapper.selectById(groupChatId);
if (null == chat) { if (null == chat) {
...@@ -555,7 +568,6 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -555,7 +568,6 @@ public class GroupChatServiceImpl implements GroupChatService {
} }
private void updateGroupChatDetail(WxEnterpriseQwDTO qwDTO, TabGroupChat chat, boolean syncMember) { private void updateGroupChatDetail(WxEnterpriseQwDTO qwDTO, TabGroupChat chat, boolean syncMember) {
// 控制同时刷新
Long groupChatId = chat.getGroupChatId(); Long groupChatId = chat.getGroupChatId();
String wxEnterpriseId = chat.getWxEnterpriseId(); String wxEnterpriseId = chat.getWxEnterpriseId();
String enterpriseId = chat.getEnterpriseId(); String enterpriseId = chat.getEnterpriseId();
...@@ -567,170 +579,74 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -567,170 +579,74 @@ public class GroupChatServiceImpl implements GroupChatService {
return; return;
} }
GroupChatDetailDTO detail = detailResp.getResult(); GroupChatDetailDTO detail = detailResp.getResult();
String owner = detail.getOwner();
TabHaobanStaff staff = this.staffMapper.selectByUserIdAndEnterpriseId(owner, wxEnterpriseId);
if (null == staff) {
logger.info("群主staff查不到,不处理,owner={}", owner);
return;
}
String chatName = this.emoji(detail.getName()); String chatName = this.emoji(detail.getName());
String notice = this.emoji(detail.getNotice()); String notice = this.emoji(detail.getNotice());
chat.setGroupChatId(groupChatId); chat.setGroupChatId(groupChatId);
chat.setChatAddTime(new Date(detail.getCreate_time() * 1000)); chat.setChatAddTime(new Date(detail.getCreate_time() * 1000));
chat.setChatNotice(notice); chat.setChatNotice(notice);
chat.setName(chatName); chat.setName(chatName);
// 处理群主
String owner = detail.getOwner();
TabHaobanStaff staff = this.staffMapper.selectByUserIdAndEnterpriseId(owner, wxEnterpriseId);
String newStaffId = null;
String oldStaffId = chat.getStaffId();
if (null != staff) {
// 更新staff
newStaffId = staff.getStaffId();
chat.setStaffId(staff.getStaffId());
} else {
chat.setStaffId(null);
logger.info("群主未关联好办,不同步群成员,userid={}", owner);
}
// 匹配GIC商户ID ,如果已经初始化过,不再自动匹配GIC商户 // 匹配GIC商户ID ,如果已经初始化过,不再自动匹配GIC商户
if (chat.getInitFlag() == 0) { if (chat.getInitFlag() == 0) {
if (StringUtils.isBlank(enterpriseId)) { enterpriseId = matchGicEnterpriseId(wxEnterpriseId, enterpriseId, staff);
List<TabHaobanWxEnterpriseRelated> list = this.wxEnterpriseRelatedService chat.setEnterpriseId(enterpriseId);
.getByWxEnterpriseId(wxEnterpriseId);
if (CollectionUtils.isNotEmpty(list) && list.size() == 1) {
logger.info("匹配群的gic商户id,gic={}", list.get(0).getEnterpriseId());
enterpriseId = list.get(0).getEnterpriseId();
chat.setEnterpriseId(enterpriseId);
}
}
if (StringUtils.isBlank(enterpriseId) && null != staff) {
logger.info("匹配群的gic商户id,staffid={}", staff.getStaffId());
List<StaffClerkRelationDTO> clerkList = this.staffClerkRelationService.listByStaffId(wxEnterpriseId,
staff.getStaffId());
if (CollectionUtils.isNotEmpty(clerkList)) {
Set<String> enterpriseIdSet = clerkList.stream().map(dto -> dto.getEnterpriseId())
.collect(Collectors.toSet());
logger.info("成员关联导购数={},商户={}", clerkList.size(), enterpriseIdSet);
if (enterpriseIdSet.size() == 1) {
enterpriseId = clerkList.get(0).getEnterpriseId();
chat.setEnterpriseId(enterpriseId);
}
}
}
logger.info("更新群信息={}", JSON.toJSONString(chat));
if (StringUtils.isNotEmpty(chat.getEnterpriseId())) { if (StringUtils.isNotEmpty(chat.getEnterpriseId())) {
chat.setGicFlag(1); chat.setGicFlag(1);
} }
} }
String oldStaffId = chat.getStaffId();
String newStaffId = staff.getStaffId();
chat.setStaffId(staff.getStaffId());
// 判断是否更新群主 // 判断是否更新群主
this.saveOwnerHistory(wxEnterpriseId, groupChatId, newStaffId, oldStaffId); this.saveOwnerHistory(wxEnterpriseId, groupChatId, newStaffId, oldStaffId);
chat.setOriginalStaffId(oldStaffId); chat.setOriginalStaffId(oldStaffId);
this.groupChatMapper.update(chat); this.groupChatMapper.update(chat);
if (null == staff) {
logger.info("不同步群成员信息,群主未关联好办,owner={}", owner);
return;
}
this.saveOwner(wxEnterpriseId, staff.getStaffId()); this.saveOwner(wxEnterpriseId, staff.getStaffId());
if (!syncMember) { if (!syncMember) {
logger.info("不同步群成员信息"); logger.info("不同步群成员");
return; return;
} }
List<GroupChatDetailMemberDTO> memberList = detail.getMember_list(); List<GroupChatDetailMemberDTO> qwUserList = detail.getMember_list();
int totalCount = memberList.size(); // 当前群列表
if (CollectionUtils.isNotEmpty(memberList) && totalCount >= offNum) { List<TabGroupChatUser> nowUserList = this.groupChatUserMapper.listAllChatUser(wxEnterpriseId, groupChatId);
this.chatOff(chat); Map<String, TabGroupChatUser> nowUserMap = nowUserList.stream()
}
List<TabGroupChatUser> allUserList = this.groupChatUserMapper.listAllChatUser(wxEnterpriseId, groupChatId);
Map<String, TabGroupChatUser> userMap = allUserList.stream()
.collect(Collectors.toMap(TabGroupChatUser::getUserId, o -> o, ((k1, k2) -> k1))); .collect(Collectors.toMap(TabGroupChatUser::getUserId, o -> o, ((k1, k2) -> k1)));
List<TabGroupChatUser> needAddUserList = new ArrayList<>(); List<TabGroupChatUser> needAddUserList = new ArrayList<>();
int totalMemberCount = 0;
List<GroupChatUserIdDTO> adminList = detail.getAdmin_list(); List<GroupChatUserIdDTO> adminList = detail.getAdmin_list();
List<String> adminIdList = adminList.stream().map(dto -> dto.getUserid()).collect(Collectors.toList()); List<String> adminIdList = adminList.stream().map(dto -> dto.getUserid()).collect(Collectors.toList());
for (GroupChatDetailMemberDTO member : memberList) { int totalMemberCount = 0;
String userName = this.emoji(member.getName()); Map<String, String> invitorMap = new HashMap<>();
String nickName = this.emoji(member.getGroup_nickname()); for (GroupChatDetailMemberDTO qwUser : qwUserList) {
String userId = member.getUserid(); int memberCount = this.saveOrUpdateChatUser(groupChatId, wxEnterpriseId, enterpriseId, owner, nowUserMap,
TabGroupChatUser user = userMap.get(userId); needAddUserList, adminIdList, qwUser, invitorMap);
if (null != user) { totalMemberCount = totalMemberCount + memberCount;
logger.info("更新用户,id={}", userId);
boolean updateFlag = false;
user.setAdminFlag(0);
if (member.getUserid().equals(owner)) {
user.setAdminFlag(1);
} else if (adminIdList.contains(member.getUserid())) {
user.setAdminFlag(2);
}
if (StringUtils.isEmpty(user.getMemberId())) {
this.matchGicMember(wxEnterpriseId, enterpriseId, member.getUnionid(), userId, user);
if (StringUtils.isNotEmpty(user.getMemberId())) {
updateFlag = true;
}
}
if (user.getUserType() == 3) {
totalMemberCount++;
}
user.setUserName(userName);
if (this.isDiff(user.getUserName(), userName)) {
updateFlag = true;
}
user.setNickName(nickName);
if (this.isDiff(user.getNickName(), nickName)) {
updateFlag = true;
}
if (updateFlag) {
this.groupChatUserMapper.update(user);
}
continue;
}
user = new TabGroupChatUser();
user.setAdminFlag(0);
if (member.getUserid().equals(owner)) {
user.setAdminFlag(1);
} else if (adminIdList.contains(member.getUserid())) {
user.setAdminFlag(2);
}
user.setChatUserId(UniqueIdUtils.uniqueLong());
user.setWxEnterpriseId(wxEnterpriseId);
user.setEnterpriseId(enterpriseId);
user.setUserType(member.getType());
user.setJoinTime(new Date(member.getJoin_time() * 1000));
user.setUserName(userName);
user.setNickName(nickName);
user.setGroupChatId(groupChatId);
user.setUserId(userId);
user.setJoinScene(member.getJoin_scene());
user.setJoinState(null);
user.setUnionid(member.getUnionid());
user.setDeleteFlag(0);
user.setStatusFlag(1);
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
if (null != member.getInvitor()) {
String invitorId = member.getInvitor().getUserid();
user.setInvitorUserId(invitorId);
TabHaobanStaff invitor = this.staffMapper.selectByUserIdAndEnterpriseId(invitorId, wxEnterpriseId);
if (null != invitor) {
user.setInvitorUserName(invitor.getStaffName());
}
}
this.matchGicMember(wxEnterpriseId, enterpriseId, member.getUnionid(), userId, user);
if (user.getUserType() == 3) {
totalMemberCount++;
}
needAddUserList.add(user);
} }
List<String> nowUserIdList = memberList.stream().map(dto -> dto.getUserid()).collect(Collectors.toList());
int addMemberCount = 0; int addMemberCount = 0;
for (TabGroupChatUser item : needAddUserList) { for (TabGroupChatUser item : needAddUserList) {
this.groupChatUserMapper.insert(item);
if (item.getUserType() == 3) { if (item.getUserType() == 3) {
addMemberCount++; addMemberCount++;
} }
} }
int addCount = needAddUserList.size(); if (CollectionUtils.isNotEmpty(needAddUserList)) {
this.groupChatUserMapper.batchInsert(needAddUserList);
}
// 删除退群的人 // 删除退群的人
List<Long> deleteIdList = new ArrayList<>(); List<Long> deleteIdList = new ArrayList<>();
for (TabGroupChatUser user : allUserList) { List<String> nowQwUserIdList = qwUserList.stream().map(dto -> dto.getUserid()).collect(Collectors.toList());
if (!nowUserIdList.contains(user.getUserId())) { for (TabGroupChatUser user : nowUserList) {
if (!nowQwUserIdList.contains(user.getUserId())) {
deleteIdList.add(user.getChatUserId()); deleteIdList.add(user.getChatUserId());
} }
} }
// 总成员数
int totalCount = qwUserList.size();
// 本次新增
int addCount = needAddUserList.size();
// 流失总数 // 流失总数
int quitCount = 0; int quitCount = 0;
// 流水会员数 // 流水会员数
...@@ -739,16 +655,130 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -739,16 +655,130 @@ public class GroupChatServiceImpl implements GroupChatService {
this.groupChatUserMapper.dismiss(deleteIdList, chat.getStaffId()); this.groupChatUserMapper.dismiss(deleteIdList, chat.getStaffId());
quitCount = deleteIdList.size(); quitCount = deleteIdList.size();
for (Long userId : deleteIdList) { for (Long userId : deleteIdList) {
TabGroupChatUser user = userMap.get(userId); TabGroupChatUser user = nowUserMap.get(userId);
if (null != user && user.getUserType() == 3) { if (null != user && user.getUserType() == 3) {
quitMemberCount++; quitMemberCount++;
} }
} }
} }
if (CollectionUtils.isNotEmpty(qwUserList) && totalCount >= offNum && null != chat.getOffTime()) {
logger.info("群满下线处理,chatid={}", chat.getWxChatId());
this.chatOff(chat);
}
this.updateData(groupChatId, totalCount, totalMemberCount, addMemberCount, addCount, quitCount, this.updateData(groupChatId, totalCount, totalMemberCount, addMemberCount, addCount, quitCount,
quitMemberCount); quitMemberCount);
} }
// 保存更新群成员
private int saveOrUpdateChatUser(Long groupChatId, String wxEnterpriseId, String enterpriseId, String owner,
Map<String, TabGroupChatUser> userMap, List<TabGroupChatUser> needAddUserList, List<String> adminIdList,
GroupChatDetailMemberDTO qwUser, Map<String, String> invitorMap) {
int totalMemberCount = 0;
String userName = this.emoji(qwUser.getName());
String nickName = this.emoji(qwUser.getGroup_nickname());
String userId = qwUser.getUserid();
TabGroupChatUser hbUser = userMap.get(userId);
boolean updateFlag = true;
boolean needUpdateFlag = false;
if (null == hbUser) {
updateFlag = false;
hbUser = new TabGroupChatUser();
}
Integer oldAdminFlag = hbUser.getAdminFlag();
hbUser.setAdminFlag(0);
hbUser.setUserType(qwUser.getType());
if (qwUser.getUserid().equals(owner)) {
hbUser.setAdminFlag(1);
} else if (adminIdList.contains(qwUser.getUserid())) {
hbUser.setAdminFlag(2);
}
if (StringUtils.isEmpty(hbUser.getMemberId()) && qwUser.getType() == 2) {
this.matchGicMember(wxEnterpriseId, enterpriseId, qwUser.getUnionid(), userId, hbUser);
}
if (hbUser.getUserType() == 3) {
totalMemberCount++;
}
hbUser.setUserName(userName);
hbUser.setNickName(nickName);
if (updateFlag) {
if (null == oldAdminFlag || !oldAdminFlag.equals(hbUser.getAdminFlag())) {
needUpdateFlag = true;
}
if (this.isDiff(hbUser.getUserName(), userName)) {
needUpdateFlag = true;
}
if (this.isDiff(hbUser.getNickName(), nickName)) {
needUpdateFlag = true;
}
if (needUpdateFlag) {
logger.info("更新用户,id={}", userId);
this.groupChatUserMapper.update(hbUser);
}
return totalMemberCount;
}
hbUser.setChatUserId(UniqueIdUtils.uniqueLong());
hbUser.setWxEnterpriseId(wxEnterpriseId);
hbUser.setEnterpriseId(enterpriseId);
hbUser.setJoinTime(new Date(qwUser.getJoin_time() * 1000));
hbUser.setGroupChatId(groupChatId);
hbUser.setUserId(userId);
hbUser.setJoinScene(qwUser.getJoin_scene());
hbUser.setJoinState(null);
hbUser.setUnionid(qwUser.getUnionid());
hbUser.setDeleteFlag(0);
hbUser.setStatusFlag(1);
hbUser.setCreateTime(new Date());
hbUser.setUpdateTime(new Date());
if (null != qwUser.getInvitor()) {
String invitorId = qwUser.getInvitor().getUserid();
if (StringUtils.isNotBlank(invitorId)) {
hbUser.setInvitorUserId(invitorId);
String invitorUserName = invitorMap.get(invitorId);
if (null == invitorUserName) {
TabHaobanStaff invitor = this.staffMapper.selectByUserIdAndEnterpriseId(invitorId, wxEnterpriseId);
if (null != invitor) {
invitorMap.put(invitorId, invitor.getStaffName());
invitorUserName = invitor.getStaffName();
} else {
invitorMap.put(invitorId, "");
}
}
if (StringUtils.isNotBlank(invitorUserName)) {
hbUser.setInvitorUserName(invitorUserName);
}
}
}
needAddUserList.add(hbUser);
return totalMemberCount;
}
// 匹配GIC企业ID
private String matchGicEnterpriseId(String wxEnterpriseId, String enterpriseId, TabHaobanStaff staff) {
if (StringUtils.isBlank(enterpriseId)) {
List<TabHaobanWxEnterpriseRelated> list = this.wxEnterpriseRelatedService
.getByWxEnterpriseId(wxEnterpriseId);
if (CollectionUtils.isNotEmpty(list) && list.size() == 1) {
logger.info("匹配到群gic商户id,一对一模式,gic={}", list.get(0).getEnterpriseId());
enterpriseId = list.get(0).getEnterpriseId();
}
}
if (StringUtils.isBlank(enterpriseId) && null != staff) {
logger.info("匹配群的gic商户id,staffid={}", staff.getStaffId());
List<StaffClerkRelationDTO> clerkList = this.staffClerkRelationService.listByStaffId(wxEnterpriseId,
staff.getStaffId());
if (CollectionUtils.isNotEmpty(clerkList)) {
Set<String> enterpriseIdSet = clerkList.stream().map(dto -> dto.getEnterpriseId())
.collect(Collectors.toSet());
logger.info("成员关联导购数={},商户={}", clerkList.size(), enterpriseIdSet);
if (enterpriseIdSet.size() == 1) {
enterpriseId = clerkList.get(0).getEnterpriseId();
}
}
}
return enterpriseId;
}
// 字符串是否有修改
private boolean isDiff(String a, String b) { private boolean isDiff(String a, String b) {
if (StringUtils.isBlank(a) && StringUtils.isBlank(b)) { if (StringUtils.isBlank(a) && StringUtils.isBlank(b)) {
return false; return false;
...@@ -766,14 +796,15 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -766,14 +796,15 @@ public class GroupChatServiceImpl implements GroupChatService {
quitMemberCount); quitMemberCount);
} }
// 历任群主
private void saveOwnerHistory(String wxEnterpriseId, Long groupChatId, String newStaffId, String oldStaffId) { private void saveOwnerHistory(String wxEnterpriseId, Long groupChatId, String newStaffId, String oldStaffId) {
if (null == newStaffId && null == oldStaffId) { if (StringUtils.isEmpty(newStaffId) && StringUtils.isEmpty(oldStaffId)) {
return; return;
} }
if (null != newStaffId && null != oldStaffId && newStaffId.equals(oldStaffId)) { if (StringUtils.isNotEmpty(newStaffId) && StringUtils.isNotEmpty(oldStaffId) && newStaffId.equals(oldStaffId)) {
return; return;
} }
if (null != newStaffId) { if (StringUtils.isNotEmpty(newStaffId)) {
if (null != this.groupChatOwnerHistoryMapper.getGroupChatNowStaff(groupChatId, newStaffId)) { if (null != this.groupChatOwnerHistoryMapper.getGroupChatNowStaff(groupChatId, newStaffId)) {
return; return;
} }
...@@ -785,7 +816,7 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -785,7 +816,7 @@ public class GroupChatServiceImpl implements GroupChatService {
entity.setCreateTime(new Date()); entity.setCreateTime(new Date());
this.groupChatOwnerHistoryMapper.insert(entity); this.groupChatOwnerHistoryMapper.insert(entity);
} }
if (null != oldStaffId) { if (StringUtils.isNotEmpty(oldStaffId)) {
this.groupChatOwnerHistoryMapper.updateOwnerEnd(groupChatId, oldStaffId); this.groupChatOwnerHistoryMapper.updateOwnerEnd(groupChatId, oldStaffId);
} }
} }
...@@ -901,8 +932,8 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -901,8 +932,8 @@ public class GroupChatServiceImpl implements GroupChatService {
* @throws * @throws
*/ */
private void saveOwner(String wxEnterpriseId, String staffId) { private void saveOwner(String wxEnterpriseId, String staffId) {
TabGroupChatOwner owner = this.groupChatOwnerMapper.selectByStaffId(staffId);
int chatCount = this.groupChatMapper.getCountByStaffId(staffId); int chatCount = this.groupChatMapper.getCountByStaffId(staffId);
TabGroupChatOwner owner = this.groupChatOwnerMapper.selectByStaffId(staffId);
if (null != owner) { if (null != owner) {
this.groupChatOwnerMapper.updateChatCount(staffId, chatCount); this.groupChatOwnerMapper.updateChatCount(staffId, chatCount);
} else { } else {
...@@ -977,9 +1008,9 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -977,9 +1008,9 @@ public class GroupChatServiceImpl implements GroupChatService {
if (!resp.isSuccess()) { if (!resp.isSuccess()) {
return ServiceResponse.failure("9999", resp.getMessage()); return ServiceResponse.failure("9999", resp.getMessage());
} else { } else {
for (Long id : groupChatIdList) { JSONObject json = new JSONObject();
this.updateChatStatus(qwDTO, id); json.put("groupChatIdList", groupChatIdList);
} this.putMQRefreshChatStatus(JSON.toJSONString(json));
if (CollectionUtils.isNotEmpty(resp.getResult())) { if (CollectionUtils.isNotEmpty(resp.getResult())) {
return ServiceResponse.failure("9999", JSON.toJSONString(resp.getResult())); return ServiceResponse.failure("9999", JSON.toJSONString(resp.getResult()));
} }
...@@ -1027,4 +1058,14 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -1027,4 +1058,14 @@ public class GroupChatServiceImpl implements GroupChatService {
} }
} }
} }
@Override
public void refreshChatStatus(Long groupChatId) {
TabGroupChat chat = this.groupChatMapper.selectById(groupChatId);
if (null != chat) {
String wxEnterpriseId = chat.getWxEnterpriseId();
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
this.updateChatStatus(qwDTO, groupChatId);
}
}
} }
\ No newline at end of file
...@@ -165,12 +165,6 @@ public class GroupChatApiServiceImpl implements GroupChatApiService { ...@@ -165,12 +165,6 @@ public class GroupChatApiServiceImpl implements GroupChatApiService {
} }
@Override @Override
public ServiceResponse<Void> refreshChatInfo(Long chatHmId) {
this.groupChatService.refreshChatInfo(chatHmId);
return ServiceResponse.success();
}
@Override
public ServiceResponse<Void> updateChatEnterpriseId(String wxEnterpriseId, String enterpriseId, public ServiceResponse<Void> updateChatEnterpriseId(String wxEnterpriseId, String enterpriseId,
List<Long> groupChatIdList) { List<Long> groupChatIdList) {
this.groupChatService.updateChatEnterpriseId(wxEnterpriseId, enterpriseId, groupChatIdList); this.groupChatService.updateChatEnterpriseId(wxEnterpriseId, enterpriseId, groupChatIdList);
...@@ -232,7 +226,17 @@ public class GroupChatApiServiceImpl implements GroupChatApiService { ...@@ -232,7 +226,17 @@ public class GroupChatApiServiceImpl implements GroupChatApiService {
JSONObject json = JSONObject.parseObject(params); JSONObject json = JSONObject.parseObject(params);
List<Long> arr = JSONObject.parseArray(json.getString("groupChatIdList"), Long.class); List<Long> arr = JSONObject.parseArray(json.getString("groupChatIdList"), Long.class);
for (Long id : arr) { for (Long id : arr) {
this.refreshChatInfo(id); this.groupChatService.refreshChatInfo(id);
}
return ServiceResponse.success();
}
@Override
public ServiceResponse<Void> refreshChatStatusFromMQ(String params) {
JSONObject json = JSONObject.parseObject(params);
List<Long> arr = JSONObject.parseArray(json.getString("groupChatIdList"), Long.class);
for (Long id : arr) {
this.groupChatService.refreshChatStatus(id);
} }
return ServiceResponse.success(); return ServiceResponse.success();
} }
......
...@@ -756,10 +756,6 @@ ...@@ -756,10 +756,6 @@
</update> </update>
<select id="getMemberForExternalId" resultMap="BaseResultMap"> <select id="getMemberForExternalId" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from tab_haoban_external_clerk_related where wx_enterprise_id = #{wxEnterpriseId}
and self_external_userid = #{externalUserId} and status_flag in (1,3,4) and member_id <![CDATA[ <> '']]>
union
select <include refid="Base_Column_List"/> select <include refid="Base_Column_List"/>
from tab_haoban_external_clerk_related where wx_enterprise_id = #{wxEnterpriseId} from tab_haoban_external_clerk_related where wx_enterprise_id = #{wxEnterpriseId}
and external_user_id = #{externalUserId} and status_flag in (1,3,4) and member_id <![CDATA[ <> '' ]]> and external_user_id = #{externalUserId} and status_flag in (1,3,4) and member_id <![CDATA[ <> '' ]]>
......
...@@ -103,8 +103,60 @@ ...@@ -103,8 +103,60 @@
) )
]]> ]]>
</insert> </insert>
<insert id="batchInsert">
INSERT INTO tab_haoban_group_chat_user(
chat_user_id,
wx_enterprise_id,
enterprise_id,
user_type,
join_time,
user_name,
nick_name,
user_id,
unionid,
member_id,
invitor_user_id,
create_time,
update_time,
delete_flag,
group_chat_id,
status_flag,
user_quit_time,
quit_scene,
join_scene,
join_remark,
join_state , invitor_user_name , admin_flag
)VALUES
<foreach collection="list" item="item" separator="," >
( #{item.chatUserId},
#{item.wxEnterpriseId},
#{item.enterpriseId},
#{item.userType},
#{item.joinTime},
#{item.userName},
#{item.nickName},
#{item.userId},
#{item.unionid},
#{item.memberId},
#{item.invitorUserId},
#{item.createTime},
#{item.updateTime},
#{item.deleteFlag},
#{item.groupChatId},
#{item.statusFlag},
#{item.userQuitTime},
#{item.quitScene},
#{item.joinScene},
#{item.joinRemark},
#{item.joinState} , #{item.invitorUserName} , #{item.adminFlag}
)
</foreach>
</insert>
<!-- =====================删除==================== --> <!-- =====================废弃群==================== -->
<update id="dismiss"> <update id="dismiss">
UPDATE tab_haoban_group_chat_user SET status_flag = 2 , update_time=now() , user_quit_time = now() , quit_scene = 0 , quit_staff_id = #{ownerId} WHERE chat_user_id in UPDATE tab_haoban_group_chat_user SET status_flag = 2 , update_time=now() , user_quit_time = now() , quit_scene = 0 , quit_staff_id = #{ownerId} WHERE chat_user_id in
<foreach collection="idList" close=")" open="(" index="index" item="id" separator=","> <foreach collection="idList" close=")" open="(" index="index" item="id" separator=",">
......
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