提交 16d2669c 作者: gh

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

上级 7d88ec1e
......@@ -94,7 +94,7 @@ public class RegisterUserEntity implements Serializable {
private Date customerPublish;
/**
* 延时客服发送时间
* 人群包
*/
@TableField(value = "in_package")
private String inPackage;
......
......@@ -7,6 +7,7 @@ import com.yaoyaozw.customer.vo.customer.CrowdPackageUserVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
@Mapper
......@@ -58,5 +59,12 @@ public interface RegisterUserEntityMapper extends BaseMapper<RegisterUserEntity>
*/
List<AuthorizerInfo>existAppid();
/**
* 根据appid找register用户
* @param appid
* @return
*/
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
if(!userList.isEmpty()){
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)));
......@@ -68,7 +68,7 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
//如果没有活跃时间,记录为首次活跃
registerUser.setFirstActive(lastFinishTime);
//排期重置
delayCustomerManage(registerUser,lastFinishTime,delayMessageMap);
delayCustomerManage(registerUser,lastFinishTime,integrationRequestDTO.getRequestDate(),delayMessageMap);
}
//活跃时间重置
registerUser.setLastActive(lastFinishTime);
......@@ -110,20 +110,38 @@ public class AccountOrderServiceImpl extends ServiceImpl<AccountOrderMapper, Acc
* 延时客服排期
* @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());
if (integerLongMap!=null&&!integerLongMap.isEmpty()){
//找初始排期间隔时间
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);
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);
}else{
registerUserPublish.setCustomerSort(-1);
}
}
}
......
......@@ -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();
//找最小
//找大于当前序列的最小序列
Integer newSort =sortSet.stream().filter(a->a>user.getCustomerSort()).min(Comparator.naturalOrder()).orElse(-1);
user.setCustomerSort(newSort);
CustomerDelayItemVO customerDelayItemVO = delaySortMap.get(newSort)!=null?delaySortMap.get(newSort).get(0):null;
//下次排期
if (customerDelayItemVO!=null&&customerDelayItemVO.getTimeInterval()!=null){
//时间戳舍秒和毫秒
user.setCustomerPublish(new Date((subscribeTimestamp/(60*1000))*60*1000+customerDelayItemVO.getTimeInterval()));
......
......@@ -121,4 +121,23 @@
</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>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论