Commit bfa7005e by 徐高华

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

Feature/社群

See merge request !664
parents f448d15c 72838aad
......@@ -36,6 +36,9 @@ public interface GroupChatPlanOwnerLogMapper {
public List<Long> listForTimer(@Param("planId") Long planId);
public List<TabGroupChatPlanOwnerLog> listForDoPlan(@Param("planId") Long planId, @Param("startItem") int startItem,
@Param("pageSize") int pageSize);
public List<ChatOwnerTotalDTO> listOwnerLogPageForWxaTotal(GroupChatPlanSearchQDTO qdto);
public List<GroupChatPlanOwnerLogDTO> listOwnerLogPageForWxa(GroupChatPlanSearchQDTO qdto);
......
......@@ -34,7 +34,6 @@ import com.gic.haoban.common.utils.DingUtils;
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.GroupChatPlanLogDTO;
import com.gic.haoban.manage.api.dto.chat.GroupChatPlanOwnerLogDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO;
import com.gic.haoban.manage.api.enums.PendingTaskTypeEnum;
import com.gic.haoban.manage.api.enums.chat.PlanSendStatusEnum;
......@@ -42,6 +41,7 @@ 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.GroupChatPlanLogMapper;
import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatPlanMapper;
import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatPlanOwnerLogMapper;
import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.chat.TabGroupChatPlan;
import com.gic.haoban.manage.service.entity.chat.TabGroupChatPlanLog;
......@@ -72,6 +72,8 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
@Autowired
private GroupChatPlanOwnerLogService groupChatPlanOwnerLogService;
@Autowired
private GroupChatPlanOwnerLogMapper groupChatPlanOwnerLogMapper;
@Autowired
private GroupChatPlanLogMapper groupChatPlanLogMapper;
@Autowired
private QywxSendService qywxSendService;
......@@ -184,11 +186,10 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
logger.info("计划不存在,planid={}", planId);
return;
}
if (plan.getSendFlag() == 2) {
if (plan.getSendFlag() == PlanSendStatusEnum.SENDED.getCode()) {
logger.info("计划已执行过,planid={}", planId);
return;
}
// 控制重复发送
this.groupChatPlanMapper.updateSendFlag(planId);
String wxEnterpriseId = plan.getWxEnterpriseId();
String chatContent = plan.getChatContent();
......@@ -198,55 +199,54 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
JSONObject json = jsonArr.getJSONObject(i);
madidList.add(json.getString("relation_id"));
}
int currentPage = 1;
GroupChatPlanSearchQDTO qdto = new GroupChatPlanSearchQDTO();
qdto.setWxEnterpriseId(wxEnterpriseId);
BasePageInfo basePageInfo = new BasePageInfo();
basePageInfo.setPageNum(currentPage);
basePageInfo.setPageSize(1);
Page<GroupChatPlanOwnerLogDTO> page = this.groupChatPlanOwnerLogService.listPage(planId, qdto, basePageInfo);
while (page.getTotalPage() >= currentPage) {
if (currentPage > 1) {
basePageInfo.setPageNum(currentPage);
page = this.groupChatPlanOwnerLogService.listPage(planId, qdto, basePageInfo);
int pageNum = 0;
int pageSize = 1;
List<TabGroupChatPlanOwnerLog> ownerList = null;
while (true) {
ownerList = this.groupChatPlanOwnerLogMapper.listForDoPlan(planId, pageNum * pageSize, pageSize);
if (CollectionUtils.isEmpty(ownerList)) {
break;
}
currentPage++;
List<GroupChatPlanOwnerLogDTO> ownerList = page.getResult();
for (GroupChatPlanOwnerLogDTO dto : ownerList) {
String staffId = dto.getStaffId();
ServiceResponse<String> sendResp = qywxSendService.sendChatMessage(wxEnterpriseId, staffId, madidList);
TabGroupChatPlanOwnerLog ownerLog = EntityUtil.changeEntityByJSON(TabGroupChatPlanOwnerLog.class, dto);
if (sendResp.isSuccess()) {
String msgid = sendResp.getResult();
ownerLog.setMsgid(msgid);
ownerLog.setSendStatus(PlanSendStatusEnum.TO_BE_SEND.getCode());
} else {
ownerLog.setRemark(sendResp.getMessage());
ownerLog.setSendStatus(PlanSendStatusEnum.FAIL.getCode());
}
ownerLog.setWxEnterpriseId(wxEnterpriseId);
this.groupChatPlanOwnerLogService.update(ownerLog);
// 代办
if (StringUtils.isNotBlank(ownerLog.getClerkId())) {
this.savePendTask(dto, plan);
pageNum++;
for (TabGroupChatPlanOwnerLog ownerLog : ownerList) {
try {
String staffId = ownerLog.getStaffId();
ServiceResponse<String> sendResp = qywxSendService.sendChatMessage(wxEnterpriseId, staffId,
madidList);
if (sendResp.isSuccess()) {
String msgid = sendResp.getResult();
ownerLog.setMsgid(msgid);
ownerLog.setSendStatus(PlanSendStatusEnum.TO_BE_SEND.getCode());
} else {
ownerLog.setRemark(sendResp.getMessage().substring(0, 500));
ownerLog.setSendStatus(PlanSendStatusEnum.FAIL.getCode());
}
ownerLog.setWxEnterpriseId(wxEnterpriseId);
this.groupChatPlanOwnerLogService.update(ownerLog);
// 代办
if (StringUtils.isNotBlank(ownerLog.getClerkId()) && StringUtils.isNotBlank(ownerLog.getMsgid())) {
this.savePendTask(ownerLog, plan);
}
} catch (Exception e) {
logger.info("群群发任务异常,ownerLog={}", ownerLog.getOwnerLogId());
}
}
}
}
private void savePendTask(GroupChatPlanOwnerLogDTO ownerDTO, TabGroupChatPlan plan) {
logger.info("创建待办数据:{}", JSON.toJSONString(ownerDTO));
private void savePendTask(TabGroupChatPlanOwnerLog ownerLog, TabGroupChatPlan plan) {
logger.info("创建导购待办={}", JSON.toJSONString(ownerLog));
PendingTaskBO task = new PendingTaskBO();
task.setRelationId(ownerDTO.getOwnerLogId() + "");
task.setBusinessId(ownerDTO.getPlanId() + "");
task.setRelationId(ownerLog.getOwnerLogId() + "");
task.setBusinessId(ownerLog.getPlanId() + "");
task.setTaskType(PendingTaskTypeEnum.GROUP_CHAT.getType());
task.setTitle(plan.getName());
task.setInvalidTime(ownerDTO.getExpireDate());
task.setInvalidTime(plan.getEndTime());
task.setDescription(plan.getRemark());
task.setStoreId(ownerDTO.getStoreId());
task.setClerkId(ownerDTO.getClerkId());
task.setEnterpriseId(ownerDTO.getEnterpriseId());
task.setOverdueTime(ownerDTO.getExpireDate());
task.setStoreId(ownerLog.getStoreId());
task.setClerkId(ownerLog.getClerkId());
task.setEnterpriseId(ownerLog.getEnterpriseId());
task.setOverdueTime(plan.getEndTime());
this.pendingTaskService.addOrUpdatePendingTask(task);
}
......
......@@ -102,7 +102,7 @@
</insert>
<!-- =====================删除==================== -->
<update id="deleteById" parameterType="long">
<update id="deleteById">
UPDATE
tab_haoban_group_chat_plan SET delete_flag = 1 , modifier_id =
#{clerkId} , modifier_name = #{clerkName} , update_time=now() WHERE plan_id = #{planId}
......
......@@ -110,6 +110,10 @@
</if>
</select>
<select id="listForDoPlan" resultMap="result-map-tabHaobanGroupChatPlanOwnerLog">
select <include refid="Base_Column_List"/> FROM tab_haoban_group_chat_plan_owner_log WHERE plan_id = #{planId} and delete_flag = 0 limit ${startItem},${pageSize}
</select>
<select id="listPage" parameterType="com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO" resultType="com.gic.haoban.manage.api.dto.chat.GroupChatPlanOwnerLogDTO">
select
a.owner_log_id ownerLogId ,
......
package com.gic.haoban.manage.web.controller.chat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -26,17 +25,20 @@ import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO;
import com.gic.haoban.common.utils.AuthWebRequestUtil;
import com.gic.haoban.manage.api.dto.MaterialDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
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.GroupChatPlanOwnerLogDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO;
import com.gic.haoban.manage.api.service.MaterialApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService;
import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl;
import com.gic.haoban.manage.web.utils.CreatorUtils;
import com.gic.haoban.manage.web.vo.chat.ChatOwnerVO;
import com.gic.haoban.manage.web.vo.chat.GroupChatPlanVO;
import com.gic.log.record.anno.GicLogRecord;
import com.gic.log.record.util.GicLogRecordCategoryEnum;
import com.gic.log.record.util.GicLogRecordEvaluationContext;
import com.gic.log.record.util.GicLogRecordOptTypeEnum;
/**
*
......@@ -58,6 +60,7 @@ public class GroupChatPlanController {
private MaterialApiService materialApiService;
@RequestMapping("add")
@GicLogRecord(value = "${#logValue}", category = GicLogRecordCategoryEnum.HUOMA, optType = GicLogRecordOptTypeEnum.HM_LINK_ADD, userFunc = LogRecordUserServiceImpl.class, optPage = "客户群群发")
public RestResponse<Object> save(@RequestBody GroupChatPlanDTO dto) {
if (StringUtils.isBlank(dto.getStaffIdList())) {
return RestResponse.failure("9999", "请选择群主");
......@@ -71,16 +74,27 @@ public class GroupChatPlanController {
dto.setWxEnterpriseId(loginUser.getWxEnterpriseId());
dto.setEnterpriseId(loginUser.getEnterpriseId());
this.groupChatPlanApiService.save(dto);
String logContent = "新增客户群群发【" + dto.getName() + "】";
GicLogRecordEvaluationContext.putAttribute("logValue", logContent);
GicLogRecordEvaluationContext.putOptTargetId(AuthWebRequestUtil.getLoginUser().getClerkId());
return RestResponse.successResult();
}
@RequestMapping("del")
@GicLogRecord(value = "${#logValue}", category = GicLogRecordCategoryEnum.HUOMA, optType = GicLogRecordOptTypeEnum.HM_LINK_ADD, userFunc = LogRecordUserServiceImpl.class, optPage = "客户群群发")
public RestResponse<Object> del(Long planId) {
if (null == planId) {
return RestResponse.failure("9999", "计划ID空");
}
ServiceResponse<GroupChatPlanDTO> planResp = this.groupChatPlanApiService.detail(planId);
if (!planResp.isSuccess()) {
return RestResponse.failure("1", "计划不存在");
}
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
this.groupChatPlanApiService.del(loginUser.getClerkId(), loginUser.getClerkName(), planId);
String logContent = "删除客户群群发【" + planResp.getResult().getName() + "】";
GicLogRecordEvaluationContext.putAttribute("logValue", logContent);
GicLogRecordEvaluationContext.putOptTargetId(AuthWebRequestUtil.getLoginUser().getClerkId());
return RestResponse.successResult();
}
......@@ -94,12 +108,20 @@ public class GroupChatPlanController {
* @throws
*/
@RequestMapping("stop")
@GicLogRecord(value = "${#logValue}", category = GicLogRecordCategoryEnum.HUOMA, optType = GicLogRecordOptTypeEnum.HM_LINK_ADD, userFunc = LogRecordUserServiceImpl.class, optPage = "客户群群发")
public RestResponse<Object> stop(Long planId) {
if (null == planId) {
return RestResponse.failure("9999", "计划ID空");
}
ServiceResponse<GroupChatPlanDTO> planResp = this.groupChatPlanApiService.detail(planId);
if (!planResp.isSuccess()) {
return RestResponse.failure("1", "计划不存在");
}
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
this.groupChatPlanApiService.stop(loginUser.getClerkId(), loginUser.getClerkName(), planId);
String logContent = "终止客户群群发【" + planResp.getResult().getName() + "】";
GicLogRecordEvaluationContext.putAttribute("logValue", logContent);
GicLogRecordEvaluationContext.putOptTargetId(AuthWebRequestUtil.getLoginUser().getClerkId());
return RestResponse.successResult();
}
......@@ -142,11 +164,11 @@ public class GroupChatPlanController {
@RequestMapping("detail")
public RestResponse<Object> detail(Long planId, @RequestParam(defaultValue = "0") int updteFlag) {
ServiceResponse<GroupChatPlanDTO> linkResp = this.groupChatPlanApiService.detail(planId);
if (!linkResp.isSuccess()) {
ServiceResponse<GroupChatPlanDTO> planResp = this.groupChatPlanApiService.detail(planId);
if (!planResp.isSuccess()) {
return RestResponse.failure("1", "计划不存在");
}
GroupChatPlanDTO plan = linkResp.getResult();
GroupChatPlanDTO plan = planResp.getResult();
plan.getStaffIdList();
String content = plan.getChatContent();
JSONArray array = JSONArray.parseArray(content);
......
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