提交 16d2669c 作者: gh

排期时间修复:订单活跃和延时客服下次排期优化

上级 7d88ec1e
...@@ -94,7 +94,7 @@ public class RegisterUserEntity implements Serializable { ...@@ -94,7 +94,7 @@ public class RegisterUserEntity implements Serializable {
private Date customerPublish; private Date customerPublish;
/** /**
* 延时客服发送时间 * 人群包
*/ */
@TableField(value = "in_package") @TableField(value = "in_package")
private String inPackage; private String inPackage;
......
...@@ -7,6 +7,7 @@ import com.yaoyaozw.customer.vo.customer.CrowdPackageUserVO; ...@@ -7,6 +7,7 @@ import com.yaoyaozw.customer.vo.customer.CrowdPackageUserVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List; import java.util.List;
@Mapper @Mapper
...@@ -58,5 +59,12 @@ public interface RegisterUserEntityMapper extends BaseMapper<RegisterUserEntity> ...@@ -58,5 +59,12 @@ public interface RegisterUserEntityMapper extends BaseMapper<RegisterUserEntity>
*/ */
List<AuthorizerInfo>existAppid(); List<AuthorizerInfo>existAppid();
/**
* 根据appid找register用户
* @param appid
* @return
*/
List<RegisterUserEntity> findAllUserWithoutSetupId(String appid); List<RegisterUserEntity> findAllUserWithoutSetupId(String appid);
List<RegisterUserEntity> findAllExpiredDelayPublish(@Param("requestDate")Date requestDate);
} }
\ No newline at end of file
...@@ -44,7 +44,7 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc ...@@ -44,7 +44,7 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
if(!userList.isEmpty()){ if(!userList.isEmpty()){
Set<String> appIdSet = userList.stream().map(RegisterUserEntity::getAppId).collect(Collectors.toSet()); Set<String> appIdSet = userList.stream().map(RegisterUserEntity::getAppId).collect(Collectors.toSet());
List<CustomerDelayItemVO> allDelayCustomerMessage = customerGraphicsDelayService.findAllDelayCustomerSort(appIdSet,1); List<CustomerDelayItemVO> allDelayCustomerMessage = customerGraphicsDelayService.findAllDelayCustomerSort(appIdSet,3);
Map<String, Map<Integer, Long>> delayMessageMap = allDelayCustomerMessage.stream().collect(Collectors.groupingBy(CustomerDelayItemVO::getAppId, Collectors.toMap(CustomerDelayItemVO::getPostSort, CustomerDelayItemVO::getTimeInterval, (v1, v2) -> v2))); Map<String, Map<Integer, Long>> delayMessageMap = allDelayCustomerMessage.stream().collect(Collectors.groupingBy(CustomerDelayItemVO::getAppId, Collectors.toMap(CustomerDelayItemVO::getPostSort, CustomerDelayItemVO::getTimeInterval, (v1, v2) -> v2)));
...@@ -68,7 +68,7 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc ...@@ -68,7 +68,7 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
//如果没有活跃时间,记录为首次活跃 //如果没有活跃时间,记录为首次活跃
registerUser.setFirstActive(lastFinishTime); registerUser.setFirstActive(lastFinishTime);
//排期重置 //排期重置
delayCustomerManage(registerUser,lastFinishTime,delayMessageMap); delayCustomerManage(registerUser,lastFinishTime,integrationRequestDTO.getRequestDate(),delayMessageMap);
} }
//活跃时间重置 //活跃时间重置
registerUser.setLastActive(lastFinishTime); registerUser.setLastActive(lastFinishTime);
...@@ -110,20 +110,38 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc ...@@ -110,20 +110,38 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
* 延时客服排期 * 延时客服排期
* @param registerUserPublish * @param registerUserPublish
*/ */
public void delayCustomerManage(RegisterUserEntity registerUserPublish, Date activeTime, Map<String, Map<Integer, Long>> delayMessageMap){ public void delayCustomerManage(RegisterUserEntity registerUserPublish, Date activeTime,Date currentDate, Map<String, Map<Integer, Long>> delayMessageMap){
Map<Integer, Long> integerLongMap = delayMessageMap.get(registerUserPublish.getAppId()); Map<Integer, Long> integerLongMap = delayMessageMap.get(registerUserPublish.getAppId());
if (integerLongMap!=null&&!integerLongMap.isEmpty()){ if (integerLongMap!=null&&!integerLongMap.isEmpty()){
//找初始排期间隔时间 //找初始排期间隔时间
Long firstDelayMessage = integerLongMap.get(1); Long firstDelayMessage = integerLongMap.get(1);
Long secondDelayMessage = integerLongMap.get(2);
Long thirdDelayMessage = integerLongMap.get(3);
//如果活跃时间和当前的间隔大于首次排期间隔,则说明排1就扫不到了;
if (firstDelayMessage!=null&&currentDate.getTime()-activeTime.getTime()<firstDelayMessage){
//时间戳精确到分 //时间戳精确到分
Date publishTime = new Date((activeTime.getTime()/(60*1000))*60*1000 + firstDelayMessage); Date publishTime = new Date((activeTime.getTime()/(60*1000))*60*1000 + firstDelayMessage);
registerUserPublish.setCustomerSort(1); registerUserPublish.setCustomerSort(1);
registerUserPublish.setCustomerPublish(publishTime);
}else if (secondDelayMessage!=null&&currentDate.getTime()-activeTime.getTime()<secondDelayMessage){
Date publishTime = new Date((activeTime.getTime()/(60*1000))*60*1000+ secondDelayMessage);
registerUserPublish.setCustomerSort(2);
registerUserPublish.setCustomerPublish(publishTime);
}else if(thirdDelayMessage!=null){
Date publishTime = new Date((activeTime.getTime()/(60*1000))*60*1000 + thirdDelayMessage);
registerUserPublish.setCustomerSort(3);
registerUserPublish.setCustomerPublish(publishTime); registerUserPublish.setCustomerPublish(publishTime);
}else{
registerUserPublish.setCustomerSort(-1);
}
} }
} }
......
...@@ -98,16 +98,16 @@ public class WeChatServiceImpl implements WeChatService{ ...@@ -98,16 +98,16 @@ public class WeChatServiceImpl implements WeChatService{
} }
} }
//用户首次活跃时间 //用户首次活跃时间
Long subscribeTimestamp = user.getFirstActive().getTime(); Long subscribeTimestamp = user.getFirstActive()!=null?user.getFirstActive().getTime():user.getGmtCreate().getTime();
Set<Integer> sortSet = delaySortMap.keySet(); Set<Integer> sortSet = delaySortMap.keySet();
//找最小 //找大于当前序列的最小序列
Integer newSort =sortSet.stream().filter(a->a>user.getCustomerSort()).min(Comparator.naturalOrder()).orElse(-1); Integer newSort =sortSet.stream().filter(a->a>user.getCustomerSort()).min(Comparator.naturalOrder()).orElse(-1);
user.setCustomerSort(newSort); user.setCustomerSort(newSort);
CustomerDelayItemVO customerDelayItemVO = delaySortMap.get(newSort)!=null?delaySortMap.get(newSort).get(0):null; CustomerDelayItemVO customerDelayItemVO = delaySortMap.get(newSort)!=null?delaySortMap.get(newSort).get(0):null;
//下次排期
if (customerDelayItemVO!=null&&customerDelayItemVO.getTimeInterval()!=null){ if (customerDelayItemVO!=null&&customerDelayItemVO.getTimeInterval()!=null){
//时间戳舍秒和毫秒 //时间戳舍秒和毫秒
user.setCustomerPublish(new Date((subscribeTimestamp/(60*1000))*60*1000+customerDelayItemVO.getTimeInterval())); user.setCustomerPublish(new Date((subscribeTimestamp/(60*1000))*60*1000+customerDelayItemVO.getTimeInterval()));
......
...@@ -121,4 +121,23 @@ ...@@ -121,4 +121,23 @@
</select> </select>
<resultMap id="updateCustomerSortMap" type="com.yaoyaozw.customer.entity.RegisterUserEntity">
<!--@mbg.generated-->
<!--@Table register_user_entity-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="app_id" jdbcType="VARCHAR" property="appId" />
<result column="customer_sort" jdbcType="INTEGER" property="customerSort" />
<result column="customer_publish" jdbcType="TIMESTAMP" property="customerPublish" />
<result column="first_active" jdbcType="TIMESTAMP" property="firstActive" />
</resultMap>
<select id="findAllExpiredDelayPublish" resultMap="updateCustomerSortMap">
select id,app_id,customer_sort,customer_publish ,first_active from register_user_entity
where customer_sort > 0 AND first_active is not null and customer_publish &lt; #{requestDate}
</select>
</mapper> </mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论