Commit d8b0514d by songyinghui

Merge remote-tracking branch 'origin/master' into feature-content4

parents 6447d09d 375a592a
package com.gic.haoban.manage.api.dto;
import java.io.Serializable;
/**
* @description:
* @Author: wenhua
* @Date: 2023/8/16 10:08
*/
public class StaffActiveAllocationDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 失败个数
*/
private Integer nums;
/**
* 失败原因
*/
private String errMessage;
public Integer getNums() {
return nums;
}
public void setNums(Integer nums) {
this.nums = nums;
}
public String getErrMessage() {
return errMessage;
}
public void setErrMessage(String errMessage) {
this.errMessage = errMessage;
}
}
...@@ -209,4 +209,7 @@ public interface DealSyncOperationApiService { ...@@ -209,4 +209,7 @@ public interface DealSyncOperationApiService {
* @param taskId * @param taskId
*/ */
void dealTagTask(String wxEnterpriseId, String enterpriseId, List<String> tagIds, String taskId); void dealTagTask(String wxEnterpriseId, String enterpriseId, List<String> tagIds, String taskId);
void taskStatusTimer(String params) ;
void staffTaskStatusTimer(String params) ;
} }
...@@ -356,4 +356,6 @@ public interface StaffApiService { ...@@ -356,4 +356,6 @@ public interface StaffApiService {
*/ */
com.gic.api.base.commons.ServiceResponse<Boolean> syncQywxStaffList(String params) ; com.gic.api.base.commons.ServiceResponse<Boolean> syncQywxStaffList(String params) ;
com.gic.api.base.commons.ServiceResponse<StaffActiveAllocationDTO> staffActiveAllocation(String wxEnterpriseId,String staffIds);
} }
...@@ -15,6 +15,7 @@ import com.gic.haoban.manage.web.controller.WebBaseController; ...@@ -15,6 +15,7 @@ import com.gic.haoban.manage.web.controller.WebBaseController;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode; import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.member.tag.api.service.MemberTagImportDealService; import com.gic.member.tag.api.service.MemberTagImportDealService;
import com.gic.mq.sdk.GicMQClient; import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import com.gic.sharing.core.service.api.service.MqApiService; import com.gic.sharing.core.service.api.service.MqApiService;
import com.task.allocation.qo.AllocationTaskQo; import com.task.allocation.qo.AllocationTaskQo;
import com.task.allocation.qo.TaskAllocationComputed; import com.task.allocation.qo.TaskAllocationComputed;
...@@ -263,4 +264,19 @@ public class TestController extends WebBaseController { ...@@ -263,4 +264,19 @@ public class TestController extends WebBaseController {
} }
return resultResponse(HaoBanErrCode.ERR_1); return resultResponse(HaoBanErrCode.ERR_1);
} }
@RequestMapping("/get-cache")
public Object getCache(String key) {
Object o = RedisUtil.getCache(key) ;
return o ;
}
@RequestMapping("/del-cache")
public Object delCache(String key) {
Object o = RedisUtil.getCache(key) ;
if(null != o) {
RedisUtil.delCache(key);
}
return o ;
}
} }
...@@ -420,7 +420,7 @@ public interface TabHaobanExternalClerkRelatedMapper { ...@@ -420,7 +420,7 @@ public interface TabHaobanExternalClerkRelatedMapper {
*/ */
void deleteByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("enterpriseIdList") List<String> enterpriseIdList); void deleteByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("enterpriseIdList") List<String> enterpriseIdList);
List<TabHaobanExternalClerkRelated> getAddTimeByMemberId(@Param("memberId") String memberId, @Param("enterpriseId") String enterpriseId); List<TabHaobanExternalClerkRelated> getAddTimeByMemberId(@Param("memberId") String memberId, @Param("enterpriseId") String enterpriseId,@Param("flag") String flag);
/** /**
* 根据外部联系人id查询memberId * 根据外部联系人id查询memberId
......
package com.gic.haoban.manage.service.dao.mapper.fee; package com.gic.haoban.manage.service.dao.mapper.fee;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.gic.haoban.manage.service.entity.fee.TabHaobanQywxFeeOrderAccount; import com.gic.haoban.manage.service.entity.fee.TabHaobanQywxFeeOrderAccount;
import org.apache.ibatis.annotations.Param;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -53,5 +50,9 @@ public interface TabHaobanQywxFeeOrderAccountMapper { ...@@ -53,5 +50,9 @@ public interface TabHaobanQywxFeeOrderAccountMapper {
int countOrderAccountStatus(@Param("status") Integer status,@Param("wxEnterpriseId") String wxEnterpriseId); int countOrderAccountStatus(@Param("status") Integer status,@Param("wxEnterpriseId") String wxEnterpriseId);
List<HashMap<String,Integer>> countStatusByWxEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId); List<HashMap<String,Integer>> countStatusByWxEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId);
List<TabHaobanQywxFeeOrderAccount> selectByWxEnterpriseId( @Param("wxEnterpriseId")String wxEnterpriseId);
void updateByActiveCode(@Param("wxEnterpriseId")String wxEnterpriseId , @Param("activeCode")String activeCode);
} }
...@@ -113,7 +113,7 @@ public interface ExternalClerkRelatedService { ...@@ -113,7 +113,7 @@ public interface ExternalClerkRelatedService {
* @param enterpriseIdList * @param enterpriseIdList
*/ */
void deleteByWxEnterpriseId(String wxEnterpriseId,List<String> enterpriseIdList); void deleteByWxEnterpriseId(String wxEnterpriseId,List<String> enterpriseIdList);
List<TabHaobanExternalClerkRelated> getAddTimeByMemberId(String memberId, String enterpriseId); List<TabHaobanExternalClerkRelated> getAddTimeByMemberId(String memberId, String enterpriseId,String flag);
/** /**
* 根据外部联系人id查询memberId * 根据外部联系人id查询memberId
......
...@@ -92,8 +92,6 @@ public interface PreDealService { ...@@ -92,8 +92,6 @@ public interface PreDealService {
*/ */
public int countByTaskId(String taskId, int dataType, int status); public int countByTaskId(String taskId, int dataType, int status);
public int countByTaskId(String taskId);
/** /**
* 获取任务数量 * 获取任务数量
* *
...@@ -201,5 +199,7 @@ public interface PreDealService { ...@@ -201,5 +199,7 @@ public interface PreDealService {
*/ */
public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType); public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType);
public void addTaskStatusCache(String taskId) ;
public void addTaskStaffStatusCache(String taskId,String staffId , int type) ;
} }
package com.gic.haoban.manage.service.service.fee; package com.gic.haoban.manage.service.service.fee;
import java.util.List;
import com.gic.haoban.manage.service.entity.fee.TabHaobanQywxFeeOrderAccount; import com.gic.haoban.manage.service.entity.fee.TabHaobanQywxFeeOrderAccount;
import java.util.List;
/** /**
* 企业微信收费订单账号(激活码)(TabHaobanQywxFeeOrderAccount)表服务接口 * 企业微信收费订单账号(激活码)(TabHaobanQywxFeeOrderAccount)表服务接口
* *
...@@ -31,4 +31,8 @@ public interface HaobanQywxFeeOrderAccountService { ...@@ -31,4 +31,8 @@ public interface HaobanQywxFeeOrderAccountService {
*/ */
int countOrderAccountStatus(Integer status,String wxEnterpriseId); int countOrderAccountStatus(Integer status,String wxEnterpriseId);
List<TabHaobanQywxFeeOrderAccount> selectByWxEnterpriseId(String wxEnterpriseId);
void updateByActiveCode(String wxEnterpriseId ,String activeCode);
} }
...@@ -42,4 +42,6 @@ public interface HaobanQywxFeeOrderService { ...@@ -42,4 +42,6 @@ public interface HaobanQywxFeeOrderService {
*/ */
List<TabHaobanQywxFeeOrder> listOrder(String wxEnterpriseId) ; List<TabHaobanQywxFeeOrder> listOrder(String wxEnterpriseId) ;
TabHaobanQywxFeeOrder selectByOrderId(String wxEnterpriseId,String orderId);
} }
...@@ -4,12 +4,11 @@ import com.gic.commons.util.UniqueIdUtils; ...@@ -4,12 +4,11 @@ import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.manage.service.dao.mapper.fee.TabHaobanQywxFeeOrderAccountMapper; import com.gic.haoban.manage.service.dao.mapper.fee.TabHaobanQywxFeeOrderAccountMapper;
import com.gic.haoban.manage.service.entity.fee.TabHaobanQywxFeeOrderAccount; import com.gic.haoban.manage.service.entity.fee.TabHaobanQywxFeeOrderAccount;
import com.gic.haoban.manage.service.service.fee.HaobanQywxFeeOrderAccountService; import com.gic.haoban.manage.service.service.fee.HaobanQywxFeeOrderAccountService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* 企业微信收费订单账号(激活码)(TabHaobanQywxFeeOrderAccount)表服务实现类 * 企业微信收费订单账号(激活码)(TabHaobanQywxFeeOrderAccount)表服务实现类
* *
...@@ -48,4 +47,14 @@ public class HaobanQywxFeeOrderAccountServiceImpl implements HaobanQywxFeeOrderA ...@@ -48,4 +47,14 @@ public class HaobanQywxFeeOrderAccountServiceImpl implements HaobanQywxFeeOrderA
return tabHaobanQywxFeeOrderAccountMapper.countOrderAccountStatus(status,wxEnterpriseId); return tabHaobanQywxFeeOrderAccountMapper.countOrderAccountStatus(status,wxEnterpriseId);
} }
@Override
public List<TabHaobanQywxFeeOrderAccount> selectByWxEnterpriseId(String wxEnterpriseId) {
return tabHaobanQywxFeeOrderAccountMapper.selectByWxEnterpriseId(wxEnterpriseId);
}
@Override
public void updateByActiveCode(String wxEnterpriseId, String activeCode) {
tabHaobanQywxFeeOrderAccountMapper.updateByActiveCode(wxEnterpriseId,activeCode);
}
} }
...@@ -55,4 +55,9 @@ public class HaobanQywxFeeOrderServiceImpl implements HaobanQywxFeeOrderService ...@@ -55,4 +55,9 @@ public class HaobanQywxFeeOrderServiceImpl implements HaobanQywxFeeOrderService
public List<TabHaobanQywxFeeOrder> listOrder(String wxEnterpriseId) { public List<TabHaobanQywxFeeOrder> listOrder(String wxEnterpriseId) {
return this.tabHaobanQywxFeeOrderMapper.listOrder(wxEnterpriseId); return this.tabHaobanQywxFeeOrderMapper.listOrder(wxEnterpriseId);
} }
@Override
public TabHaobanQywxFeeOrder selectByOrderId(String wxEnterpriseId, String orderId) {
return this.tabHaobanQywxFeeOrderMapper.selectByOrderId(wxEnterpriseId, orderId);
}
} }
...@@ -127,7 +127,7 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -127,7 +127,7 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
logger.info("通知会员 删除会员后更新为非企微好友 memberId:{}", memberId); logger.info("通知会员 删除会员后更新为非企微好友 memberId:{}", memberId);
// memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 0); // memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 0);
// 查询好办外部联系人接口,获取最近删除的时间 // 查询好办外部联系人接口,获取最近删除的时间
List<TabHaobanExternalClerkRelated> memberList = this.getAddTimeByMemberId(memberId, enterpriseId); List<TabHaobanExternalClerkRelated> memberList = this.getAddTimeByMemberId(memberId, enterpriseId,null);
Date date = new Date(); Date date = new Date();
Date opTime = new Date(0); Date opTime = new Date(0);
if (CollectionUtils.isNotEmpty(memberList)){ if (CollectionUtils.isNotEmpty(memberList)){
...@@ -544,8 +544,8 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -544,8 +544,8 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
} }
@Override @Override
public List<TabHaobanExternalClerkRelated> getAddTimeByMemberId(String memberId, String enterpriseId) { public List<TabHaobanExternalClerkRelated> getAddTimeByMemberId(String memberId, String enterpriseId,String flag) {
return this.mapper.getAddTimeByMemberId(memberId,enterpriseId); return this.mapper.getAddTimeByMemberId(memberId,enterpriseId,flag);
} }
@Override @Override
......
...@@ -14,6 +14,7 @@ import com.gic.redis.data.util.RedisUtil; ...@@ -14,6 +14,7 @@ import com.gic.redis.data.util.RedisUtil;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.redisson.api.RSet;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -30,6 +31,9 @@ import java.util.List; ...@@ -30,6 +31,9 @@ import java.util.List;
@Service @Service
public class PreDealServiceImpl implements PreDealService { public class PreDealServiceImpl implements PreDealService {
public static final String HAOBAN_TASK_ID_SET_CACHE = "haobanTaskSyncIdSetCache" ;
public static final String HAOBAN_TASK_STAFF_ID_SET_CACHE = "haobanTaskStaffSyncIdSetCache" ;
@Autowired @Autowired
private PreDealLogMapper preDealLogMapper; private PreDealLogMapper preDealLogMapper;
private static final Logger logger = LoggerFactory.getLogger(PreDealServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(PreDealServiceImpl.class);
...@@ -93,16 +97,8 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -93,16 +97,8 @@ public class PreDealServiceImpl implements PreDealService {
@Override @Override
public boolean checkTask(String taskId, int dataType) { public boolean checkTask(String taskId, int dataType) {
String key = taskId+"_checkTask"+dataType ; int i = preDealLogMapper.checkTask(taskId, dataType, PreDealStatusEnum.pre.getVal());
Object o = null ; //RedisUtil.getCache(key) ; return (i==0) ;
if(null == o) {
int i = preDealLogMapper.checkTask(taskId, dataType, PreDealStatusEnum.pre.getVal());
boolean flag = (i==0) ;
RedisUtil.setCache(key,flag,60*3l);
return flag ;
}else {
return (boolean) o ;
}
} }
@Override @Override
...@@ -116,19 +112,6 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -116,19 +112,6 @@ public class PreDealServiceImpl implements PreDealService {
} }
@Override @Override
public int countByTaskId(String taskId) {
String key = taskId+"countByTaskId" ;
Object o = null ; //RedisUtil.getCache(key) ;
if(null == o) {
int count = this.preDealLogMapper.countByTaskId(taskId,-1,0) ;
RedisUtil.setCache(key,count,60*3l);
return count ;
}else {
return (int) o ;
}
}
@Override
public int countExcepAndPreByTaskId(String taskId, int dataType) { public int countExcepAndPreByTaskId(String taskId, int dataType) {
return preDealLogMapper.countExcepAndPreByTaskId(taskId, dataType); return preDealLogMapper.countExcepAndPreByTaskId(taskId, dataType);
} }
...@@ -192,34 +175,29 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -192,34 +175,29 @@ public class PreDealServiceImpl implements PreDealService {
@Override @Override
public boolean checkFriendTask(String taskId, int dataType) { public boolean checkFriendTask(String taskId, int dataType) {
String key = taskId+"_checkFriendTask"+dataType ; int i = preDealLogMapper.checkTaskFriend(taskId, null, dataType);
Object o = null ; //RedisUtil.getCache(key) ; return (i==0) ;
if(null == o) {
int i = preDealLogMapper.checkTaskFriend(taskId, null, dataType);
boolean flag = (i==0) ;
RedisUtil.setCache(key,flag,60*3l);
return flag ;
}else {
return (boolean) o ;
}
} }
@Override @Override
public boolean checkFriendTaskByPDataId(String taskId, String pDataId, int dataType) { public boolean checkFriendTaskByPDataId(String taskId, String pDataId, int dataType) {
String key = taskId+"_checkFriendTaskByPDataId"+dataType ; int i = preDealLogMapper.checkTaskFriend(taskId, pDataId, dataType);
Object o = null ; //RedisUtil.getCache(key) ; return (i==0) ;
if(null == o) {
int i = preDealLogMapper.checkTaskFriend(taskId, pDataId, dataType);
boolean flag = (i==0) ;
RedisUtil.setCache(key,flag,60*3l);
return flag ;
}else {
return (boolean) o ;
}
} }
@Override @Override
public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType) { public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType) {
return preDealLogMapper.listReDataIdByPDataId(taskId, pDataId, dataType); return preDealLogMapper.listReDataIdByPDataId(taskId, pDataId, dataType);
} }
@Override
public void addTaskStatusCache(String taskId){
RSet<String> set = RedisUtil.getRedisClient().getSet(HAOBAN_TASK_ID_SET_CACHE);
set.add(taskId) ;
}
@Override
public void addTaskStaffStatusCache(String taskId,String staffId , int type) {
String key = taskId+"#"+staffId+"#"+type ;
RSet<String> set = RedisUtil.getRedisClient().getSet(HAOBAN_TASK_STAFF_ID_SET_CACHE);
set.add(key) ;
}
} }
...@@ -223,7 +223,7 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService ...@@ -223,7 +223,7 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
logger.info("通知会员 删除企微好友,该会员无任何好友关系,memberId:{}", memberId); logger.info("通知会员 删除企微好友,该会员无任何好友关系,memberId:{}", memberId);
// memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 0); // memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 0);
// 查询好办外部联系人接口,获取最近删除的时间 // 查询好办外部联系人接口,获取最近删除的时间
List<TabHaobanExternalClerkRelated> memberList = externalClerkRelatedService.getAddTimeByMemberId(memberId, enterpriseId); List<TabHaobanExternalClerkRelated> memberList = externalClerkRelatedService.getAddTimeByMemberId(memberId, enterpriseId,null);
Date date = new Date(); Date date = new Date();
Date opTime = new Date(0); Date opTime = new Date(0);
if (CollectionUtils.isNotEmpty(memberList)){ if (CollectionUtils.isNotEmpty(memberList)){
......
...@@ -19,6 +19,7 @@ import com.gic.haoban.manage.api.service.DealSyncOperationApiService; ...@@ -19,6 +19,7 @@ import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.service.dao.mapper.StaffMapper; import com.gic.haoban.manage.service.dao.mapper.StaffMapper;
import com.gic.haoban.manage.service.entity.*; import com.gic.haoban.manage.service.entity.*;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.service.impl.PreDealServiceImpl;
import com.gic.haoban.manage.service.task.BaseSyncOperation; import com.gic.haoban.manage.service.task.BaseSyncOperation;
import com.gic.mq.sdk.GicMQClient; import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
...@@ -26,6 +27,8 @@ import com.gic.wechat.api.service.qywx.QywxDepartmentApiService; ...@@ -26,6 +27,8 @@ import com.gic.wechat.api.service.qywx.QywxDepartmentApiService;
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.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.redisson.api.RAtomicLong;
import org.redisson.api.RSet;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -90,7 +93,7 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -90,7 +93,7 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
private static final String LOCK_SUCCESS_KEY = "sync_wx_success_lock_"; private static final String LOCK_SUCCESS_KEY = "sync_wx_success_lock_";
private static final String FRIEND_LOCK = "haoban_fresh_wx_friend_lock_"; public static final String FRIEND_LOCK = "haoban_fresh_wx_friend_lock_";
private static final String FRIEND_TAG_LOCK = "haoban_sync_tag_lock_"; private static final String FRIEND_TAG_LOCK = "haoban_sync_tag_lock_";
...@@ -135,41 +138,7 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -135,41 +138,7 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
@Override @Override
public void departmentDealMq2(String params) { public void departmentDealMq2(String params) {
DealParamMqDTO dealParamMqDTO = JSONObject.parseObject(params, DealParamMqDTO.class); this.departmentDealMq(params) ;
TabHaobanPreDealLog dataPre = preDealService.getByDataId(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dealParamMqDTO.getType() - 1, PreDealStatusEnum.all.getVal());
logger.info("好办同步处理mq处理开始:{},dataPre={}", params,JSON.toJSONString(dataPre));
if (dataPre == null) {
return;
}
Integer dataType = dataPre.getDataType();
logger.info("同步类型,dataType:{}",dataType);
if (dataType.equals(PreDealTypeEnum.dept.getVal())) {
logger.info("0 部门处理:{}", params);
operationMap.get("qywxDeptSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.clerk.getVal())) {
logger.info("2 成员处理:{}", params);
operationMap.get("qywxStaffSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.friend_clerk.getVal())) {
logger.info("6 好友导购处理:{}", params);
operationMap.get("friendClerkSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.friend.getVal())) {
logger.info("8 第三方好友处理:{}", params);
operationMap.get("friendSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.self_friend.getVal())) {
logger.info("7 自建好友处理:{}", params);
operationMap.get("selfFriendSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.tag.getVal())) {
logger.info("10 会员标签处理:{}", params);
operationMap.get("friendTagSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.tag_member.getVal())) {
logger.info("11 会员标签处理标签项:{}", params);
operationMap.get("friendMemberTagSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if(dataType.equals(PreDealTypeEnum.modify_hm.getVal())) {
logger.info("20 活码批量修改");
operationMap.get("qwHmOperation").dealSingleByMq(dealParamMqDTO, dataPre);
}else {
logger.info("不是正常数据类型:{}", params);
}
} }
...@@ -836,4 +805,135 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -836,4 +805,135 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
Set<String> hashSet = dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet()); Set<String> hashSet = dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.tag); dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.tag);
} }
/**
* 定时修改任务状态
*/
@Override
public void taskStatusTimer(String params) {
try {
RSet<String> set = RedisUtil.getRedisClient().getSet(PreDealServiceImpl.HAOBAN_TASK_ID_SET_CACHE);
logger.info("好办任务状态开始={},{}",set.size(),set);
Iterator<String> it = set.iterator() ;
while(it.hasNext()) {
String taskId = it.next();
TabHaobanSyncTask task = syncTaskService.getSyncTask(taskId);
if(null == task) {
logger.info("任务不存在taskId={}",taskId);
it.remove();
continue;
}
if(task.getCreateTime().getTime()+1000*60*60*24< System.currentTimeMillis()) {
logger.info("超过一天taskId={}",taskId);
it.remove();
continue;
}
if(task.getTaskType()==SyncTaskTypeEnum.FRIEND_WX_ENTEPRISE.getType()
|| task.getTaskType()==SyncTaskTypeEnum.FRIEND_SINGLE.getType() || task.getTaskType()==SyncTaskTypeEnum.FRIEND_STORE.getType()) {
boolean flag = this.updateTaskStatus(taskId);
if(flag) {
it.remove();
}
}
}
logger.info("好办任务状态完成={}",set);
}catch(Exception e) {
logger.warn(e.toString(),e);
}
}
@Override
public void staffTaskStatusTimer(String params) {
try {
RSet<String> set = RedisUtil.getRedisClient().getSet(PreDealServiceImpl.HAOBAN_TASK_STAFF_ID_SET_CACHE);
logger.info("好办任务状态开始staff={},{}",set.size(),set);
Iterator<String> it = set.iterator() ;
while(it.hasNext()) {
String v = it.next() ;
String[] arr = v.split("#") ;
if(arr.length != 3) {
logger.info("异常{},{}",v );
it.remove();
continue;
}
String taskId = arr[0] ;
String staffId = arr[1] ;
int type = Integer.valueOf(arr[2]) ;
TabHaobanSyncTask task = syncTaskService.getSyncTask(taskId);
if(null == task) {
logger.info("任务不存在taskId={}",taskId);
it.remove();
continue;
}
if(task.getCreateTime().getTime()+1000*60*60*24< System.currentTimeMillis()) {
logger.info("超过一天taskId={},{}",taskId,staffId);
it.remove();
continue;
}
boolean flag = this.updateStaffTaskStatus(taskId,staffId,type) ;
if(flag) {
it.remove();
}
}
logger.info("好办任务状态完成staff={}",set);
}catch(Exception e) {
logger.warn(e.toString(),e);
}
}
private boolean updateTaskStatus(String taskId) {
boolean b = preDealService.checkFriendTask(taskId, PreDealTypeEnum.friend_clerk.getVal());
if (!b) {
logger.info("更新task状态,还未完成={}",taskId);
return false;
}
logger.info("整个task完成={}", taskId);
this.syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal());
return true ;
}
private boolean updateStaffTaskStatus(String taskId ,String stffId , int type) {
boolean b = preDealService.checkFriendTaskByPDataId(taskId, stffId, type);
if (!b) {
return false;
}
if(type == 7) {
logger.info("代开发完成,开始第三方好友:{},{}", taskId, stffId);
String key = "haoban_sync_self_friend_task_" + taskId + ":" + stffId;
String lockKey = "haoban_sync_self_friend_task_lock_" + taskId + ":" + stffId;
RedisUtil.lock(lockKey, 3L);
Object hasDealCheck = RedisUtil.getCache(key);
if (hasDealCheck != null) {
RedisUtil.unlock(lockKey);
return false;
}
RedisUtil.setCache(key, stffId, 30L, TimeUnit.SECONDS);
List<String> dataIds = preDealService.listReDataIdByPDataId(taskId, stffId, PreDealTypeEnum.friend.getVal());
if (CollectionUtils.isEmpty(dataIds)) {
logger.info("无第三方的数据/自建");
preDealService.updateStatusByDataId(taskId, stffId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
} else {
dealDepartmentToMq(taskId, new HashSet<>(dataIds), SyncTaskStatusEnum.friend_sync);
}
RedisUtil.unlock(lockKey);
}
if(type == 8) {
String staffLockKey = DealSyncOperationApiServiceImpl.FRIEND_LOCK + stffId;
RedisUtil.delCache(staffLockKey);
logger.info("第三方好友结束:{},{},{}", taskId, stffId,staffLockKey);
String key = "haoban_sync_third_friend_task_" + taskId + ":" + stffId;
String lockKey = "haoban_sync_third_friend_task_lock_" + taskId + ":" + stffId;
RedisUtil.lock(lockKey, 3L);
Object hasDealCheck = RedisUtil.getCache(key);
if (hasDealCheck != null) {
RedisUtil.unlock(lockKey);
return false;
}
RedisUtil.setCache(key, stffId, 30L, TimeUnit.SECONDS);
this.preDealService.updateStatusByDataId(taskId, stffId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
RedisUtil.unlock(lockKey);
}
return true ;
}
} }
...@@ -761,7 +761,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA ...@@ -761,7 +761,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
return; return;
} }
staffList = staffList.stream().distinct().collect(Collectors.toList()); staffList = staffList.stream().distinct().collect(Collectors.toList());
log.info("staffList={}", JSON.toJSONString(staffList)); log.info("刷新好友,关联导购的staff数={}",staffList.size());
for (String staffId : staffList) { for (String staffId : staffList) {
this.dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId); this.dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId);
} }
......
...@@ -737,7 +737,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -737,7 +737,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
log.info("通知会员 合并会员后更新为企微好友,memberId:{}", memberId); log.info("通知会员 合并会员后更新为企微好友,memberId:{}", memberId);
// this.memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1); // this.memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
// 查询好办外部联系人接口,获取最早的时间替换当前时间 // 查询好办外部联系人接口,获取最早的时间替换当前时间
List<TabHaobanExternalClerkRelated> memberList = externalClerkRelatedService.getAddTimeByMemberId(memberId, enterpriseId); List<TabHaobanExternalClerkRelated> memberList = externalClerkRelatedService.getAddTimeByMemberId(memberId, enterpriseId,null);
Date date = new Date(); Date date = new Date();
Date opTime = new Date(0); Date opTime = new Date(0);
Date firstTime = new Date(); Date firstTime = new Date();
...@@ -1289,9 +1289,10 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1289,9 +1289,10 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String corpid = qwDTO.getThirdCorpid(); String corpid = qwDTO.getThirdCorpid();
String userId = ""; String userId = "";
TabHaobanStaff staff = staffService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId); TabHaobanStaff staff = staffService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
List<String> list = new ArrayList<>();
if (staff == null) { if (staff == null) {
log.error("员工为空,wxUserId:{}", wxUserId); log.error("员工为空,wxUserId:{}", wxUserId);
return null; return list;
} }
if (qwDTO.needOpenUserId3th()) { if (qwDTO.needOpenUserId3th()) {
userId = staff.getWxOpenUseId(); userId = staff.getWxOpenUseId();
...@@ -1300,7 +1301,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1300,7 +1301,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
log.info("【获取第三方应用好友】wxEnterpriseId={},userId={}", wxEnterpriseId, userId); log.info("【获取第三方应用好友】wxEnterpriseId={},userId={}", wxEnterpriseId, userId);
String wxRes = qywxUserApiService.listExternalUserid(corpid, config.getWxSuiteid(), userId); String wxRes = qywxUserApiService.listExternalUserid(corpid, config.getWxSuiteid(), userId);
List<String> list = new ArrayList<>();
log.info("【查询第三方应用】res={}", wxRes); log.info("【查询第三方应用】res={}", wxRes);
if ("1".equals(wxRes)) { if ("1".equals(wxRes)) {
log.info("代表需要重试"); log.info("代表需要重试");
...@@ -1479,12 +1479,15 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1479,12 +1479,15 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId); this.pushTagSync(memberId, wxEnterpriseId, enterpriseId);
log.info("通知会员 更新为企微好友 memberId:{}", memberId); log.info("通知会员 更新为企微好友 memberId:{}", memberId);
// memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1); // memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
List<TabHaobanExternalClerkRelated> memberList = externalClerkRelatedService.getAddTimeByMemberId(memberId, enterpriseId); List<TabHaobanExternalClerkRelated> memberList = externalClerkRelatedService.getAddTimeByMemberId(memberId, enterpriseId,"1");
Date date = new Date(); Date date = new Date();
Date opTime = new Date(0); Date opTime = new Date(0);
Date firstTime = new Date(); Date firstTime = new Date();
if (CollectionUtils.isNotEmpty(memberList)){ if (CollectionUtils.isNotEmpty(memberList)){
for (TabHaobanExternalClerkRelated a : memberList){ for (TabHaobanExternalClerkRelated a : memberList){
if(null == a.getAddTime()) {
continue;
}
Date addTime = new Date(a.getAddTime() * 1000L); Date addTime = new Date(a.getAddTime() * 1000L);
if ((a.getStatusFlag() == 1 || a.getStatusFlag() == 3 || a.getStatusFlag() == 4) && opTime.before(addTime)){ if ((a.getStatusFlag() == 1 || a.getStatusFlag() == 3 || a.getStatusFlag() == 4) && opTime.before(addTime)){
opTime= addTime; opTime= addTime;
...@@ -1494,8 +1497,8 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1494,8 +1497,8 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
firstTime = addTime; firstTime = addTime;
} }
} }
this.memberApiService.updateMemberQywxEveryOccasion(enterpriseId, memberId, 1, date,firstTime);
} }
this.memberApiService.updateMemberQywxEveryOccasion(enterpriseId, memberId, 1, date,firstTime);
} }
return ""; return "";
} }
......
...@@ -37,10 +37,14 @@ import com.gic.haoban.manage.service.config.Config; ...@@ -37,10 +37,14 @@ import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.dao.mapper.StaffDepartmentRelatedMapper; import com.gic.haoban.manage.service.dao.mapper.StaffDepartmentRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.StaffMapper; import com.gic.haoban.manage.service.dao.mapper.StaffMapper;
import com.gic.haoban.manage.service.entity.*; import com.gic.haoban.manage.service.entity.*;
import com.gic.haoban.manage.service.entity.fee.TabHaobanQywxFeeOrder;
import com.gic.haoban.manage.service.entity.fee.TabHaobanQywxFeeOrderAccount;
import com.gic.haoban.manage.service.errorcode.QywxErrCode; import com.gic.haoban.manage.service.errorcode.QywxErrCode;
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.*; import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.service.chat.GroupChatService; import com.gic.haoban.manage.service.service.chat.GroupChatService;
import com.gic.haoban.manage.service.service.fee.HaobanQywxFeeOrderAccountService;
import com.gic.haoban.manage.service.service.fee.HaobanQywxFeeOrderService;
import com.gic.haoban.manage.service.util.EmojiFilterUtil; import com.gic.haoban.manage.service.util.EmojiFilterUtil;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
import com.gic.thirdparty.cloudfile.CloudFileUtil; import com.gic.thirdparty.cloudfile.CloudFileUtil;
...@@ -50,6 +54,8 @@ import com.gic.thirdparty.cloudfile.pojo.CloudFileInfo; ...@@ -50,6 +54,8 @@ import com.gic.thirdparty.cloudfile.pojo.CloudFileInfo;
import com.gic.wechat.api.dto.qywx.QywxNewUseridDTO; import com.gic.wechat.api.dto.qywx.QywxNewUseridDTO;
import com.gic.wechat.api.dto.qywx.UserDTO; import com.gic.wechat.api.dto.qywx.UserDTO;
import com.gic.wechat.api.dto.qywx.fee.AccountTransferUserDTO; import com.gic.wechat.api.dto.qywx.fee.AccountTransferUserDTO;
import com.gic.wechat.api.dto.qywx.fee.FeeOrderDeatilResponseDTO;
import com.gic.wechat.api.dto.qywx.response.QywxResponseDTO;
import com.gic.wechat.api.service.qywx.QywxOrderApiService; import com.gic.wechat.api.service.qywx.QywxOrderApiService;
import com.gic.wechat.api.service.qywx.QywxUserApiService; import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
...@@ -121,6 +127,10 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -121,6 +127,10 @@ public class StaffApiServiceImpl implements StaffApiService {
private ExternalClerkRelatedService externalClerkRelatedService; private ExternalClerkRelatedService externalClerkRelatedService;
@Autowired @Autowired
private WxEnterpriseActiveDataService wxEnterpriseActiveDataService; private WxEnterpriseActiveDataService wxEnterpriseActiveDataService;
@Autowired
private HaobanQywxFeeOrderAccountService haobanQywxFeeOrderAccountService;
@Autowired
private HaobanQywxFeeOrderService haobanQywxFeeOrderService;
@Override @Override
public StaffDTO selectById(String staffId) { public StaffDTO selectById(String staffId) {
...@@ -1183,6 +1193,7 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -1183,6 +1193,7 @@ public class StaffApiServiceImpl implements StaffApiService {
return com.gic.api.base.commons.ServiceResponse.failure("-9999","成员userid不存在!"); return com.gic.api.base.commons.ServiceResponse.failure("-9999","成员userid不存在!");
} }
String staffId = staff.getStaffId(); String staffId = staff.getStaffId();
StaffActiveDataDTO activeDataDTO = wxEnterpriseActiveDataService.getWxEnterpriseActiveDataByWxEnterpriseId(wxEnterprise.getWxEnterpriseId()); StaffActiveDataDTO activeDataDTO = wxEnterpriseActiveDataService.getWxEnterpriseActiveDataByWxEnterpriseId(wxEnterprise.getWxEnterpriseId());
if (null == activeDataDTO){ if (null == activeDataDTO){
logger.info("查询不到企业微信id->{}的许可账号统计信息!",wxEnterprise.getWxEnterpriseId()); logger.info("查询不到企业微信id->{}的许可账号统计信息!",wxEnterprise.getWxEnterpriseId());
...@@ -1215,6 +1226,9 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -1215,6 +1226,9 @@ public class StaffApiServiceImpl implements StaffApiService {
} }
staffMapper.updateActiveStatusById(staffId,timeStampDate,expireTimeDate,activeCode); staffMapper.updateActiveStatusById(staffId,timeStampDate,expireTimeDate,activeCode);
groupChatService.initStaffGroupChat(staffId); groupChatService.initStaffGroupChat(staffId);
//更新好办激活码许可表
haobanQywxFeeOrderAccountService.updateByActiveCode(wxEnterprise.getWxEnterpriseId(),activeCode);
} }
return com.gic.api.base.commons.ServiceResponse.success(true); return com.gic.api.base.commons.ServiceResponse.success(true);
} }
...@@ -1283,4 +1297,95 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -1283,4 +1297,95 @@ public class StaffApiServiceImpl implements StaffApiService {
} }
return null; return null;
} }
@Override
public com.gic.api.base.commons.ServiceResponse<StaffActiveAllocationDTO> staffActiveAllocation(String wxEnterpriseId, String staffIds) {
StaffActiveAllocationDTO result = new StaffActiveAllocationDTO();
if (StrUtil.isBlank(staffIds)){
return com.gic.api.base.commons.ServiceResponse.failure("-9999","参数不能为空");
}
WxEnterpriseDTO wxEnterpriseDTO = wxEnterpriseService.selectById(wxEnterpriseId);
if (wxEnterpriseDTO == null) {
return com.gic.api.base.commons.ServiceResponse.failure("-9999", "企业微信不存在!!");
}
String openCorpid = wxEnterpriseDTO.getOpenCorpid();
String serviceCorpid = config.getCorpid();
List<String> staffIdList = Arrays.asList(staffIds.split(","));
List<TabHaobanStaff> haobanStaffs = staffMapper.listByIds(staffIdList);
List<TabHaobanQywxFeeOrderAccount> accounts = haobanQywxFeeOrderAccountService.selectByWxEnterpriseId(wxEnterpriseId);
if ( CollUtil.isEmpty(accounts) || accounts.size() < haobanStaffs.size()){
return com.gic.api.base.commons.ServiceResponse.failure("-9999", "剩余可用许可数量小于激活成员数量");
}
if (CollUtil.isNotEmpty(haobanStaffs)){
int num = 0;
String errMessage = null;
for (int i = 0;i<haobanStaffs.size();i++){
String activeCode = accounts.get(i).getActiveCode();
String orderId = accounts.get(i).getOrderId();
String staffId = haobanStaffs.get(i).getStaffId();
JSONObject object = new JSONObject();
object.put("active_code",accounts.get(i).getActiveCode());
object.put("corpid",openCorpid);
String wxUserId = haobanStaffs.get(i).getWxUserId();
if (StrUtil.isBlank(wxUserId)){
wxUserId = haobanStaffs.get(i).getWxOpenUseId();
}
object.put("userid",wxUserId);
com.gic.api.base.commons.ServiceResponse<QywxResponseDTO> response = qywxOrderApiService.activeAccount(serviceCorpid, JSON.toJSONString(object));
if(!response.isSuccess()){
num++;
errMessage = "许可账号分配失败,复制链接查看失败原因:https://developer.work.weixin.qq.com/devtool/query?e="+response.getCode();
}else {
//手动分配成功需要实时更新许可激活码状态
StaffActiveDataDTO activeDataDTO = wxEnterpriseActiveDataService.getWxEnterpriseActiveDataByWxEnterpriseId(wxEnterpriseId);
if (null == activeDataDTO){
logger.info("查询不到企业微信id->{}的许可账号统计信息!",wxEnterpriseId);
}else {
//需要区分激活码,待转移状态的激活码不需要处理
TabHaobanStaff haobanStaff = staffMapper.getNumByActiveCode(wxEnterpriseId, activeCode);
if (null == haobanStaff){
//已使用的加1,已激活的加1,未激活的减1
Integer used = activeDataDTO.getUsed();
Integer inactive = activeDataDTO.getInactive();
Integer activated = activeDataDTO.getActivated();
used++;
activated++;
if(null != inactive && inactive > 0){
inactive--;
}
activeDataDTO.setUsed(used);
activeDataDTO.setInactive(inactive);
activeDataDTO.setActivated(activated);
wxEnterpriseActiveDataService.updateByStaffActiveDataDTO(activeDataDTO);
}else {
//判断是否是其它占用的许可被当天激活
Date delTime = haobanStaff.getDelTime();
Date now = new Date();
int days = DateUtil.daysBetween(delTime, now);
if(days == 0){
staffMapper.updateOccupyFlagByStaffId(haobanStaff.getStaffId());
}
}
}
//根据订单id,查询订单详情,获取购买的时长,当前激活时间加上时长为过期时间
TabHaobanQywxFeeOrder tabHaobanQywxFeeOrder = haobanQywxFeeOrderService.selectByOrderId(wxEnterpriseId, orderId);
Integer months = tabHaobanQywxFeeOrder.getMonths();
Date expireTime = null;
if (null != months){
//转换成天数
months = months * 31;
expireTime = DateUtil.addDay(new Date(),months);
}
staffMapper.updateActiveStatusById(staffId,new Date(),expireTime,activeCode);
//更新好办激活码许可表
haobanQywxFeeOrderAccountService.updateByActiveCode(wxEnterpriseId,activeCode);
}
}
result.setNums(num);
result.setErrMessage(errMessage);
return com.gic.api.base.commons.ServiceResponse.success(result);
}
return com.gic.api.base.commons.ServiceResponse.failure("-9999","成员不存在");
}
} }
...@@ -50,8 +50,6 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -50,8 +50,6 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
@Autowired @Autowired
private WxEnterpriseService wxEnterpriseService ; private WxEnterpriseService wxEnterpriseService ;
private static final String FRIEND_LOCK = "haoban_fresh_wx_friend_lock_";
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_"; private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
@Override @Override
...@@ -62,6 +60,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -62,6 +60,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
try { try {
String wxEnterpriseId = dataPre.getWxEnterpriseId(); String wxEnterpriseId = dataPre.getWxEnterpriseId();
String staffId = dataPre.getDataId() ; String staffId = dataPre.getDataId() ;
this.preDealService.addTaskStatusCache(dataPre.getTaskId());
TabHaobanStaff staff = this.staffService.selectById(staffId) ; TabHaobanStaff staff = this.staffService.selectById(staffId) ;
if(null == staff) { if(null == staff) {
logger.info("staff不存在,staffId={}",staffId); logger.info("staff不存在,staffId={}",staffId);
...@@ -76,16 +75,14 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -76,16 +75,14 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
List<String> selfUserIdList = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId, dkWxUserId); List<String> selfUserIdList = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId, dkWxUserId);
List<String> delUserIdList = selfUserIdList ; List<String> delUserIdList = selfUserIdList ;
logger.info("selfUserIdList={}", JSONObject.toJSONString(selfUserIdList)); logger.info("selfUserIdList={}", JSONObject.toJSONString(selfUserIdList));
if (CollectionUtils.isEmpty(selfUserIdList)) { if (null == selfUserIdList) {
logger.info("自建应用调用第三方接口进入重试");
dealFlag = tryAgainToMq(dataPre); dealFlag = tryAgainToMq(dataPre);
reason = "重试次数过多"; reason = "企微接口失败";
return; return;
} }
if (CollectionUtils.isEmpty(selfUserIdList)) { if (CollectionUtils.isEmpty(selfUserIdList)) {
logger.info("该用户无代开外部联系人:{}", JSONObject.toJSONString(dataPre));
dealFlag = false; dealFlag = false;
reason = "该用户没有外部联系人"; reason = "外部联系人";
return; return;
} }
String wxUserId3th = staff.getWxUserId() ; String wxUserId3th = staff.getWxUserId() ;
...@@ -94,19 +91,17 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -94,19 +91,17 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
} }
List<String> userIdList = null ; List<String> userIdList = null ;
if(!qwDTO.isSelf()) { if(!qwDTO.isSelf()) {
//第三方服务商的外部联系人
userIdList = memberUnionidRelatedApiService.listExterialList(wxEnterpriseId, wxUserId3th); userIdList = memberUnionidRelatedApiService.listExterialList(wxEnterpriseId, wxUserId3th);
delUserIdList = userIdList ; delUserIdList = userIdList ;
if (CollectionUtils.isEmpty(selfUserIdList)) { if (null == userIdList) {
dealFlag = tryAgainToMq(dataPre); dealFlag = tryAgainToMq(dataPre);
reason = "重试次数过多"; reason = "企微接口失败";
logger.info("第三方服务商外部联系人调用失败进入重试:{}", dataPre.getDataId()); logger.info("第三方服务商外部联系人调用失败进入重试:{}", dataPre.getDataId());
return; return;
} }
if (CollectionUtils.isEmpty(userIdList)) { if (CollectionUtils.isEmpty(userIdList)) {
logger.info("该用户无第三方外部联系人:{}", JSONObject.toJSONString(dataPre));
dealFlag = false; dealFlag = false;
reason = "该用户没有外部联系人"; reason = "外部联系人";
return; return;
} }
} }
...@@ -158,35 +153,9 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -158,35 +153,9 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
} }
} }
/**
* 重试机制
*
* @param dataPre
* @return
*/
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试:{}", dataPre.getDataId());
String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
Object cache = RedisUtil.getCache(key);
if (null == cache) {
RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
} else {
int count = Integer.parseInt(cache.toString());
RedisUtil.setCache(key, count + 1);
if (count > 4) {
return false;
}
}
HashSet<String> reTrysIds = new HashSet<>();
reTrysIds.add(dataPre.getDataId());
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_clerk_sync);
return true;
}
@Override @Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) { public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason); preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
checkDepartmentTask(taskId);
} }
@Override @Override
...@@ -195,33 +164,10 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -195,33 +164,10 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
List<String> dataIds = preDealService.listReDataIdByPDataId(taskId, dataId, PreDealTypeEnum.self_friend.getVal()); List<String> dataIds = preDealService.listReDataIdByPDataId(taskId, dataId, PreDealTypeEnum.self_friend.getVal());
logger.info("下一步处理的数据:{},dataId={}", JSONObject.toJSONString(dataIds) , dataId); logger.info("下一步处理的数据:{},dataId={}", JSONObject.toJSONString(dataIds) , dataId);
dealDepartmentToMq(taskId, new HashSet<>(dataIds), SyncTaskStatusEnum.self_friend_sync); dealDepartmentToMq(taskId, new HashSet<>(dataIds), SyncTaskStatusEnum.self_friend_sync);
checkDepartmentTask(taskId);
} }
@Override @Override
public void checkDepartmentTask(String taskId) { public void checkDepartmentTask(String taskId) {
boolean b = preDealService.checkFriendTask(taskId, PreDealTypeEnum.friend_clerk.getVal());
if (!b) {
return;
}
logger.info("好友同步成功:{}", taskId);
String key = "haoban_sync_friend_task_" + taskId;
RedisUtil.lock(key, 3L);
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
if (syncTask.getStatusFlag() == SyncTaskStatusEnum.compute.getVal()
|| syncTask.getStatusFlag() == SyncTaskStatusEnum.exception_compute.getVal()) {
logger.info("已经处理成功:{}", taskId);
return;
}
int errCount = preDealService.countByTaskId(taskId, -1, PreDealStatusEnum.exception.getVal());
if (errCount > 0) {
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_compute.getVal());
} else {
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal());
}
String staffLockKey = FRIEND_LOCK + syncTask.getAddUser();
RedisUtil.delCache(staffLockKey);
RedisUtil.unlock(key);
} }
...@@ -252,4 +198,23 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -252,4 +198,23 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
} }
} }
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试:{}", dataPre.getDataId());
String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
Object cache = RedisUtil.getCache(key);
if (null == cache) {
RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
} else {
int count = Integer.parseInt(cache.toString());
RedisUtil.setCache(key, count + 1);
if (count > 4) {
return false;
}
}
HashSet<String> reTrysIds = new HashSet<>();
reTrysIds.add(dataPre.getDataId());
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_clerk_sync);
return true;
}
} }
...@@ -12,6 +12,7 @@ import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService; ...@@ -12,6 +12,7 @@ import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog; import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.exception.WxApiLimitException; import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.service.out.impl.DealSyncOperationApiServiceImpl;
import com.gic.haoban.manage.service.task.BaseSyncOperation; import com.gic.haoban.manage.service.task.BaseSyncOperation;
import com.gic.mq.sdk.GicMQClient; import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
...@@ -42,8 +43,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -42,8 +43,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
private MemberUnionidRelatedApiService memberUnionidRelatedApiService; private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired @Autowired
private SyncTaskService syncTaskService; private SyncTaskService syncTaskService;
@Autowired
private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_"; private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
...@@ -123,31 +122,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -123,31 +122,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
} }
} }
/**
* 重试机制
*
* @param dataPre
* @return
*/
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试friend:{}", dataPre.getDataId());
String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
Object cache = RedisUtil.getCache(key);
if (null == cache) {
RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
} else {
Integer count = Integer.valueOf(cache.toString());
RedisUtil.setCache(key, count + 1);
if (count > 4) {
return false;
}
}
HashSet<String> reTrysIds = new HashSet<>();
reTrysIds.add(dataPre.getDataId());
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_sync);
return true;
}
public void dealException(String taskId, String dataId, String pDataId, String reason, String relationKey) { public void dealException(String taskId, String dataId, String pDataId, String reason, String relationKey) {
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason, null, relationKey, PreDealTypeEnum.friend.getVal()); preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason, null, relationKey, PreDealTypeEnum.friend.getVal());
checkDepartmentTask(taskId, pDataId); checkDepartmentTask(taskId, pDataId);
...@@ -171,41 +145,30 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -171,41 +145,30 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
* @param pDataId * @param pDataId
*/ */
public void checkDepartmentTask(String taskId, String pDataId) { public void checkDepartmentTask(String taskId, String pDataId) {
//校验是否都已经处理完成 this.preDealService.addTaskStaffStatusCache(taskId,pDataId,8);
boolean b = preDealService.checkFriendTaskByPDataId(taskId, pDataId, PreDealTypeEnum.friend.getVal());
if (!b) {
return;
}
logger.info("同步第三方服务商好友结束:{},{}", taskId, pDataId);
String key = "haoban_sync_third_friend_task_" + taskId + ":" + pDataId;
String lockKey = "haoban_sync_third_friend_task_lock_" + taskId + ":" + pDataId;
RedisUtil.lock(lockKey, 3L);
Object hasDealCheck = RedisUtil.getCache(key);
if (hasDealCheck != null) {
logger.info("重复提交结束第三方好友:{}", pDataId);
RedisUtil.unlock(lockKey);
return;
}
RedisUtil.setCache(key, pDataId, 30L, TimeUnit.SECONDS);
TabHaobanPreDealLog preDealLog = preDealService.getByDataId(taskId, pDataId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.dealing.getVal());
if (preDealLog != null) {
preDealService.updateStatusByDataId(taskId, pDataId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
this.checkDepartmentTask(taskId);
}
RedisUtil.unlock(lockKey);
} }
@Override @Override
public void checkDepartmentTask(String taskId) { public void checkDepartmentTask(String taskId) {
friendClerkSyncNewOperation.checkDepartmentTask(taskId);
} }
/** private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
* 放入mq处理部门数据 String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
* Object cache = RedisUtil.getCache(key);
* @param taskId if (null == cache) {
* @param dealList RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
*/ } else {
Integer count = Integer.valueOf(cache.toString());
RedisUtil.setCache(key, count + 1);
if (count > 4) {
return false;
}
}
HashSet<String> reTrysIds = new HashSet<>();
reTrysIds.add(dataPre.getDataId());
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_sync);
return true;
}
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) { private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务 //预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal()); syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
......
...@@ -48,8 +48,6 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -48,8 +48,6 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
@Autowired @Autowired
private SyncTaskService syncTaskService; private SyncTaskService syncTaskService;
@Autowired @Autowired
private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
@Autowired
private WxEnterpriseService wxEnterpriseService ; private WxEnterpriseService wxEnterpriseService ;
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_"; private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
...@@ -95,11 +93,11 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -95,11 +93,11 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
} }
//更新状态 //更新状态
this.preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, json.toJSONString(), relationKey , PreDealTypeEnum.self_friend.getVal()); this.preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, json.toJSONString(), relationKey , PreDealTypeEnum.self_friend.getVal());
dealSuccess(taskId, dataPre.getDataId(), null, wxEnterpriseId); dealSuccess(taskId, dataPre.getDataId(), dataPre.getpDataId(), wxEnterpriseId);
} catch (WxApiLimitException e) { } catch (WxApiLimitException e) {
logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre)); logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre));
dealFlag = tryAgainToMq(dataPre); dealFlag = tryAgainToMq(dataPre);
reason = "getCorpSelfExternalUseridInfo重试次数过多"; reason = "重试次数过多";
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e); logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e);
...@@ -120,18 +118,25 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -120,18 +118,25 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
} }
@Override @Override
public void dealSuccess(String taskId, String dataId, String dataContent, String wxEnterpriseId) { public void dealSuccess(String taskId, String dataId, String pDataId, String wxEnterpriseId) {
TabHaobanPreDealLog data = preDealService.getByDataId(taskId, dataId, PreDealTypeEnum.self_friend.getVal(), -1); checkDepartmentTask(taskId, pDataId);
//校验成功是否都
checkDepartmentTask(taskId, data.getpDataId());
} }
/** /**
* 重试机制 * 自定义处理流程
* *
* @param dataPre * @param taskId
* @return * @param pDataId
*/ */
public void checkDepartmentTask(String taskId, String pDataId) {
this.preDealService.addTaskStaffStatusCache(taskId,pDataId,7);
}
@Override
public void checkDepartmentTask(String taskId) {
}
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) { private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试self:{}", dataPre.getDataId()); logger.info("需要重试self:{}", dataPre.getDataId());
String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId(); String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
...@@ -150,55 +155,6 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -150,55 +155,6 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.self_friend_sync); dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.self_friend_sync);
return true; return true;
} }
/**
* 自定义处理流程
*
* @param taskId
* @param pDataId
*/
public void checkDepartmentTask(String taskId, String pDataId) {
//校验是否都已经处理完成
boolean b = preDealService.checkFriendTaskByPDataId(taskId, pDataId, PreDealTypeEnum.self_friend.getVal());
if (!b) {
logger.info("校验直接返回");
return;
}
logger.info("同步第三方服务商好友开始:{},{}", taskId, pDataId);
String key = "haoban_sync_self_friend_task_" + taskId + ":" + pDataId;
String lockKey = "haoban_sync_self_friend_task_lock_" + taskId + ":" + pDataId;
RedisUtil.lock(lockKey, 3L);
Object hasDealCheck = RedisUtil.getCache(key);
if (hasDealCheck != null) {
logger.info("重复提交处理第三方好友:{}", pDataId);
RedisUtil.unlock(lockKey);
return;
}
RedisUtil.setCache(key, pDataId, 30L, TimeUnit.SECONDS);
List<String> dataIds = preDealService.listReDataIdByPDataId(taskId, pDataId, PreDealTypeEnum.friend.getVal());
if (CollectionUtils.isEmpty(dataIds)) {
logger.info("第三方的数据为空");
//更新父级别
preDealService.updateStatusByDataId(taskId, pDataId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
//校验异常
this.checkDepartmentTask(taskId);
} else {
dealDepartmentToMq(taskId, new HashSet<>(dataIds), SyncTaskStatusEnum.friend_sync);
}
RedisUtil.unlock(lockKey);
}
@Override
public void checkDepartmentTask(String taskId) {
friendClerkSyncNewOperation.checkDepartmentTask(taskId);
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) { private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务 //预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal()); syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
...@@ -219,5 +175,4 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -219,5 +175,4 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
...@@ -257,6 +257,18 @@ ...@@ -257,6 +257,18 @@
and status_flag in(0,3) and status_flag in(0,3)
</select> </select>
<select id="checkTaskFriend" resultType="Integer">
select
count(*)
from tab_haoban_pre_deal_log
where task_id = #{taskId}
<if test="pDataId!=null">
and p_data_id=#{pDataId}
</if>
and data_type=#{dataType}
and status_flag in(0,1)
</select>
<select id="listRebuildDepartByTaskId" resultMap="BaseResultMap"> <select id="listRebuildDepartByTaskId" resultMap="BaseResultMap">
SELECT SELECT
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>
...@@ -365,18 +377,6 @@ ...@@ -365,18 +377,6 @@
and data_type =#{dataType} and data_type =#{dataType}
</select> </select>
<select id="checkTaskFriend" resultType="Integer">
select
count(*)
from tab_haoban_pre_deal_log
where task_id = #{taskId}
<if test="pDataId!=null">
and p_data_id=#{pDataId}
</if>
and data_type=#{dataType}
and status_flag in(0,1)
</select>
<select id="listReDataIdByPDataId" resultType="String"> <select id="listReDataIdByPDataId" resultType="String">
select select
data_id data_id
......
...@@ -857,6 +857,9 @@ ...@@ -857,6 +857,9 @@
WHERE WHERE
member_id = #{memberId} member_id = #{memberId}
AND enterprise_id = #{enterpriseId} AND enterprise_id = #{enterpriseId}
<if test="null != flag">
and status_flag in (1)
</if>
</select> </select>
<select id="getMemberIdByExternalId" resultType="java.lang.String"> <select id="getMemberIdByExternalId" resultType="java.lang.String">
......
...@@ -87,5 +87,19 @@ ...@@ -87,5 +87,19 @@
where wx_enterprise_id = #{wxEnterpriseId} GROUP BY STATUS where wx_enterprise_id = #{wxEnterpriseId} GROUP BY STATUS
</select> </select>
<select id="selectByWxEnterpriseId" resultMap="TabHaobanQywxFeeOrderAccountMap">
select
<include refid="Base_Column_List"/>
from tab_haoban_qywx_fee_order_account
where wx_enterprise_id = #{wxEnterpriseId}
and status in (1,4)
</select>
<update id="updateByActiveCode">
update tab_haoban_qywx_fee_order_account
set status = 2,update_time = NOW()
where wx_enterprise_id = #{wxEnterpriseId} and active_code = #{activeCode}
</update>
</mapper> </mapper>
...@@ -10,6 +10,7 @@ import cn.hutool.core.collection.CollUtil; ...@@ -10,6 +10,7 @@ import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.gic.haoban.manage.api.dto.*; import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.dto.qdto.TransferActiveCodeQDTO; import com.gic.haoban.manage.api.dto.qdto.TransferActiveCodeQDTO;
import com.gic.haoban.manage.api.dto.qdto.licence.LicenceOrderPageQDTO;
import com.gic.haoban.manage.api.service.*; import com.gic.haoban.manage.api.service.*;
import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl; import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl;
import com.gic.haoban.manage.web.qo.StaffListQO; import com.gic.haoban.manage.web.qo.StaffListQO;
...@@ -695,4 +696,22 @@ public class StaffController extends WebBaseController { ...@@ -695,4 +696,22 @@ public class StaffController extends WebBaseController {
return RestResponse.successResult(vo); return RestResponse.successResult(vo);
} }
/**
* 批量分配成员许可码
* @param staffIds
* @return
*/
@RequestMapping("staff-active-allocation")
public RestResponse<StaffActiveAllocationVO> staffActiveAllocation(String staffIds) {
WebLoginDTO login = AuthWebRequestUtil.getLoginUser();
String wxEnterpriseId = login.getWxEnterpriseId();
ServiceResponse<StaffActiveAllocationDTO> response = staffApiService.staffActiveAllocation(wxEnterpriseId, staffIds);
if(response.isSuccess()){
StaffActiveAllocationDTO dto = response.getResult();
StaffActiveAllocationVO result = JSONObject.parseObject(JSONObject.toJSONString(dto), StaffActiveAllocationVO.class);
return RestResponse.successResult(result);
}
return RestResponse.failure(response.getCode(),response.getMessage());
}
} }
...@@ -5,6 +5,8 @@ import cn.hutool.core.convert.Convert; ...@@ -5,6 +5,8 @@ import cn.hutool.core.convert.Convert;
import com.gic.api.base.commons.BasePageInfo; import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.DateUtil;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.ExcelUtils; import com.gic.commons.util.ExcelUtils;
import com.gic.commons.webapi.reponse.RestResponse; import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.service.EnterpriseService; import com.gic.enterprise.api.service.EnterpriseService;
...@@ -22,10 +24,12 @@ import com.gic.haoban.manage.api.service.StaffApiService; ...@@ -22,10 +24,12 @@ import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.chat.GroupChatApiService; import com.gic.haoban.manage.api.service.chat.GroupChatApiService;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode; import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl; import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl;
import com.gic.haoban.manage.web.vo.chat.GroupChatUserQuitVO;
import com.gic.log.record.anno.GicLogRecord; import com.gic.log.record.anno.GicLogRecord;
import com.gic.log.record.util.GicLogRecordCategoryEnum; import com.gic.log.record.util.GicLogRecordCategoryEnum;
import com.gic.log.record.util.GicLogRecordEvaluationContext; import com.gic.log.record.util.GicLogRecordEvaluationContext;
import com.gic.log.record.util.GicLogRecordOptTypeEnum; import com.gic.log.record.util.GicLogRecordOptTypeEnum;
import org.apache.commons.collections.ArrayStack;
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.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
...@@ -147,6 +151,39 @@ public class GroupChatController { ...@@ -147,6 +151,39 @@ public class GroupChatController {
return RestResponse.successResult(page.getResult()); return RestResponse.successResult(page.getResult());
} }
@RequestMapping("user/quit/excel")
public RestResponse<Boolean> excel(HttpServletRequest request, HttpServletResponse response,GroupChatUserSearchQDTO qdto, BasePageInfo basePageInfo) {
ServiceResponse<Page<GroupChatUserDTO>> page = this.groupChatApiService.listUserPage(qdto, basePageInfo);
if (page.isSuccess() && CollUtil.isNotEmpty(page.getResult().getResult())){
List<GroupChatUserQuitVO> voList = new ArrayList<>() ;
for (GroupChatUserDTO dto : page.getResult().getResult()) {
GroupChatUserQuitVO vo = EntityUtil.changeEntityByJSON(GroupChatUserQuitVO.class,dto) ;
vo.setUserQuitTimeExcel(DateUtil.dateToStr(dto.getUserQuitTime(),"yyyy-MM-dd HH:mm:ss"));
if(dto.getUserType()==1) {
vo.setUserTypeExcel("企业成员");
}else if(dto.getUserType()==2) {
vo.setUserTypeExcel("外部成员");
}else {
vo.setUserTypeExcel("客户");
}
voList.add(vo) ;
}
String fileName = "退群记录";
List<String> titleList = Arrays.asList("群成员", "身份", "群名称", "群主", "退群时间");
List<String> fileList = Arrays.asList("userName", "userTypeExcel", "chatName", "staffName", "userQuitTimeExcel");
try {
ExcelUtils.xls(response, request, fileName, voList, fileList, titleList);
} catch (Exception e) {
e.printStackTrace();
logger.info("导出失败");
}
return RestResponse.successResult(true);
}
return RestResponse.successResult(false);
}
@RequestMapping("detail") @RequestMapping("detail")
public RestResponse<Object> detail(Long groupChatId) { public RestResponse<Object> detail(Long groupChatId) {
if (null == groupChatId) { if (null == groupChatId) {
......
package com.gic.haoban.manage.web.vo;
import java.io.Serializable;
/**
* @description:
* @Author: wenhua
* @Date: 2023/8/16 10:08
*/
public class StaffActiveAllocationVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 失败个数
*/
private Integer nums;
/**
* 失败原因
*/
private String errMessage;
public Integer getNums() {
return nums;
}
public void setNums(Integer nums) {
this.nums = nums;
}
public String getErrMessage() {
return errMessage;
}
public void setErrMessage(String errMessage) {
this.errMessage = errMessage;
}
}
package com.gic.haoban.manage.web.vo.chat;
import java.io.Serializable;
/**
*
* @ClassName: TabHaobanGroupChatUser
* @Description: TODO
* @Author 徐高华
* @Date 2022年11月25日 15:42:52
* @Modify
* @CopyRight
*/
public class GroupChatUserQuitVO implements Serializable{
private static final long serialVersionUID = 21771431486600L;
/**1企业成员2外部联系人3客户*/
private String userTypeExcel;
/**姓名*/
private String userName;
/**昵称*/
private String nickName;
/**用户退群时间*/
private String userQuitTimeExcel;
private String chatName ;
private String staffName ;
public String getUserTypeExcel() {
return userTypeExcel;
}
public void setUserTypeExcel(String userTypeExcel) {
this.userTypeExcel = userTypeExcel;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getUserQuitTimeExcel() {
return userQuitTimeExcel;
}
public void setUserQuitTimeExcel(String userQuitTimeExcel) {
this.userQuitTimeExcel = userQuitTimeExcel;
}
public String getChatName() {
return chatName;
}
public void setChatName(String chatName) {
this.chatName = chatName;
}
public String getStaffName() {
return staffName;
}
public void setStaffName(String staffName) {
this.staffName = staffName;
}
}
\ No newline at end of file
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