Commit 1d8d4df0 by 徐高华

Merge branch 'feature/202310月零散迭代' into 'master'

Feature/202310月零散迭代

See merge request !1548
parents 237df35a d8ab13d1
......@@ -37,8 +37,19 @@ public class GroupChatDataDTO implements Serializable{
private Integer msgTotal;
/**截至当天新增迁移群数(仅教培行业返回)*/
private Integer migrateTraineeChatCnt;
private Integer quitUserCount ;
private java.util.Date createTime;
public Integer getQuitUserCount() {
return quitUserCount;
}
public void setQuitUserCount(Integer quitUserCount) {
this.quitUserCount = quitUserCount;
}
public String getStaffName() {
return staffName;
}
......
......@@ -58,6 +58,27 @@ public class GroupChatPlanDTO implements Serializable {
*/
private Integer materialFrom;
// 是否发送全部
private int sendAllFlag ;
// 所有的群发条件
private String allSearchParams ;
public String getAllSearchParams() {
return allSearchParams;
}
public void setAllSearchParams(String allSearchParams) {
this.allSearchParams = allSearchParams;
}
public int getSendAllFlag() {
return sendAllFlag;
}
public void setSendAllFlag(int sendAllFlag) {
this.sendAllFlag = sendAllFlag;
}
public String getDelStaffIdList() {
return delStaffIdList;
}
......
......@@ -54,10 +54,28 @@ public class GroupChatUserDTO implements Serializable{
private String joinState;
private Integer adminFlag ;
private String chatName ;
private String staffId ;
private String staffName ;
private String wxChatId ;
// 退群时的群主门店
private String quitStaffStore ;
public String getQuitStaffStore() {
return quitStaffStore;
}
public void setQuitStaffStore(String quitStaffStore) {
this.quitStaffStore = quitStaffStore;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public String getWxChatId() {
return wxChatId;
}
......
......@@ -15,6 +15,25 @@ public class ChatDataSearchQDTO extends PageQo implements Serializable {
private Date endDate;
private List<String> staffIdList;
private String sortType = "desc" ;
private String sortColumn = "chatTotal" ;
public String getSortType() {
return sortType;
}
public void setSortType(String sortType) {
this.sortType = sortType;
}
public String getSortColumn() {
return sortColumn;
}
public void setSortColumn(String sortColumn) {
this.sortColumn = sortColumn;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
......
......@@ -28,7 +28,17 @@ public class GroupChatPlanSearchQDTO implements Serializable {
private List<String> creatorIdList ;
private String wxChatId;
private String searchClerkId ;
// clerkTaskStatus 1待处理 2已处理/已失效
private int clerkTaskStatus ;
public int getClerkTaskStatus() {
return clerkTaskStatus;
}
public void setClerkTaskStatus(int clerkTaskStatus) {
this.clerkTaskStatus = clerkTaskStatus;
}
public String getSearchClerkId() {
return searchClerkId;
}
......
......@@ -14,12 +14,14 @@ public enum ChannelCodeEnum {
ADMIN_UNBIND(2001,"后台管理员解绑"),
SELF_UNBIND(2002,"好办小程序解绑"),
SYNC_UNBIND(2003,"GIC同步解绑"),
SYNC_UNBIND(2003,"门店同步解绑"),
WEIXIN_DEL(2004,"员工离职解绑"),
AUDIT_UNBIND(2005,"后台审核解绑"),
RIGHT_CHANGE_UNBIND(2006, "好办门店权限变更解绑"),
STORE_CHANGE_UNBIND(2007, "GIC门店变更解绑"),
GIC_CLERK_DEL_UNBIND(2008, "GIC导购删除解绑"),
STORE_CHANGE_UNBIND(2007, "导购变更门店解绑"),
GIC_CLERK_DEL_UNBIND(2008, "导购删除解绑"),
QW_DEL_UNBIND(2009, "企微通讯录成员删除解绑"),
;
private int code;
private String name;
......
......@@ -105,4 +105,11 @@ public interface HaobanTimerApiService {
*/
public ServiceResponse<Void> welcomeForMember(String params);
/**
* 退群统计
* @param params
* @return
*/
public ServiceResponse<Void> groupChatQuitTimer(String params) ;
}
......@@ -28,7 +28,10 @@ public interface TabHaobanStaffClerkRelationMapper {
List<StaffClerkRelationDTO> listByClerkIds(@Param("clerkIds") List<String> clerkIds, @Param("wxEnterpriseId") String wxEnterpriseId);
StaffClerkRelationDTO getOneByStoreIdAndStaffId(@Param("storeId") String storeId, @Param("staffId") String staffId);
StaffClerkRelationDTO getByStaffAndClerk(@Param("staffId") String staffId,@Param("clerkId") String clerkId) ;
int changeStatusByClerkId(@Param("clerkId") String clerkId, @Param("status") Integer status);
//无效接口删除
......@@ -129,5 +132,7 @@ public interface TabHaobanStaffClerkRelationMapper {
*/
List<StaffClerkRelationDTO> listByWxEnterpriseIdAndStaffId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIdList") Set<String> staffIdList);
List<StaffClerkRelationDTO> listByStaffIdsForClerk(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIdList") Set<String> staffIdList);
List<String> listAllStaffIdByEnterpriseId(@Param("enterpriseId") String enterpriseId,@Param("wxEnterpriseId") String wxEnterpriseId);
}
\ No newline at end of file
package com.gic.haoban.manage.service.dao.mapper.chat;
import java.util.Date;
import java.util.List;
import com.gic.haoban.manage.api.dto.chat.GroupChatDataDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.ChatDataSearchQDTO;
import com.gic.haoban.manage.service.entity.chat.TabGroupChatData;
import org.apache.ibatis.annotations.Param;
/**
*
......@@ -24,4 +26,7 @@ public interface GroupChatDataMapper {
public List<GroupChatDataDTO> listForChat(ChatDataSearchQDTO qdto);
public List<GroupChatDataDTO> listStaffData(ChatDataSearchQDTO qdto);
public void updateQuitCount(@Param("wxEnterpriseId") String wxEnterpriseId , @Param("date") Date date ,
@Param("staffId") String staffId , @Param("quitCount")int quitCount) ;
}
\ No newline at end of file
......@@ -26,6 +26,11 @@ public interface GroupChatOwnerMapper {
public int updateChatCount(@Param("staffId") String staffId, @Param("chatCount") int chatCount);
public List<GroupChatOwnerDTO> listOwner(OwnerSearchQDTO qdto);
public List<GroupChatOwnerDTO> listOwnerPage(@Param("wxEnterpriseId")String wxEnterpriseId ,
@Param("departmentIdList") List<String> departmentIdList ,
@Param("searchParams") String searchParams ,
@Param("startItem") int startItem, @Param("pageSize") int pageSize);
public List<GroupChatOwnerDTO> listOwnerForStatistic(@Param("wxEnterpriseId")String wxEnterpriseId , @Param("startItem") int startItem,
@Param("pageSize") int pageSize);
......@@ -39,4 +44,7 @@ public interface GroupChatOwnerMapper {
* @throws
*/
public List<GroupChatOwnerDTO> dimissionOwnerList();
public List<String> listAllEnterpriseId() ;
}
\ No newline at end of file
......@@ -39,4 +39,6 @@ public interface GroupChatPlanMapper {
@Param("successChatCount") int successChatCount, @Param("failChatCount") int failChatCount);
public void updateRemark(GroupChatPlanDTO dto);
public void updateStaffCount(@Param("planId") Long planId,@Param("staffCount") int staffCount) ;
}
\ No newline at end of file
package com.gic.haoban.manage.service.dao.mapper.chat;
import java.util.Date;
import java.util.List;
import com.gic.haoban.manage.service.pojo.bo.chat.UserQuitBO;
import com.gic.haoban.manage.service.pojo.qo.chat.GroupChatUserQO;
import org.apache.ibatis.annotations.Param;
......@@ -24,7 +26,7 @@ public interface GroupChatUserMapper {
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 , @Param("quitStaffStore")String quitStaffStore);
public int update(TabGroupChatUser tabHaobanGroupChatUser);
......@@ -63,4 +65,13 @@ public interface GroupChatUserMapper {
*/
List<TabGroupChatUser> queryGroupChatUserList(GroupChatUserQO groupChatUserQO);
/**
* 退群统计
* @param wxEnterpriseId
* @param start
* @param end
* @return
*/
List<UserQuitBO> listQuitNum(@Param("wxEnterpriseId") String wxEnterpriseId ,@Param("start") Date start ,@Param("end") Date end) ;
}
\ No newline at end of file
......@@ -37,7 +37,17 @@ public class TabGroupChatData implements Serializable{
/**截至当天新增迁移群数(仅教培行业返回)*/
private Integer migrateTraineeChatCnt;
private java.util.Date createTime;
private Integer quitUserCount ;
public Integer getQuitUserCount() {
return quitUserCount;
}
public void setQuitUserCount(Integer quitUserCount) {
this.quitUserCount = quitUserCount;
}
public void setDataId(Long dataId){
this.dataId = dataId;
}
......
......@@ -53,6 +53,27 @@ public class TabGroupChatPlan implements Serializable {
*/
private Integer materialFrom;
// 是否发送全部
private int sendAllFlag ;
// 所有的群发条件
private String allSearchParams ;
public String getAllSearchParams() {
return allSearchParams;
}
public void setAllSearchParams(String allSearchParams) {
this.allSearchParams = allSearchParams;
}
public int getSendAllFlag() {
return sendAllFlag;
}
public void setSendAllFlag(int sendAllFlag) {
this.sendAllFlag = sendAllFlag;
}
public Integer getSendFlag() {
return sendFlag;
}
......
......@@ -55,6 +55,15 @@ public class TabGroupChatUser implements Serializable {
// 0 成员 1群主 2管理员
private Integer adminFlag = 0;
private String quitStaffId ;
private String quitStaffStore ;
public String getQuitStaffStore() {
return quitStaffStore;
}
public void setQuitStaffStore(String quitStaffStore) {
this.quitStaffStore = quitStaffStore;
}
public String getQuitStaffId() {
return quitStaffId;
......
......@@ -53,6 +53,27 @@ public class GroupChatPlanBO implements Serializable{
* 关联素材来源1好办素材2内容中心
*/
private Integer materialFrom;
// 是否发送全部
private int sendAllFlag ;
// 所有的群发条件
private String allSearchParams ;
public String getAllSearchParams() {
return allSearchParams;
}
public void setAllSearchParams(String allSearchParams) {
this.allSearchParams = allSearchParams;
}
public int getSendAllFlag() {
return sendAllFlag;
}
public void setSendAllFlag(int sendAllFlag) {
this.sendAllFlag = sendAllFlag;
}
public Integer getSendFlag() {
return sendFlag;
......
package com.gic.haoban.manage.service.pojo.bo.chat;
import java.io.Serializable;
public class UserQuitBO implements Serializable {
private String staffId ;
private int num ;
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
......@@ -27,7 +27,7 @@ public interface StaffClerkBindLogService {
* @param optStaffId
* @param optType
* @param channelCode
* @param relationId
* @param relationId 导购成员关联表主键
*/
public void pushToMq(String staffId, String optStaffId, int optType, int channelCode, String relationId);
......
......@@ -25,4 +25,5 @@ public interface GroupChatDataService {
public Page<GroupChatDataDTO> listStaffData(ChatDataSearchQDTO qdto, BasePageInfo basePageInfo);
void groupChatQuitTimer(String params);
}
\ No newline at end of file
......@@ -93,6 +93,9 @@ public interface GroupChatService {
*/
public Page<GroupChatOwnerDTO> listOwnerPage(OwnerSearchQDTO qdto, BasePageInfo basePageInfo);
public List<String> setDepartIdList(String wxEnterpriseId, String departmentId) ;
/**
*
* @Title: listOwnerHistory
......
package com.gic.haoban.manage.service.service.chat.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import com.ctrip.framework.apollo.ConfigService;
import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatUserMapper;
import com.gic.haoban.manage.service.pojo.bo.chat.UserQuitBO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
......@@ -57,6 +56,8 @@ public class GroupChatDataServiceImpl implements GroupChatDataService {
private GroupChatDataMapper groupChatDataMapper;
@Autowired
private WxEnterpriseMapper wxEnterpriseMapper;
@Autowired
private GroupChatUserMapper groupChatUserMapper ;
@Override
public List<GroupChatDataDTO> listForChat(ChatDataSearchQDTO qdto) {
......@@ -107,6 +108,7 @@ public class GroupChatDataServiceImpl implements GroupChatDataService {
}
int pageNum = 0;
List<GroupChatOwnerDTO> list = null;
Date date = DateUtil.addDay(DateUtil.getStartTimeOfDay(), -1);
while (true) {
list = this.groupChatOwnerMapper.listOwnerForStatistic(wxEnterpriseId, pageNum * pageSize, pageSize);
if (CollectionUtils.isEmpty(list)) {
......@@ -125,8 +127,6 @@ public class GroupChatDataServiceImpl implements GroupChatDataService {
staffIdMap = list.stream().collect(Collectors.toMap(GroupChatOwnerDTO::getWxUserId,
GroupChatOwnerDTO::getStaffId, (k1, k2) -> k1));
}
Date date = DateUtil.addDay(DateUtil.getStartTimeOfDay(), -1);
Long time = date.getTime() / 1000;
ServiceResponse<List<GroupChatQwDataDTO>> resp = this.qywxChatApiService.statistic(qwDTO.getThirdCorpid(), qwDTO.getSelf3thSecret(), userIdList, time, time , qwDTO.isSelf() , qwDTO.getUrlHost());
List<GroupChatQwDataDTO> dataList = resp.getResult();
......@@ -165,5 +165,45 @@ public class GroupChatDataServiceImpl implements GroupChatDataService {
break;
}
}
Date end = DateUtil.getEndTimeOfDay(date) ;
List<UserQuitBO> quitList = this.groupChatUserMapper.listQuitNum(wxEnterpriseId,date,end) ;
if(CollectionUtils.isNotEmpty(quitList)) {
for(UserQuitBO bo : quitList) {
if(StringUtils.isNotBlank(bo.getStaffId())) {
this.groupChatDataMapper.updateQuitCount(wxEnterpriseId,date,bo.getStaffId(),bo.getNum());
}
}
}
}
@Override
public void groupChatQuitTimer(String params) {
List<String> wxEnterpriseIdList = new ArrayList<>();
if("-1".equals(params)) {
wxEnterpriseIdList = this.groupChatOwnerMapper.listAllEnterpriseId() ;
}else {
wxEnterpriseIdList.add(params) ;
}
com.ctrip.framework.apollo.Config config = ConfigService.getAppConfig();
String key = config.getProperty("group_chat_quit_data", "");
int start = Integer.valueOf(key.split("_")[0]) ;
int len = Integer.valueOf(key.split("_")[1]) ;
Date startDate = DateUtil.addDay(DateUtil.getStartTimeOfDay(), -start);
logger.info("groupChatQuitTimer={}",key);
for(int i=0;i<len;i++) {
Date date = DateUtil.addDay(startDate, -(i+1));
Date end = DateUtil.getEndTimeOfDay(date) ;
for(String wxEnterpriseId : wxEnterpriseIdList) {
List<UserQuitBO> quitList = this.groupChatUserMapper.listQuitNum(wxEnterpriseId,date,end) ;
if(CollectionUtils.isNotEmpty(quitList)) {
for(UserQuitBO bo : quitList) {
if(StringUtils.isNotBlank(bo.getStaffId())) {
this.groupChatDataMapper.updateQuitCount(wxEnterpriseId,date,bo.getStaffId(),bo.getNum());
}
}
}
}
}
logger.info("groupChatQuitTimer-end={}",key);
}
}
\ No newline at end of file
......@@ -10,7 +10,12 @@ import java.util.stream.Collectors;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.manage.api.dto.ContentMaterialDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.chat.ChatContentDTO;
import com.gic.haoban.manage.api.dto.chat.GroupChatOwnerDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.OwnerSearchQDTO;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanStaffClerkRelationMapper;
import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatOwnerMapper;
import com.gic.haoban.manage.service.util.StreamUtils;
import com.gic.thirdparty.cloudfile.CloudFileUtil;
import com.gic.thirdparty.cloudfile.enums.CloudFileBusinessOptEnum;
......@@ -108,6 +113,10 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
private PendingTaskService pendingTaskService;
@Autowired
private EnterpriseService enterpriseService;
@Autowired
private GroupChatOwnerMapper groupChatOwnerMapper ;
@Autowired
private TabHaobanStaffClerkRelationMapper tabHaobanStaffClerkRelationMapper ;
private static GicMQClient mqClient = GICMQClientUtil.getClientInstance();
......@@ -154,13 +163,15 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
planId = UniqueIdUtils.uniqueLong();
entity.setPlanId(planId);
entity.setStatusFlag(1);
entity.setStaffCount(staffIdList.split(",").length);
if(StringUtils.isNotEmpty(staffIdList)) {
entity.setStaffCount(staffIdList.split(",").length);
}else {
entity.setStaffCount(0);
}
entity.setSendCount(0);
entity.setSuccessChatCount(0);
entity.setFailChatCount(0);
this.groupChatPlanMapper.insert(entity);
// 新增群主日志
this.groupChatPlanOwnerLogService.batchAdd(dto.getStaffIdList(), entity);
} else {
TabGroupChatPlan old = this.groupChatPlanMapper.selectById(planId);
int staffCount = old.getStaffCount();
......@@ -174,9 +185,9 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
this.groupChatPlanMapper.updateById(entity);
// 删除本次删除的
this.groupChatPlanOwnerLogService.deleteByStaffIds(planId, dto.getDelStaffIdList());
// 新增本次新增的
this.groupChatPlanOwnerLogService.batchAdd(staffIdList, entity);
}
// 新增群主日志
this.groupChatPlanOwnerLogService.batchAdd(staffIdList, entity);
// 立即发送
if (entity.getSendType() == 1) {
this.addOrDelTimer(planId, entity.getSendTime(), 0);
......@@ -275,6 +286,15 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
return retPage;
}
private List<String> filterNoClerk(String wxEnterpriseId,List<GroupChatOwnerDTO> list) {
Set<String> set = list.stream().map(o->o.getStaffId()).collect(Collectors.toSet());
List<StaffClerkRelationDTO> stafIdList = this.tabHaobanStaffClerkRelationMapper.listByStaffIdsForClerk(wxEnterpriseId,set) ;
if(CollectionUtils.isNotEmpty(stafIdList)) {
return stafIdList.stream().map(o->o.getStaffId()).collect(Collectors.toList());
}
return Collections.emptyList() ;
}
@Override
public void doPlan(Long planId) {
logger.info("开始群群发发送{}", planId);
......@@ -329,6 +349,44 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
}
int pageNum = 0;
List<TabGroupChatPlanOwnerLog> ownerList = null;
int sendAlFlag = plan.getSendAllFlag() ;
String allSearchParams = plan.getAllSearchParams() ;
// 发送全部群主
if(sendAlFlag==1) {
int ownerPageNo = 0;
int ownerPageSize = 500 ;
int totalCount = 0 ;
List<GroupChatOwnerDTO> list = null;
String searchParams = null ;
List<String> departmentIdList = null ;
if(StringUtils.isNotEmpty(allSearchParams)) {
JSONObject json = JSONObject.parseObject(allSearchParams) ;
searchParams = json.getString("searchParams") ;
String dpid = json.getString("departmentId") ;
if(StringUtils.isNotBlank(dpid)) {
departmentIdList = this.groupChatService.setDepartIdList(wxEnterpriseId,dpid) ;
}
if(StringUtils.isNotBlank(searchParams)) {
searchParams ="%" + searchParams.trim() + "%";
}
}
while (true) {
if(null != searchParams || null != departmentIdList) {
list = this.groupChatOwnerMapper.listOwnerPage(wxEnterpriseId, departmentIdList,searchParams,ownerPageNo * ownerPageSize, ownerPageSize);
}else {
list = this.groupChatOwnerMapper.listOwnerForStatistic(wxEnterpriseId, ownerPageNo * ownerPageSize, ownerPageSize);
}
if (CollectionUtils.isEmpty(list)) {
break;
}
ownerPageNo++;
logger.info("全部,群主数={},{},过滤后={}", wxEnterpriseId,list.size());
String staffIds = list.stream().map(o->o.getStaffId()).collect(Collectors.joining(",")) ;
totalCount = totalCount + list.size() ;
this.groupChatPlanOwnerLogService.batchAdd(staffIds, plan);
}
this.groupChatPlanMapper.updateStaffCount(planId,totalCount);
}
while (true) {
ownerList = this.groupChatPlanOwnerLogMapper.listForDoPlan(planId, pageNum * pageSize, pageSize);
if (CollectionUtils.isEmpty(ownerList)) {
......
......@@ -10,6 +10,8 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
......@@ -122,6 +124,8 @@ public class GroupChatServiceImpl implements GroupChatService {
private DepartmentService departmentService;
@Autowired
private GroupChatInitMapper groupChatInitMapper;
@Autowired
private StoreService storeService ;
private static GicMQClient mqClient = GICMQClientUtil.getClientInstance();
......@@ -685,6 +689,27 @@ public class GroupChatServiceImpl implements GroupChatService {
if (RedisUtil.isLocked(lockKeyDetail)) {
return;
}
String staffId = chat.getStaffId() ;
String storeName = "";
if(null != staffId) {
List<StaffClerkRelationDTO> staffList = this.staffClerkRelationService.listByStaffId(wxEnterpriseId,staffId) ;
if(CollectionUtils.isNotEmpty(staffList)) {
List<String> storeIdList = staffList.stream().filter(o->StringUtils.isNotEmpty(o.getStoreId())).map(o->o.getStoreId()).collect(Collectors.toList()) ;
if(CollectionUtils.isNotEmpty(storeIdList)) {
String[] arr = new String[storeIdList.size()] ;
for(int i=0;i<storeIdList.size();i++) {
arr[i] = storeIdList.get(i) ;
}
List<StoreDTO> storeList = this.storeService.getStores(arr) ;
if(CollectionUtils.isNotEmpty(storeList)) {
storeName = storeList.stream().map(o->o.getStoreName()).collect(Collectors.joining("、")) ;
}
}
}
}
RedisUtil.lock(lockKeyDetail, 30L);
List<GroupChatDetailMemberDTO> qwUserList = detail.getMember_list();
// 当前群列表
......@@ -730,7 +755,7 @@ public class GroupChatServiceImpl implements GroupChatService {
// 流水会员数
int quitMemberCount = 0;
if (CollectionUtils.isNotEmpty(deleteIdList)) {
this.groupChatUserMapper.dismiss(deleteIdList, chat.getStaffId());
this.groupChatUserMapper.dismiss(deleteIdList, chat.getStaffId(),storeName);
quitCount = deleteIdList.size();
for (String userId : deleteUserIdList) {
TabGroupChatUser user = nowUserMap.get(userId);
......@@ -1050,7 +1075,8 @@ public class GroupChatServiceImpl implements GroupChatService {
return retPage;
}
private List<String> setDepartIdList(String wxEnterpriseId, String departmentId) {
@Override
public List<String> setDepartIdList(String wxEnterpriseId, String departmentId) {
List<String> departmentIdList = new ArrayList<>();
if (StringUtils.isNotBlank(departmentId)) {
TabHaobanDepartment department = this.departmentService.selectById(departmentId);
......
......@@ -47,8 +47,8 @@ public class StaffClerkBindLogServiceImpl implements StaffClerkBindLogService {
public void pushToMq(String staffId, String optStaffId, int optType, int channelCode, String relationId) {
StaffClerkBindLogInfoDTO infoDTO = new StaffClerkBindLogInfoDTO();
infoDTO.setChannelCode(channelCode);
infoDTO.setOptStaffId(optStaffId);
infoDTO.setChannelCode(channelCode);
infoDTO.setOptType(optType);
infoDTO.setRelationId(relationId);
......
......@@ -8,10 +8,12 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.gic.commons.util.DateUtil;
import com.gic.haoban.manage.service.entity.*;
import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
......@@ -107,7 +109,7 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
public boolean delBind(String oldClerkId, String optStaffId, int channelCode, String newClerkId, String wxEnterpriseId) {
boolean changeClerkFlag = StringUtils.isNotEmpty(newClerkId) ;
logger.info("导购解绑/换导购={},oldClerkId={},optStaffId={}",changeClerkFlag,oldClerkId,optStaffId);
if(StringUtils.isNotEmpty(optStaffId) && "-1".equals(optStaffId)) {
if(StringUtils.isNotEmpty(optStaffId) && !"-1".equals(optStaffId)) {
TabHaobanStaff staff = this.staffService.selectById(optStaffId) ;
if(null != staff) {
wxEnterpriseId = staff.getWxEnterpriseId() ;
......@@ -355,8 +357,17 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
staffClerkRelation.setStatusFlag(1);
staffClerkRelation.setOpenConcatFlag(1);
staffClerkRelation.setManageFlag(manageFlag == null ? 0 : manageFlag);
TabHaobanStaffClerkRelation relation = EntityUtil.changeEntityByJSON(TabHaobanStaffClerkRelation.class, staffClerkRelation);
String lockKey = "staffclerk:"+staffClerkRelation.getStaffId()+staffClerkRelation.getClerkId() ;
RedisUtil.lock(lockKey, 2L, TimeUnit.SECONDS, 2L);
StaffClerkRelationDTO dto = this.mapper.getByStaffAndClerk(staffClerkRelation.getStaffId(),staffClerkRelation.getClerkId()) ;
if(null != dto) {
RedisUtil.unlock(lockKey);
return dto.getStaffClerkRelationId() ;
}
mapper.insert(relation);
RedisUtil.unlock(lockKey);
return uuid;
}
......
......@@ -20,6 +20,7 @@ import com.gic.haoban.manage.service.entity.fee.TabHaobanQywxFeeAccountStaff;
import com.gic.haoban.manage.service.pojo.bo.StaffListBO;
import com.gic.haoban.manage.service.service.StaffService;
import com.gic.haoban.manage.service.service.fee.HaobanQywxFeeAccountStaffService;
import com.gic.redis.data.util.RedisUtil;
import com.gic.wechat.api.dto.qywx.fee.AccountListDTO;
import com.gic.wechat.api.dto.qywx.fee.AccountListResponseDTO;
import com.gic.wechat.api.dto.qywx.fee.ActiveInfoUserResponseDTO;
......@@ -34,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
......@@ -83,7 +85,15 @@ public class StaffServiceImpl implements StaffService {
}
tab.setStatusFlag(1);
tab.setAddNum(0);
String lockKey = "tabstaff:"+tab.getWxEnterpriseId()+tab.getWxUserId() ;
RedisUtil.lock(lockKey,2l, TimeUnit.SECONDS,2l);
TabHaobanStaff staff = this.mapper.selectByUserIdAndEnterpriseId(tab.getWxUserId(),tab.getWxEnterpriseId()) ;
if(null != staff) {
RedisUtil.unlock(lockKey);
return staff.getStaffId() ;
}
mapper.insertSelective(tab);
RedisUtil.unlock(lockKey);
return tab.getStaffId();
}
......
package com.gic.haoban.manage.service.service.out.impl;
import com.gic.haoban.manage.service.service.chat.GroupChatDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -24,6 +25,8 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
private GroupChatService groupChatService;
@Autowired
private ExternalMemberService externalMemberService ;
@Autowired
private GroupChatDataService groupChatDataService ;
@Override
......@@ -79,4 +82,10 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
this.externalMemberService.welcomeForMember() ;
return ServiceResponse.success();
}
@Override
public ServiceResponse<Void> groupChatQuitTimer(String params) {
this.groupChatDataService.groupChatQuitTimer(params) ;
return ServiceResponse.success();
}
}
......@@ -395,8 +395,8 @@ public class MessageApiServiceImpl implements MessageApiService {
.listByStaffId(wxEnterpriseId, staffId);
if (CollectionUtils.isNotEmpty(staffClerkRelationDTOS)) {
for (StaffClerkRelationDTO staffClerkRelationDTO : staffClerkRelationDTOS) {
staffClerkRelationApiService.unbindByStaffAndClerkId(staffId, staffClerkRelationDTO.getClerkId(),
ChannelCodeEnum.ADMIN_UNBIND.getCode(), wxEnterpriseId);
staffClerkRelationApiService.unbindByStaffAndClerkId("-1", staffClerkRelationDTO.getClerkId(),
ChannelCodeEnum.QW_DEL_UNBIND.getCode(), wxEnterpriseId);
}
}
// 群状态刷新
......
......@@ -13,12 +13,10 @@ import com.gic.clerk.api.service.PowerService;
import com.gic.commons.util.DateUtil;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.ImageUtil;
import com.gic.enterprise.api.dto.EnterpriseSettingDTO;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.dto.StoreGroupDTO;
import com.gic.enterprise.api.dto.StoreWidgetDTO;
import com.gic.enterprise.api.dto.*;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.enterprise.api.service.StoreGroupService;
import com.gic.enterprise.api.service.StoreService;
import com.gic.enterprise.api.service.StoreWidgetService;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.base.api.common.ServiceResponse;
......@@ -135,6 +133,8 @@ public class StaffApiServiceImpl implements StaffApiService {
private HaobanQywxFeeOrderService haobanQywxFeeOrderService;
@Autowired
private MessageApiService messageApiService ;
@Autowired
private StoreService storeService ;
@Override
public StaffDTO selectById(String staffId) {
......@@ -949,7 +949,7 @@ public class StaffApiServiceImpl implements StaffApiService {
return storeRoleDTO;
}
Integer clerkType = clerkDTO.getClerkType();
if (clerkType != null && clerkType != 2) {
if (clerkType != null && clerkType != 2 && clerkType != 3) {
storeRoleDTO.setStoreCount(1);
storeRoleDTO.setStoreId(clerkDTO.getStoreId());
return storeRoleDTO;
......@@ -961,19 +961,27 @@ public class StaffApiServiceImpl implements StaffApiService {
}
if (storeIds.contains("-1")) {
logger.info("该导购为所有门店,clerkId={}",clerkId);
String storeWidgetId = this.powerService.getStoreWidgetId(new Date(), clerkId);
int storeCount = 0 ;
String storeId = null ;
if(null != storeWidgetId) {
Page<Object> pageParam = new Page<Object>();
pageParam.setCurrentPage(1);
pageParam.setPageSize(1);
Page<StoreDTO> page = storeWidgetService.getStoreWidgetStore(storeWidgetId, null, clerkDTO.getEnterpriseId(), pageParam, null,null);
Page<Object> pageParam = new Page<Object>();
pageParam.setCurrentPage(1);
pageParam.setPageSize(1);
if(clerkType == 2) {
String storeWidgetId = this.powerService.getStoreWidgetId(new Date(), clerkId);
if(null != storeWidgetId) {
Page<StoreDTO> page = storeWidgetService.getStoreWidgetStore(storeWidgetId, null, clerkDTO.getEnterpriseId(), pageParam, null,null);
storeId = page.getResult().get(0).getStoreId();
storeCount = page.getTotalCount();
}
}else if(clerkType == 3) {
StoreSearchDTO searchDTO = new StoreSearchDTO() ;
searchDTO.setEnterpriseId(clerkDTO.getEnterpriseId());
Page<StoreDTO> page = this.storeService.storeListPage(pageParam,searchDTO) ;
storeId = page.getResult().get(0).getStoreId();
storeCount = page.getTotalCount();
storeRoleDTO.setStoreId(storeId);
storeRoleDTO.setStoreCount(storeCount);
}
storeRoleDTO.setStoreId(storeId);
storeRoleDTO.setStoreCount(storeCount);
return storeRoleDTO;
}
int size = storeIds.size();
......
......@@ -22,6 +22,7 @@ import com.gic.haoban.manage.api.enums.ChannelCodeEnum;
import com.gic.haoban.manage.api.service.AuditApiService;
import com.gic.haoban.manage.api.service.StaffClerkRelationApiService;
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.TabHaobanStaffClerkRelationMapper;
import com.gic.haoban.manage.service.entity.MemberClerkChatConfig;
import com.gic.haoban.manage.service.entity.TabHaobanStaff;
......@@ -76,10 +77,12 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
private HmQrcodeService hmQrcodeService;
@Autowired
private StoreRangeService storeRangeService;
@Autowired
private StaffMapper staffMapper ;
@Override
public void bindLogMq(String params) {
logger.info("绑定日志mq:{}", params);
logger.info("成员绑定导购mq={}", params);
StaffClerkBindLogInfoDTO infoDTO = JSONObject.parseObject(params, StaffClerkBindLogInfoDTO.class);
if (null == infoDTO) {
logger.info("数据不存在");
......@@ -98,16 +101,18 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
clerkName = clerkDTO.getClerkName();
}
String operClerkId = infoDTO.getOptStaffId();
ClerkDTO operClerkDTO = clerkService.getClerkByClerkIdNoStatus(operClerkId);
String operName = null;
if (null != operClerkDTO) {
operName = operClerkDTO.getClerkName();
}
//如果是小程序解绑,需要存储staffName
if(infoDTO.getChannelCode() != null &&(infoDTO.getChannelCode().equals(ChannelCodeEnum.SELF_UNBIND.getCode()) || infoDTO.getChannelCode().equals(ChannelCodeEnum.SELF_BIND.getCode()))){
TabHaobanStaff tabHaobanStaff = staffService.selectById(operClerkId);
if (null != tabHaobanStaff) {
operName =tabHaobanStaff.getStaffName();
if(StringUtils.isNotEmpty(operClerkId)) {
ClerkDTO operClerkDTO = clerkService.getClerkByClerkIdNoStatus(operClerkId);
if (null != operClerkDTO) {
operName = operClerkDTO.getClerkName();
}
//如果是小程序解绑,需要存储staffName
if(infoDTO.getChannelCode() != null &&(infoDTO.getChannelCode().equals(ChannelCodeEnum.SELF_UNBIND.getCode()) || infoDTO.getChannelCode().equals(ChannelCodeEnum.SELF_BIND.getCode()))){
TabHaobanStaff tabHaobanStaff = staffService.selectById(operClerkId);
if (null != tabHaobanStaff) {
operName =tabHaobanStaff.getStaffName();
}
}
}
TabHaobanStaffClerkBindLog enity = new TabHaobanStaffClerkBindLog();
......@@ -354,7 +359,7 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
Page<StaffClerkBindLogDetailDTO> retList = staffClerkBindLogService.pageBindLog(wxEnterpriseId, enterpriseId, optType, search, pageInfo);
if (CollectionUtils.isNotEmpty(retList.getResult())) {
retList.getResult().forEach(item -> {
TabHaobanStaff haobanStaff = staffService.selectById(item.getStaffId());
TabHaobanStaff haobanStaff = staffMapper.selectByPrimaryKeyNoStatus(item.getStaffId());
if (null != haobanStaff) {
item.setStaffName(haobanStaff.getStaffName());
item.setWxUserId(haobanStaff.getWxUserId());
......
......@@ -75,7 +75,6 @@ public class GroupChatPlanApiServiceImpl implements GroupChatPlanApiService {
* @Title: doPlan
* @Description: 定时执行计划
* @author xugh
* @param planId
* @return
* @throws
*/
......
......@@ -10,5 +10,5 @@
<import resource="classpath:dubbo-setting-test.xml"/>
<import resource="classpath:jdbc-haoban-manage-service.xml" />
<import resource="classpath*:log-record-init.xml" />
<import resource="classpath*:kafka-setting-data.xml" />
<!-- <import resource="classpath*:kafka-setting-data.xml" />-->
</beans>
\ No newline at end of file
......@@ -166,7 +166,7 @@
</select>
<select id="listByWxEnterpriseId" resultType="String">
<select id="listByWxEnterpriseId" resultType="java.lang.String">
select a.staff_id
from tab_haoban_staff_clerk_relation a left join tab_haoban_staff b on a.staff_id = b.staff_id
where a.wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR}
......@@ -453,6 +453,20 @@
</foreach>
</select>
<select id="listByStaffIdsForClerk" resultType="com.gic.haoban.manage.api.dto.StaffClerkRelationDTO">
select
staff_id staffId
from tab_haoban_staff_clerk_relation
WHERE
wx_enterprise_id = #{wxEnterpriseId}
AND status_flag = 1 and manage_flag <![CDATA[<>]]> 1
AND staff_id in
<foreach collection="staffIdList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<select id="listAllStaffIdByEnterpriseId" resultType="java.lang.String">
select a.staff_id
from tab_haoban_staff_clerk_relation a left join tab_haoban_staff b on b.staff_id = a.staff_id
......@@ -461,4 +475,11 @@
a.staff_id
</select>
<select id="getByStaffAndClerk" resultType="com.gic.haoban.manage.api.dto.StaffClerkRelationDTO">
<include refid="leftJoinStaffSQL" />
where a.status_flag=1 and b.status_flag=1
and a.staff_id = #{staffId} and a.clerk_id = #{clerkId}
order by a.update_time desc limit 1
</select>
</mapper>
\ No newline at end of file
......@@ -17,6 +17,7 @@
<result column="msg_total" property="msgTotal" />
<result column="migrate_trainee_chat_cnt" property="migrateTraineeChatCnt" />
<result column="create_time" property="createTime" />
<result column="quit_user_count" property="quitUserCount" />
</resultMap>
<sql id="Base_Column_List">
data_id,
......@@ -31,7 +32,7 @@
member_has_msg,
msg_total,
migrate_trainee_chat_cnt,
create_time
create_time , quit_user_count
</sql>
<insert id="batchInsert">
......@@ -48,7 +49,7 @@
member_has_msg,
msg_total,
migrate_trainee_chat_cnt,
create_time
create_time , quit_user_count
)VALUES
<foreach collection="list" item="item" separator="," >
( #{item.dataId},
......@@ -63,27 +64,31 @@
#{item.memberHasMsg},
#{item.msgTotal},
#{item.migrateTraineeChatCnt},
now()
now() , 0
)
</foreach>
</insert>
<update id="updateQuitCount">
update tab_haoban_group_chat_data set quit_user_count = #{quitCount} where wx_enterprise_id=#{wxEnterpriseId}
and date = #{date} and staff_id = #{staffId}
</update>
<select id="listTotalData" parameterType="com.gic.haoban.manage.api.dto.qdto.chat.ChatDataSearchQDTO"
resultType="com.gic.haoban.manage.api.dto.chat.GroupChatDataDTO">
select sum(chatTotal) chatTotal , sum(memberTotal) memberTotal,
SUM(newChatCnt) newChatCnt, SUM(chatHasMsg) chatHasMsg, SUM(newMemberCnt) newMemberCnt,
SUM(memberHasMsg) memberHasMsg, SUM(msgTotal) msgTotal
SUM(memberHasMsg) memberHasMsg, SUM(msgTotal) msgTotal , sum(quitUserCount) quitUserCount
from (
SELECT
staffId, `date`, chatTotal, memberTotal,
SUM(newChatCnt) newChatCnt, SUM(chatHasMsg) chatHasMsg, SUM(newMemberCnt) newMemberCnt,
SUM(memberHasMsg) memberHasMsg, SUM(msgTotal) msgTotal
SUM(memberHasMsg) memberHasMsg, SUM(msgTotal) msgTotal , sum(quitUserCount) quitUserCount
FROM
(SELECT
a.staff_id staffId, a.date `date`,
a.chat_total chatTotal, a.member_total memberTotal,
a.new_chat_cnt newChatCnt, a.chat_has_msg chatHasMsg, a.new_member_cnt newMemberCnt,
a.member_has_msg memberHasMsg, a.msg_total msgTotal
a.member_has_msg memberHasMsg, a.msg_total msgTotal , a.quit_user_count quitUserCount
FROM tab_haoban_group_chat_data a
where a.wx_enterprise_id = #{wxEnterpriseId}
and a.date >= #{startDate} and a.date <![CDATA[ <= ]]> #{endDate}
......@@ -106,7 +111,8 @@
sum(a.chat_has_msg) chatHasMsg ,
sum(a.new_member_cnt) newMemberCnt ,
sum(a.member_has_msg) memberHasMsg ,
sum(a.msg_total) msgTotal
sum(a.msg_total) msgTotal ,
sum(a.quit_user_count) quitUserCount
from tab_haoban_group_chat_data a
where a.wx_enterprise_id = #{wxEnterpriseId}
and a.date >= #{startDate} and a.date <![CDATA[ <= ]]> #{endDate}
......@@ -124,13 +130,13 @@
SELECT
staffId, staffName, `date`, chatTotal, memberTotal,
SUM(newChatCnt) newChatCnt, SUM(chatHasMsg) chatHasMsg, SUM(newMemberCnt) newMemberCnt,
SUM(memberHasMsg) memberHasMsg, SUM(msgTotal) msgTotal
SUM(memberHasMsg) memberHasMsg, SUM(msgTotal) msgTotal , sum(quitUserCount) quitUserCount
FROM
(SELECT
b.staff_name staffName, a.staff_id staffId, a.date `date`,
a.chat_total chatTotal, a.member_total memberTotal,
a.new_chat_cnt newChatCnt, a.chat_has_msg chatHasMsg, a.new_member_cnt newMemberCnt,
a.member_has_msg memberHasMsg, a.msg_total msgTotal
a.member_has_msg memberHasMsg, a.msg_total msgTotal , a.quit_user_count quitUserCount
FROM tab_haoban_group_chat_data a LEFT JOIN tab_haoban_staff b ON a.staff_id = b.staff_id
where a.wx_enterprise_id = #{wxEnterpriseId}
and a.date >= #{startDate} and a.date <![CDATA[ <= ]]> #{endDate}
......@@ -141,6 +147,8 @@
</foreach>
</if>
ORDER BY a.date DESC
) tb GROUP BY staffId
) tb GROUP BY staffId ORDER BY ${sortColumn} ${sortType}
</select>
</mapper>
\ No newline at end of file
......@@ -68,7 +68,7 @@
and b.staff_name like #{searchParams}
</if>
<if test="status==1">
and b.status_flag = 1
and b.status_flag = 1
</if>
<if test="status==2">
and b.status_flag = 0
......@@ -77,6 +77,32 @@
group by a.staff_id
</if>
</select>
<select id="listOwnerPage" resultType="com.gic.haoban.manage.api.dto.chat.GroupChatOwnerDTO">
select * from (
SELECT a.staff_id staffId , b.`staff_name` staffName , a.wx_enterprise_id wxEnterpriseId ,
b.wx_user_id wxUserId , b.wx_open_user_id wxOpenUserId
FROM tab_haoban_group_chat_owner a LEFT JOIN tab_haoban_staff b ON a.`staff_id` = b.`staff_id`
<if test="departmentIdList != null and departmentIdList.size() > 0">
left join tab_haoban_staff_department_related c on a.staff_id = c.staff_id and c.status_flag = 1
</if>
where a.wx_enterprise_id=#{wxEnterpriseId}
<if test="departmentIdList != null and departmentIdList.size() > 0">
and c.department_id IN
<foreach collection="departmentIdList" item="id" index="index" open="(" close=")" separator=",">
#{id,jdbcType=VARCHAR}
</foreach>
</if>
<if test="null != searchParams and ''!=searchParams ">
and b.staff_name like #{searchParams}
</if>
and b.status_flag = 1
<if test="departmentIdList != null and departmentIdList.size() > 0">
group by a.staff_id
</if>
) t limit ${startItem},${pageSize}
</select>
<select id="listOwnerForStatistic" resultType="com.gic.haoban.manage.api.dto.chat.GroupChatOwnerDTO">
SELECT a.staff_id staffId , a.wx_enterprise_id wxEnterpriseId ,
......@@ -92,5 +118,9 @@
FROM tab_haoban_group_chat_owner a LEFT JOIN tab_haoban_staff b ON a.`staff_id` = b.`staff_id`
where a.update_time > DATE_ADD(CURDATE(), INTERVAL -1 DAY) and b.status_flag = 0
</select>
<select id="listAllEnterpriseId" resultType="java.lang.String">
select distinct(wx_enterprise_id) from tab_haoban_group_chat_owner
</select>
</mapper>
\ No newline at end of file
......@@ -28,6 +28,8 @@
<result column="fail_chat_count" property="failChatCount" />
<result column="send_flag" property="sendFlag" />
<result column="material_from" property="materialFrom" />
<result column="send_all_flag" property="sendAllFlag" />
<result column="all_search_params" property="allSearchParams" />
</resultMap>
<sql id="Base_Column_List">
plan_id,
......@@ -51,7 +53,7 @@
success_chat_count,
fail_chat_count ,
wx_enterprise_id , enterprise_id , send_flag ,
material_from
material_from , send_all_flag , all_search_params
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert"
......@@ -78,7 +80,7 @@
send_count,
success_chat_count,
fail_chat_count , wx_enterprise_id , enterprise_id , delete_flag , send_flag,
material_from
material_from , send_all_flag , all_search_params
)VALUES(
#{planId},
#{name},
......@@ -100,7 +102,7 @@
#{sendCount},
#{successChatCount},
#{failChatCount} , #{wxEnterpriseId} , #{enterpriseId} , 0 , 1,
#{materialFrom}
#{materialFrom} , #{sendAllFlag} , #{allSearchParams}
)
]]>
</insert>
......@@ -115,7 +117,7 @@
<update id="stopById">
UPDATE
tab_haoban_group_chat_plan SET status_flag = 0 , modifier_id =
#{clerkId} , modifier_name = #{clerkName} , end_time = now() , update_time=now()
#{clerkId} , modifier_name = #{clerkName} , end_time = now() , update_time=now()
<if test="null != modifyStartTimeFlag">
, startTime = now()
</if>
......@@ -143,7 +145,9 @@
start_time=#{startTime},
end_time=#{endTime},
expire_days=#{expireDays},
material_from=#{materialFrom}
material_from=#{materialFrom} ,
send_all_flag = #{sendAllFlag} ,
all_search_params = #{allSearchParams}
where plan_id = #{planId}
]]>
</update>
......@@ -202,4 +206,8 @@
update tab_haoban_group_chat_plan set send_count = send_count+ #{sendCount} , success_chat_count=success_chat_count+#{successChatCount} , fail_chat_count = fail_chat_count+#{failChatCount} ,
update_time =now() where plan_id = #{planId}
</update>
<update id="updateStaffCount">
update tab_haoban_group_chat_plan set staff_count = #{staffCount} , update_time =now() where plan_id = #{planId}
</update>
</mapper>
\ No newline at end of file
......@@ -170,7 +170,12 @@
<if test="null != searchParams">
and b.name like #{searchParams}
</if>
and b.end_time > now()
<if test="1==clerkTaskStatus">
and b.end_time > now()
</if>
<if test="2==clerkTaskStatus">
and b.end_time <![CDATA[<=]]> now()
</if>
group by b.plan_id
having notSendCount
order by b.end_time desc , a.create_time desc
......
......@@ -28,6 +28,7 @@
<result column="join_state" property="joinState" />
<result column="admin_flag" property="adminFlag"/>
<result column="quit_staff_id" property="quitStaffId"/>
<result column="quit_staff_store" property="quitStaffStore" />
</resultMap>
<sql id="Base_Column_List">
chat_user_id,
......@@ -50,7 +51,7 @@
quit_scene,
join_scene,
join_remark,
join_state , invitor_user_name , admin_flag , quit_staff_id
join_state , invitor_user_name , admin_flag , quit_staff_id , quit_staff_store
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert"
......@@ -158,7 +159,9 @@
<!-- =====================废弃群==================== -->
<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} ,
quit_staff_store = #{quitStaffStore}
WHERE chat_user_id in
<foreach collection="idList" close=")" open="(" index="index" item="id" separator=",">
#{id}
</foreach>
......@@ -227,6 +230,7 @@
select
b.name chatName ,
b.wx_chat_id wxChatId ,
c.staff_id staffId ,
c.staff_name staffName ,
a.chat_user_id chatUserId ,
a.user_type userType ,
......@@ -237,13 +241,14 @@
a.invitor_user_id invitorUserId,
a.invitor_user_name invitorUserName ,
a.user_quit_time userQuitTime,
a.quit_staff_store quitStaffStore ,
a.join_scene joinScene,
a.join_state joinState
from tab_haoban_group_chat_user a
left join tab_haoban_group_chat b on a.group_chat_id = b.group_chat_id
<choose>
<when test="status==2">
left join tab_haoban_staff c on a.quit_staff_id = c.staff_id
left join tab_haoban_staff c on a.quit_staff_id = c.staff_id
</when>
<otherwise>
left join tab_haoban_staff c on b.staff_id = c.staff_id
......@@ -299,5 +304,10 @@
</if>
</where>
</select>
<select id="listQuitNum" resultType="com.gic.haoban.manage.service.pojo.bo.chat.UserQuitBO">
select quit_staff_id staffId , count(*) num from tab_haoban_group_chat_user where wx_enterprise_id=#{wxEnterpriseId} and user_quit_time >= #{start}
and user_quit_time <![CDATA[<=]]> #{end} and status_flag = 2 group by quit_staff_id
</select>
</mapper>
\ No newline at end of file
......@@ -379,6 +379,18 @@ public class StaffController extends WebBaseController {
}
}
}
if(null != login.getSuperAdmin() && login.getSuperAdmin()==1 && manageFlag == 1) {
ClerkDTO superClerk = this.clerkService.getSuperAdminByEnterpriseId(enterpriseId) ;
if(superClerk.getPhoneNumber().contains(search) || superClerk.getClerkCode().equals(search)) {
superClerk.setClerkName("超级管理员");
ClerkInfoVo superVO = EntityUtil.changeEntityByJSON(ClerkInfoVo.class, superClerk) ;
// 判断是否有有关联
if(CollectionUtils.isNotEmpty(staffClerkRelationApiService.listByClerkIds(Arrays.asList(superClerk.getClerkId())))) {
superVO.setRelationStatus(1);
}
retList.add(superVO);
}
}
return resultResponse(HaoBanErrCode.ERR_1, retList);
}
......@@ -552,20 +564,17 @@ public class StaffController extends WebBaseController {
}
mergeClerkInfo(voList, wxEnterpriseId);
String fileName = wxEnterpriseName + "通讯录" + DateUtil.dateToStr(new Date(), DateUtil.FORMAT_DATE_8);
List<String> titleList =Lists.newArrayList("姓名", "职务", "部门", "手机号", "关联状态", "关联导购");
List<String> fileList = Lists.newArrayList("staffName", "position", "departmentName", "phoneNumber", "relationFlag", "clerkName");
List<String> titleList =Lists.newArrayList("姓名", "职务", "部门", "手机号", "关联状态", "关联导购","成员明文userid");
List<String> fileList = Lists.newArrayList("staffName", "position", "departmentName", "phoneNumber", "relationFlag", "clerkName","wxUserId");
if (flag){
titleList.add("所属商户");
fileList.add("enterpriseName");
}
//针对未升级好办独立应用的企业,导出表格增加导出字段:成员明文userid、成员加密userid、许可状态、许可激活时间、许可到期时间
if(enterprise != null && enterprise.getWxSecurityType() != 5){
titleList.add("成员明文userid");
titleList.add("成员加密userid");
titleList.add("许可状态");
titleList.add("许可激活时间");
titleList.add("许可到期时间");
fileList.add("wxUserId");
fileList.add("wxOpenUseId");
fileList.add("status");
fileList.add("activeTime");
......
......@@ -5,10 +5,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.ConnectException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.net.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
......@@ -31,6 +28,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
......@@ -605,4 +603,59 @@ public class TestController extends WebBaseController {
}
return null;
}
public static String httpRequest(String requestUrl, String requestMethod, String outputStr, int timeOut) {
if (timeOut == 0) {
timeOut = 1000;
}
try {
URL url = new URL(requestUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setReadTimeout(timeOut);
conn.setRequestMethod(requestMethod);
if (null != outputStr) {
OutputStream outputStream = conn.getOutputStream();
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
StringBuilder buffer = new StringBuilder();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream = null;
conn.disconnect();
return buffer.toString();
} catch (ConnectException ce) {
ce.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@RequestMapping("self-check")
@ResponseBody
public Object self(String ips){
if(StringUtils.isEmpty(ips)) {
ips = "121.36.247.198,60.204.155.186,123.60.35.52,124.70.140.207,121.37.130.214,122.9.64.47,116.63.51.145,122.9.68.94,122.9.190.110" ;
}
String[] arr = ips.split(",") ;
Map<String,String> map = new HashMap<>() ;
for(String ip : arr) {
String s = httpRequest("http://"+ip+":8990/api-qywx-self/index.html","GET",null,3000) ;
logger.info("s={},{}",ip,s);
map.put(ip,s) ;
}
return map ;
}
}
......@@ -203,8 +203,8 @@ public class GroupChatController {
}
String s = DateUtil.formatString(new Date(), DateUtil.FORMAT_DATE_10);
String fileName = "退群记录"+s;
List<String> titleList = Arrays.asList("群成员姓名", "群成员昵称", "身份", "群名称", "群主", "退群时间");
List<String> fileList = Arrays.asList("userName","nickName","userTypeExcel", "chatName", "staffName", "userQuitTimeExcel");
List<String> titleList = Arrays.asList("群成员姓名", "群成员昵称", "身份", "群名称", "群主", "群主关联门店", "退群时间");
List<String> fileList = Arrays.asList("userName","nickName","userTypeExcel", "chatName", "staffName", "quitStaffStore" , "userQuitTimeExcel");
try {
ExcelUtils.xls(response, request, fileName, voList, fileList, titleList);
} catch (Exception e) {
......
......@@ -70,7 +70,7 @@ public class GroupChatPlanController {
@RequestMapping("add")
@GicLogRecord(value = "${#logValue}", category = GicLogRecordCategoryEnum.HB_QQF, optType = GicLogRecordOptTypeEnum.HB_1000_01, userFunc = LogRecordUserServiceImpl.class, optPage = "客户群群发")
public RestResponse<Object> save(@RequestBody GroupChatPlanDTO dto) {
if (StringUtils.isBlank(dto.getStaffIdList())) {
if (dto.getSendAllFlag() == 0 && StringUtils.isBlank(dto.getStaffIdList())) {
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure("9999", "请选择群主");
}
......
......@@ -32,6 +32,15 @@ public class GroupChatDataVO implements Serializable {
private Integer memberHasMsg;
/**截至当天客户群消息总数*/
private Integer msgTotal;
private Integer quitUserCount ;
public Integer getQuitUserCount() {
return quitUserCount;
}
public void setQuitUserCount(Integer quitUserCount) {
this.quitUserCount = quitUserCount;
}
public String getStaffName() {
return staffName;
......
......@@ -60,8 +60,29 @@ public class GroupChatPlanVO implements Serializable{
* 关联素材来源1好办素材2内容中心
*/
private Integer materialFrom;
public List<ChatOwnerVO> getOwnerList() {
// 是否发送全部
private int sendAllFlag ;
// 所有的群发条件
private String allSearchParams ;
public String getAllSearchParams() {
return allSearchParams;
}
public void setAllSearchParams(String allSearchParams) {
this.allSearchParams = allSearchParams;
}
public int getSendAllFlag() {
return sendAllFlag;
}
public void setSendAllFlag(int sendAllFlag) {
this.sendAllFlag = sendAllFlag;
}
public List<ChatOwnerVO> getOwnerList() {
return ownerList;
}
......
......@@ -26,6 +26,16 @@ public class GroupChatUserQuitVO implements Serializable{
private String chatName ;
private String staffName ;
private String quitStaffStore ;
public String getQuitStaffStore() {
return quitStaffStore;
}
public void setQuitStaffStore(String quitStaffStore) {
this.quitStaffStore = quitStaffStore;
}
public String getUserTypeExcel() {
return userTypeExcel;
}
......
......@@ -1708,11 +1708,22 @@ public class WxStaffController extends WebBaseController {
Page<Object> pageParam = new Page<Object>();
pageParam.setCurrentPage(currentPage);
pageParam.setPageSize(pageSize);
Page<StoreDTO> page = storeWidgetService.getStoreWidgetStore(storeWidgetId, null, enterpriseId, pageParam,
null, null);
if (page != null) {
storeDTOList = page.getResult();
totalCount = page.getTotalCount();
ClerkDTO clerkDTO = clerkService.getClerkByClerkIdNoStatus(clerkId);
if(clerkDTO.getClerkType() == 2) {
Page<StoreDTO> page = storeWidgetService.getStoreWidgetStore(storeWidgetId, null, enterpriseId, pageParam,
null, null);
if (page != null) {
storeDTOList = page.getResult();
totalCount = page.getTotalCount();
}
}else if(clerkDTO.getClerkType()==3) {
StoreSearchDTO searchDTO = new StoreSearchDTO() ;
searchDTO.setEnterpriseId(clerkDTO.getEnterpriseId());
Page<StoreDTO> page = this.storeService.storeListPage(pageParam,searchDTO) ;
if (page != null) {
storeDTOList = page.getResult();
totalCount = page.getTotalCount();
}
}
} else {
totalCount = storeIdList.size();
......
......@@ -12,6 +12,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONArray;
......@@ -44,9 +45,10 @@ public class GroupChatPlanController {
@Autowired
private MaterialApiService materialApiService;
// clerkTaskStatus 1待处理 2已处理/已失效
@RequestMapping("total-list")
public RestResponse<Object> totalList(String clerkId, String wxEnterpriseId, String enterpriseId,
String searchParams, BasePageInfo basePageInfo) {
String searchParams, BasePageInfo basePageInfo , @RequestParam(defaultValue = "1") int clerkTaskStatus) {
if (StringUtils.isEmpty(clerkId)) {
return RestResponse.failure("1", "clerkId为空");
}
......@@ -57,6 +59,7 @@ public class GroupChatPlanController {
if (StringUtils.isNotBlank(searchParams)) {
qdto.setSearchParams("%" + searchParams + "%");
}
qdto.setClerkTaskStatus(clerkTaskStatus);
ServiceResponse<Page<ChatOwnerTotalDTO>> pageResp = this.groupChatPlanApiService
.listOwnerLogPageForWxaTotal(qdto, basePageInfo);
Page<ChatOwnerTotalDTO> page = pageResp.getResult();
......
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