Commit a92f25bc by 徐高华

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

Feature/社群

See merge request !740
parents fc0e95fc d88d2cb1
......@@ -56,24 +56,25 @@ public interface GroupChatApiService {
/**
*
* @Title: refreshChatInfo
* @Description: 刷新群信息
* @Description: 刷新群
* @author xugh
* @param groupChatId
* @return
* @throws
*/
public ServiceResponse<Void> refreshChatInfo(Long groupChatId);
public ServiceResponse<Void> refreshChatInfoFromMQ(String params);
/**
*
* @Title: refreshChatInfo
* @Description: 刷新群信息,从队列获取
* @Title: refreshChatStatus
* @Description: 刷新群的状态
* @author xugh
* @param groupChatId
* @param params
* @return
* @throws
*/
public ServiceResponse<Void> refreshChatInfoFromMQ(String params);
public ServiceResponse<Void> refreshChatStatusFromMQ(String params) ;
/**
*
......
......@@ -2,6 +2,8 @@ package com.gic.haoban.manage.service.dao.mapper.chat;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.gic.haoban.manage.api.dto.chat.GroupChatPlanLogDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO;
import com.gic.haoban.manage.service.entity.chat.TabGroupChatPlanLog;
......@@ -17,7 +19,7 @@ import com.gic.haoban.manage.service.entity.chat.TabGroupChatPlanLog;
*/
public interface GroupChatPlanLogMapper {
public int insert(TabGroupChatPlanLog entity);
public int batchInsert(@Param("list") List<TabGroupChatPlanLog> list);
public List<GroupChatPlanLogDTO> listPlanLog(GroupChatPlanSearchQDTO qdto);
}
\ No newline at end of file
......@@ -21,6 +21,8 @@ public interface GroupChatUserMapper {
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 update(TabGroupChatUser tabHaobanGroupChatUser);
......
......@@ -23,7 +23,7 @@ public class TabGroupChatPlanOwnerLog implements Serializable {
private String staffId;
private String storeId;
private String clerkId;
/**1已发送 0待发送*/
/**0任务创建失败 1待发送 2已发送*/
private Integer sendStatus;
private Integer failCount;
private Integer sendCount;
......
package com.gic.haoban.manage.service.entity.chat;
import java.io.Serializable ;
import java.io.Serializable;
/**
*
......@@ -11,7 +11,7 @@ import java.io.Serializable ;
* @Modify
* @CopyRight
*/
public class TabGroupChatUser implements Serializable{
public class TabGroupChatUser implements Serializable {
private static final long serialVersionUID = 21771431486600L;
......@@ -34,7 +34,7 @@ public class TabGroupChatUser implements Serializable{
private String memberId;
/**邀请者*/
private String invitorUserId;
private String invitorUserName ;
private String invitorUserName;
private java.util.Date createTime;
private java.util.Date updateTime;
/**1是0否*/
......@@ -53,7 +53,7 @@ public class TabGroupChatUser implements Serializable{
private String joinRemark;
private String joinState;
// 0 成员 1群主 2管理员
private Integer adminFlag ;
private Integer adminFlag = 0;
public Integer getAdminFlag() {
return adminFlag;
......@@ -71,151 +71,171 @@ public class TabGroupChatUser implements Serializable{
this.invitorUserName = invitorUserName;
}
public void setChatUserId(Long chatUserId){
public void setChatUserId(Long chatUserId) {
this.chatUserId = chatUserId;
}
public Long getChatUserId(){
public Long getChatUserId() {
return chatUserId;
}
public void setWxEnterpriseId(String wxEnterpriseId){
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getWxEnterpriseId(){
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setEnterpriseId(String enterpriseId){
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getEnterpriseId(){
public String getEnterpriseId() {
return enterpriseId;
}
public void setUserType(Integer userType){
public void setUserType(Integer userType) {
this.userType = userType;
}
public Integer getUserType(){
public Integer getUserType() {
return userType;
}
public void setJoinTime(java.util.Date joinTime){
public void setJoinTime(java.util.Date joinTime) {
this.joinTime = joinTime;
}
public java.util.Date getJoinTime(){
public java.util.Date getJoinTime() {
return joinTime;
}
public void setUserName(String userName){
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName(){
public String getUserName() {
return userName;
}
public void setNickName(String nickName){
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getNickName(){
public String getNickName() {
return nickName;
}
public void setUserId(String userId){
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserId(){
public String getUserId() {
return userId;
}
public void setUnionid(String unionid){
public void setUnionid(String unionid) {
this.unionid = unionid;
}
public String getUnionid(){
public String getUnionid() {
return unionid;
}
public void setMemberId(String memberId){
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getMemberId(){
public String getMemberId() {
return memberId;
}
public void setInvitorUserId(String invitorUserId){
public void setInvitorUserId(String invitorUserId) {
this.invitorUserId = invitorUserId;
}
public String getInvitorUserId(){
public String getInvitorUserId() {
return invitorUserId;
}
public void setCreateTime(java.util.Date createTime){
public void setCreateTime(java.util.Date createTime) {
this.createTime = createTime;
}
public java.util.Date getCreateTime(){
public java.util.Date getCreateTime() {
return createTime;
}
public void setUpdateTime(java.util.Date updateTime){
public void setUpdateTime(java.util.Date updateTime) {
this.updateTime = updateTime;
}
public java.util.Date getUpdateTime(){
public java.util.Date getUpdateTime() {
return updateTime;
}
public void setDeleteFlag(Integer deleteFlag){
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Integer getDeleteFlag(){
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setGroupChatId(Long groupChatId){
public void setGroupChatId(Long groupChatId) {
this.groupChatId = groupChatId;
}
public Long getGroupChatId(){
public Long getGroupChatId() {
return groupChatId;
}
public void setStatusFlag(Integer statusFlag){
public void setStatusFlag(Integer statusFlag) {
this.statusFlag = statusFlag;
}
public Integer getStatusFlag(){
public Integer getStatusFlag() {
return statusFlag;
}
public void setUserQuitTime(java.util.Date userQuitTime){
public void setUserQuitTime(java.util.Date userQuitTime) {
this.userQuitTime = userQuitTime;
}
public java.util.Date getUserQuitTime(){
public java.util.Date getUserQuitTime() {
return userQuitTime;
}
public void setQuitScene(Integer quitScene){
public void setQuitScene(Integer quitScene) {
this.quitScene = quitScene;
}
public Integer getQuitScene(){
public Integer getQuitScene() {
return quitScene;
}
public void setJoinScene(Integer joinScene){
public void setJoinScene(Integer joinScene) {
this.joinScene = joinScene;
}
public Integer getJoinScene(){
public Integer getJoinScene() {
return joinScene;
}
public void setJoinRemark(String joinRemark){
public void setJoinRemark(String joinRemark) {
this.joinRemark = joinRemark;
}
public String getJoinRemark(){
public String getJoinRemark() {
return joinRemark;
}
public void setJoinState(String joinState){
public void setJoinState(String joinState) {
this.joinState = joinState;
}
public String getJoinState(){
public String getJoinState() {
return joinState;
}
}
\ No newline at end of file
......@@ -39,7 +39,17 @@ public interface GroupChatService {
* @param chatHmId
* @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
@Override
public void batchAdd(String staffIdList, TabGroupChatPlan entity) {
if (StringUtils.isBlank(staffIdList)) {
return;
}
String[] arr = staffIdList.split(",");
List<TabGroupChatPlanOwnerLog> logList = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
......@@ -132,7 +135,7 @@ public class GroupChatPlanOwnerLogServiceImpl implements GroupChatPlanOwnerLogSe
@Override
public void update(TabGroupChatPlanOwnerLog entity) {
String staffId = entity.getStaffId() ;
String staffId = entity.getStaffId();
TabHaobanClerkMainStoreRelated mainStore = this.clerkMainStoreRelatedService.getMainStoreByStaffId(staffId,
entity.getWxEnterpriseId());
if (null == mainStore) {
......@@ -159,8 +162,14 @@ public class GroupChatPlanOwnerLogServiceImpl implements GroupChatPlanOwnerLogSe
@Override
public void deleteByStaffIds(Long planId, String delStaffIds) {
if (StringUtils.isBlank(delStaffIds)) {
return;
}
String[] arr = delStaffIds.split(",");
List<String> delStaffIdList = Arrays.asList(arr);
if (CollectionUtils.isEmpty(delStaffIdList)) {
return;
}
this.groupChatPlanOwnerLogMapper.deleteByStaffIds(planId, delStaffIdList);
}
......
......@@ -98,10 +98,13 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
private static GicMQClient mqClient = GICMQClientUtil.getClientInstance();
// 每次成员数
private int pageSize = 1;
// 发送队列
private void putMQForSend(Long id) {
try {
mqClient.sendCommonMessage("haobanCommonRouter", id + "",
mqClient.sendCommonMessage("haobanChatMQ", id + "",
"com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService", "doPlanTimer");
} catch (Exception e) {
logger.error("发送MQ异常");
......@@ -112,7 +115,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
// 统计队列
private void putMQForData(Long id) {
try {
mqClient.sendCommonMessage("haobanCommonRouter", id + "",
mqClient.sendCommonMessage("haobanChatMQ", id + "",
"com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService", "doPlanSendInfoTimer");
} catch (Exception e) {
logger.error("发送MQ异常");
......@@ -145,20 +148,16 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
} else {
this.groupChatPlanMapper.updateById(entity);
// 删除本次删除的
String delStaffIdList = dto.getDelStaffIdList();
if (StringUtils.isNotBlank(delStaffIdList)) {
this.groupChatPlanOwnerLogService.deleteByStaffIds(planId, delStaffIdList);
}
this.groupChatPlanOwnerLogService.deleteByStaffIds(planId, dto.getDelStaffIdList());
// 新增本次新增的
if (StringUtils.isNotBlank(staffIdList)) {
this.groupChatPlanOwnerLogService.batchAdd(staffIdList, entity);
}
}
// 立即发送
if (entity.getSendType() == 1) {
this.putMQForSend(entity.getPlanId());
this.addOrDelTimer(planId, entity.getSendTime(), 0);
this.putMQForSend(planId);
} else {
this.addOrDelTimer(entity.getPlanId(), entity.getSendTime(), 1);
this.addOrDelTimer(planId, entity.getSendTime(), 1);
}
}
......@@ -194,13 +193,12 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
String wxEnterpriseId = plan.getWxEnterpriseId();
String chatContent = plan.getChatContent();
JSONArray jsonArr = JSONArray.parseArray(chatContent);
List<String> madidList = new ArrayList<>();
List<String> sendIdList = new ArrayList<>();
for (int i = 0; i < jsonArr.size(); i++) {
JSONObject json = jsonArr.getJSONObject(i);
madidList.add(json.getString("relation_id"));
sendIdList.add(json.getString("relation_id"));
}
int pageNum = 0;
int pageSize = 1;
List<TabGroupChatPlanOwnerLog> ownerList = null;
while (true) {
ownerList = this.groupChatPlanOwnerLogMapper.listForDoPlan(planId, pageNum * pageSize, pageSize);
......@@ -212,7 +210,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
try {
String staffId = ownerLog.getStaffId();
ServiceResponse<String> sendResp = qywxSendService.sendChatMessage(wxEnterpriseId, staffId,
madidList);
sendIdList);
if (sendResp.isSuccess()) {
String msgid = sendResp.getResult();
ownerLog.setMsgid(msgid);
......@@ -224,7 +222,9 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
ownerLog.setWxEnterpriseId(wxEnterpriseId);
this.groupChatPlanOwnerLogService.update(ownerLog);
// 代办
if (StringUtils.isNotBlank(ownerLog.getClerkId()) && StringUtils.isNotBlank(ownerLog.getMsgid())) {
if (ownerLog.getSendStatus() == PlanSendStatusEnum.TO_BE_SEND.getCode()
&& StringUtils.isNotBlank(ownerLog.getClerkId())
&& StringUtils.isNotBlank(ownerLog.getMsgid())) {
this.savePendTask(ownerLog, plan);
}
} catch (Exception e) {
......@@ -269,34 +269,52 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
public void doPlanSendInfo(Long ownerLogId) {
logger.info("开始群群发统计{}", ownerLogId);
TabGroupChatPlanOwnerLog ownerLog = this.groupChatPlanOwnerLogService.getById(ownerLogId);
if (ownerLog.getSendStatus() == 2) {
logger.info("已统计过");
return;
}
logger.info("开始群群发统计{}", ownerLog.getMsgid());
Long planId = ownerLog.getPlanId();
TabGroupChatPlan plan = this.groupChatPlanMapper.selectById(planId);
if (null == plan) {
logger.info("计划不存在{}", planId);
return;
}
String wxEnterpriseId = ownerLog.getWxEnterpriseId();
String enterpriseId = ownerLog.getEnterpriseId();
String msgid = ownerLog.getMsgid();
String staffId = ownerLog.getStaffId();
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
TabHaobanStaff staff = this.staffMapper.selectByPrimaryKey(staffId);
if (null == staff) {
logger.info("成员不存在{}", staffId);
return;
}
String userid = staff.getWxUserId();
if (qwDTO.needOpenUserId3th()) {
userid = staff.getWxOpenUseId();
}
JSONResponse respon = qywxSuiteApiService.resultExternalMessage(qwDTO.getThirdCorpid(), config.getWxSuiteid(),
msgid, null, userid);
logger.info("统计返回={}", JSON.toJSONString(respon));
if (respon.getErrorCode() == 0) {
logger.info("统计企微返回={}", JSON.toJSONString(respon));
if (respon.getErrorCode() != 0) {
return;
}
List<QywxSendMessageResultDTO> list = (List<QywxSendMessageResultDTO>) respon.getList();
if (CollectionUtils.isNotEmpty(list)) {
if (CollectionUtils.isEmpty(list)) {
logger.info("企微返回列表空");
return;
}
int sendCount = 0;
int failCount = 0;
Long planId = ownerLog.getPlanId();
TabGroupChatPlan plan = this.groupChatPlanMapper.selectById(planId);
List<TabGroupChatPlanLog> addList = new ArrayList<>();
for (QywxSendMessageResultDTO item : list) {
TabGroupChatPlanLog entity = new TabGroupChatPlanLog();
Date sendTime = item.getSendTime();
String wxChatId = item.getChatId();
// 如果企微的发送时间晚于计划的结束时间,不记录此类数据
if (sendTime.after(plan.getEndTime())) {
logger.info("发送时间晚计划结束时间");
logger.info("发送时间晚计划结束");
continue;
}
GroupChatBO chat = this.groupChatService.getByWxChatId(wxEnterpriseId, wxChatId);
......@@ -327,7 +345,10 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
entity.setEnterpriseId(enterpriseId);
entity.setStaffId(staffId);
entity.setSendTime(sendTime);
this.groupChatPlanLogMapper.insert(entity);
addList.add(entity);
}
if (CollectionUtils.isNotEmpty(addList)) {
this.groupChatPlanLogMapper.batchInsert(addList);
}
// 更新统计数量、状态
this.groupChatPlanOwnerLogService.updateSendCount(ownerLog.getOwnerLogId(), sendCount,
......@@ -337,8 +358,6 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
// 更新计划统计
this.groupChatPlanMapper.updateData(ownerLog.getPlanId(), 1, sendCount, failCount);
}
}
}
@Override
public void del(String clerkId, String clerkName, Long planId) {
......
......@@ -165,12 +165,6 @@ public class GroupChatApiServiceImpl implements GroupChatApiService {
}
@Override
public ServiceResponse<Void> refreshChatInfo(Long chatHmId) {
this.groupChatService.refreshChatInfo(chatHmId);
return ServiceResponse.success();
}
@Override
public ServiceResponse<Void> updateChatEnterpriseId(String wxEnterpriseId, String enterpriseId,
List<Long> groupChatIdList) {
this.groupChatService.updateChatEnterpriseId(wxEnterpriseId, enterpriseId, groupChatIdList);
......@@ -232,7 +226,17 @@ public class GroupChatApiServiceImpl implements GroupChatApiService {
JSONObject json = JSONObject.parseObject(params);
List<Long> arr = JSONObject.parseArray(json.getString("groupChatIdList"), Long.class);
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();
}
......
......@@ -758,10 +758,6 @@
<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"/>
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[ <> '' ]]>
limit 1
</select>
......
......@@ -32,8 +32,7 @@
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert" parameterType="com.gic.haoban.manage.service.entity.chat.TabGroupChatPlanLog">
<![CDATA[
<insert id="batchInsert">
INSERT INTO tab_haoban_group_chat_plan_log(
log_id,
plan_id,
......@@ -47,23 +46,29 @@
delete_flag,
create_time,
update_time , staff_id
)VALUES(
#{logId},
#{planId},
#{wxEnterpriseId},
#{enterpriseId} ,
#{groupChatId},
#{sendStatus},
#{ownLogId},
#{remark},
#{sendTime},
)VALUES
<foreach collection="list" item="item" separator="," >
(
#{item.logId},
#{item.planId},
#{item.wxEnterpriseId},
#{item.enterpriseId} ,
#{item.groupChatId},
#{item.sendStatus},
#{item.ownLogId},
#{item.remark},
#{item.sendTime},
0,
now(),
now() ,#{staffId}
now() ,
#{item.staffId}
)
]]>
</foreach>
</insert>
<select id="listPlanLog" parameterType="com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO" resultType="com.gic.haoban.manage.api.dto.chat.GroupChatPlanLogDTO">
SELECT b.clerk_id clerkId ,
b.store_id storeId ,
......
......@@ -104,7 +104,59 @@
]]>
</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 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=",">
......
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