Commit d88d2cb1 by 徐高华

群发

parent 4f70e318
......@@ -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
......@@ -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;
......
......@@ -193,10 +193,10 @@ 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;
List<TabGroupChatPlanOwnerLog> ownerList = null;
......@@ -210,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);
......@@ -222,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) {
......@@ -267,75 +269,94 @@ 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) {
List<QywxSendMessageResultDTO> list = (List<QywxSendMessageResultDTO>) respon.getList();
if (CollectionUtils.isNotEmpty(list)) {
int sendCount = 0;
int failCount = 0;
Long planId = ownerLog.getPlanId();
TabGroupChatPlan plan = this.groupChatPlanMapper.selectById(planId);
for (QywxSendMessageResultDTO item : list) {
TabGroupChatPlanLog entity = new TabGroupChatPlanLog();
Date sendTime = item.getSendTime();
String wxChatId = item.getChatId();
// 如果企微的发送时间晚于计划的结束时间,不记录此类数据
if (sendTime.after(plan.getEndTime())) {
logger.info("发送时间晚计划结束时间");
continue;
}
GroupChatBO chat = this.groupChatService.getByWxChatId(wxEnterpriseId, wxChatId);
if (null == chat || StringUtils.isBlank(chat.getEnterpriseId())) {
logger.info("群不存在,或未认领,wxChatId={}", wxChatId);
continue;
}
if (!chat.getEnterpriseId().equals(plan.getEnterpriseId())) {
logger.info("群的商户id和计划的商户id不一致{},{}", chat.getEnterpriseId(), plan.getEnterpriseId());
continue;
}
entity.setGroupChatId(chat.getGroupChatId());
// 企微返回成功
// 0-未发送 1-已发送 2-因客户不是好友导致发送失败 3-因客户已经收到其他群发消息导致发送失败
if (item.getStatus() == 1) {
sendCount++;
// 已发送
entity.setSendStatus(PlanSendStatusEnum.SENDED.getCode());
} else {
failCount++;
// 发送失败
entity.setSendStatus(PlanSendStatusEnum.FAIL.getCode());
}
entity.setLogId(UniqueIdUtils.uniqueLong());
entity.setPlanId(ownerLog.getPlanId());
entity.setOwnLogId(ownerLog.getOwnerLogId());
entity.setWxEnterpriseId(wxEnterpriseId);
entity.setEnterpriseId(enterpriseId);
entity.setStaffId(staffId);
entity.setSendTime(sendTime);
this.groupChatPlanLogMapper.insert(entity);
}
// 更新统计数量、状态
this.groupChatPlanOwnerLogService.updateSendCount(ownerLog.getOwnerLogId(), sendCount,
list.get(0).getSendTime(), failCount);
// 完成代办
this.pendingTaskService.updateFinish(ownerLog.getOwnerLogId() + "");
// 更新计划统计
this.groupChatPlanMapper.updateData(ownerLog.getPlanId(), 1, sendCount, failCount);
logger.info("统计企微返回={}", JSON.toJSONString(respon));
if (respon.getErrorCode() != 0) {
return;
}
List<QywxSendMessageResultDTO> list = (List<QywxSendMessageResultDTO>) respon.getList();
if (CollectionUtils.isEmpty(list)) {
logger.info("企微返回列表空");
return;
}
int sendCount = 0;
int failCount = 0;
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("发送时间晚计划结束");
continue;
}
GroupChatBO chat = this.groupChatService.getByWxChatId(wxEnterpriseId, wxChatId);
if (null == chat || StringUtils.isBlank(chat.getEnterpriseId())) {
logger.info("群不存在,或未认领,wxChatId={}", wxChatId);
continue;
}
if (!chat.getEnterpriseId().equals(plan.getEnterpriseId())) {
logger.info("群的商户id和计划的商户id不一致{},{}", chat.getEnterpriseId(), plan.getEnterpriseId());
continue;
}
entity.setGroupChatId(chat.getGroupChatId());
// 企微返回成功
// 0-未发送 1-已发送 2-因客户不是好友导致发送失败 3-因客户已经收到其他群发消息导致发送失败
if (item.getStatus() == 1) {
sendCount++;
// 已发送
entity.setSendStatus(PlanSendStatusEnum.SENDED.getCode());
} else {
failCount++;
// 发送失败
entity.setSendStatus(PlanSendStatusEnum.FAIL.getCode());
}
entity.setLogId(UniqueIdUtils.uniqueLong());
entity.setPlanId(ownerLog.getPlanId());
entity.setOwnLogId(ownerLog.getOwnerLogId());
entity.setWxEnterpriseId(wxEnterpriseId);
entity.setEnterpriseId(enterpriseId);
entity.setStaffId(staffId);
entity.setSendTime(sendTime);
addList.add(entity);
}
if (CollectionUtils.isNotEmpty(addList)) {
this.groupChatPlanLogMapper.batchInsert(addList);
}
// 更新统计数量、状态
this.groupChatPlanOwnerLogService.updateSendCount(ownerLog.getOwnerLogId(), sendCount,
list.get(0).getSendTime(), failCount);
// 完成代办
this.pendingTaskService.updateFinish(ownerLog.getOwnerLogId() + "");
// 更新计划统计
this.groupChatPlanMapper.updateData(ownerLog.getPlanId(), 1, sendCount, failCount);
}
@Override
......
......@@ -32,38 +32,43 @@
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert" parameterType="com.gic.haoban.manage.service.entity.chat.TabGroupChatPlanLog">
<![CDATA[
INSERT INTO tab_haoban_group_chat_plan_log(
log_id,
plan_id,
wx_enterprise_id,
enterprise_id,
group_chat_id,
send_status,
own_log_id,
remark,
send_time,
delete_flag,
create_time,
update_time , staff_id
)VALUES(
#{logId},
#{planId},
#{wxEnterpriseId},
#{enterpriseId} ,
#{groupChatId},
#{sendStatus},
#{ownLogId},
#{remark},
#{sendTime},
0,
now(),
now() ,#{staffId}
)
]]>
<insert id="batchInsert">
INSERT INTO tab_haoban_group_chat_plan_log(
log_id,
plan_id,
wx_enterprise_id,
enterprise_id,
group_chat_id,
send_status,
own_log_id,
remark,
send_time,
delete_flag,
create_time,
update_time , staff_id
)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() ,
#{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 ,
......
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