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