# 提示词 1 开发语言:JDK8 产品:页面、视频、下载、直播、超低时延直播、全站四层加速、全站七层加速 工单:试用单(试用开始时间、试用结束时间)、试用删除工单、开通单(开通时间)、非首次开通单(开通时间)、注销单(注销时间)。 对应两个概念: 试用:试用单、试用删除工单。 商用:开通单、非首次开通单、注销单。 一个企业必须要经过首次开通后才能进行非首次开通。 试用的时候会创建企业。 企业可以试用或商用多个产品,每个产品,也可以多个,用订购ID来进行区分。 工单也可能被驳回。 现在有一个需求,要统计客户数。 客户数定义:esop企业(cpid)+产品类型(点播(页面、下载、视频)、直播、超低时延直播、全站四层加速、全站七层加速) 也就是,cpid+点播 算一个数,点播包含了页面、下载、视频。cpid+直播算一个。cpid+超低时延直播算一个。cpid+全站四层加速算一个。cpid+全站七层加速算一个。 比如客户有两个订购是页面和1个订购是下载算一个企业数。 比如客户有两个订购是页面和1个订购是下载和1个订购是直播算两个企业数。 指标1)**CDN存量商用客户数**,如果产品下有多个订购已开通,开通时间为最早的开通时间。 指标2)**CDN注销客户数**业务订购均已注销,则定义为已注销。如果cpid+产品类型相同,但订购不同,都注销了才算注销。如果cpid+直播注销了,点播未注销,则统计直播的数据。 页面会传一个开始时间,一个结束时间,针对这两个指标只需要取结束时间进行计算。 有什么好的算法思维。 --- # 提示词 2 你是一位资深的算法工程师,精通数据统计和业务逻辑分析。我有一个需求,需要设计一种算法思维或逻辑来统计CDN服务的客户数,具体包括两个指标:**CDN存量商用客户数** 和 **CDN注销客户数**。以下是相关的业务背景和定义,请根据这些信息提供详细的算法思路或伪代码,使用JDK8相关的数据结构和逻辑。 ### 业务背景 - **开发语言**:JDK8 - **产品类型**:页面、视频、下载、直播、超低时延直播、全站四层加速、全站七层加速 - **工单类型**: - 试用:试用单(可获取试用开始时间、试用结束时间) - 商用:开通单(包含开通时间)、非首次开通单(包含开通时间)、注销单(包含注销时间) - **概念**: - 试用:试用单 - 商用:开通单、非首次开通单、注销单 - 注:企业必须首次开通后才能进行非首次开通;试用时会创建企业 - **企业与产品**:一个企业可以试用或商用多个产品,每个产品的订购用订购ID区分 - **工单状态**:工单可能被驳回 - **客户数定义**:以企业ID(cpid)+产品类型组合为单位计数,其中: - 点播(包含页面、下载、视频)算一个类型 - 直播、超低时延直播、全站四层加速、全站七层加速各自算一个类型 - 示例:cpid+点播(无论有几个订购)算1个客户数;cpid+点播+直播算2个客户数 ### 指标定义 1. **CDN存量商用客户数**:对于某一企业(cpid)+产品类型组合,如果该组合下有多个订购已开通,则以最早的开通时间为准,判定为存量商用客户。 2. **CDN注销客户数**:对于某一企业(cpid)+产品类型组合,如果该组合下的所有订购均已注销,则判定为已注销客户。如果同一cpid下,某产品类型(如直播)已注销,但另一类型(如点播)未注销,则只统计直播的注销数据。 - **时间范围**:页面会传入一个开始时间和结束时间,但这两个指标仅基于结束时间进行计算。 ### 任务 请提供一种算法思维或逻辑,用于计算上述两个指标。输出应包含: - 数据处理步骤(如何分组、筛选、计算) - 如何处理产品类型分组(如点播包含页面、下载、视频) - 如何判定存量商用客户和注销客户 - 可能用到的数据结构(如Map、List等,基于JDK8) - 对工单驳回等特殊情况的处理建议 - 最终输出结果的格式建议(例如,按cpid和产品类型组合的统计结果) ### 输出格式 - 使用结构化的文本或伪代码,清晰展示每一步逻辑。 - 如果可能,提供一个简单的示例,说明如何根据输入数据计算两个指标。 - 语言:中文 请按上述要求,提供详细的算法设计思路。 ``` for (EnterpriseInfoDTO enterpriseInfo : enterpriseInfos) 的逻辑实现了获取每个企业下有多少产品,每个产品有多少订购,每个订购的,试用开始时间、试用结束时间、商用开始时间、商用结束时间、业务暂停时间、业务恢复时间。请用 List enterpriseProducts 帮我收集。 enterpriseProducts结构为: public class EnterpriseProduct { private String enterpriseId; private List products; } public class ProductDTO { private String product; private List details; } public class ProductDetailsDTO { private String productId; private String productType; @Builder.Default private List trialPeriods = new ArrayList<>(); // 试用周期 private LocalDateTime businessStartTime; // 商用开始时间。 private LocalDateTime businessCancelTime; // 商用注销时间。 @Builder.Default private List businessPeriods = new ArrayList<>(); // 商用暂停恢复周期 } public class TrialPeriodDTO { private LocalDateTime startTime; private LocalDateTime endTime; } public class BusinessPeriodDTO { private LocalDateTime pauseTime; // 商用暂停时间 private LocalDateTime restoreTime; // 商用恢复时间 } ``` --- # 提示词 3 你是一位资深的算法工程师,精通数据统计和业务逻辑分析。我有一个需求,需要设计一种算法思维或逻辑来统计CDN服务的客户数,具体包括两个指标:**CDN存量商用客户数** 和 **CDN注销客户数**。以下是相关的业务背景和定义,请根据这些信息提供详细的算法思路或伪代码,使用JDK8相关的数据结构和逻辑。 ### 业务背景 - **开发语言**:JDK8 - **产品类型**:点播、直播、超低时延直播、全站四层加速、全站七层加速 - **企业与产品**:一个企业可以试用或商用多个产品,每个产品的订购用订购ID区分 - **客户数定义**:以企业ID(cpid)+产品类型组合为单位计数,其中: - 示例:cpid+点播(无论有几个订购)算1个客户数; - 有cpid+点播(无论有几个订购),cpid+直播(无论有几个订购)算2个客户数 ### 指标定义 1. **CDN存量商用客户数**:对于某一企业(cpid)+产品类型组合,改查询时间是否在商用订购时间段内。 2. **CDN注销客户数**:对于某一企业(cpid)+产品类型组合,如果该组合下的所有订购均已注销(也就是查询时间前所有订购均有商用开始时间和结束时间),则判定为已注销客户,但是如果该查询时间存在试用也不算注销。 - **时间取值**:页面会传入一个开始时间和结束时间,但这两个指标仅基于结束时间进行计算(LocalDateTime requestEndTime = request.getEndTime();)。 ### 任务 请提供一种算法思维逻辑,用于计算上述两个指标。输出应包含: - 数据处理步骤(如何分组、筛选、计算) - 如何处理产品类型分组(如点播包含页面、下载、视频) - 如何判定存量商用客户和注销客户 - 可能用到的数据结构(如Map、List等,基于JDK8) ### 输出格式 - 清晰展示每一步逻辑代码。 - 语言:中文 请按上述要求,提供详细的算法设计思路。 --- # 提示词 4 你是一位资深的算法工程师,精通数据统计和业务逻辑分析。我有一个需求,需要设计一种算法思维或逻辑来统计CDN服务的客户数,具体包括两个指标:**CDN存量商用客户数** 和 **CDN注销客户数**。以下是相关的业务背景和定义,请根据这些信息提供详细的算法思路或伪代码,使用JDK8相关的数据结构和逻辑。 我现在有一个结构体 EnterpriseProduct: ```java @Data @NoArgsConstructor @AllArgsConstructor public class EnterpriseProduct { private String enterpriseId; private List products; } @Data @Builder @NoArgsConstructor @AllArgsConstructor public class ProductDTO { private String product; private List details; } @Data @Builder @NoArgsConstructor @AllArgsConstructor public class ProductDetailsDTO { private String productId; private String productType; @Builder.Default private List trialPeriods = new ArrayList<>(); // 试用周期 private LocalDateTime businessStartTime; // 商用开始时间。 private LocalDateTime businessCancelTime; // 商用注销时间。 @Builder.Default private List businessPeriods = new ArrayList<>(); // 商用暂停恢复周期 } @Data @Builder @NoArgsConstructor @AllArgsConstructor public class TrialPeriodDTO { private LocalDateTime startTime; private LocalDateTime endTime; } @Data @Builder @NoArgsConstructor @AllArgsConstructor public class BusinessPeriodDTO { /** * 商用暂停时间. */ private LocalDateTime pauseTime; /** * 商用恢复时间 */ private LocalDateTime restoreTime; } ``` 相当于一个企业下有多个产品,每个产品有多个订购。每个订购又有商用开始时间和结束时间(商用中的结束时间可能为空)和多段的试用开始结束周期(试用中的结束时间可能为空)。和商用暂停恢复周期(暂停中的恢复时间可能为空)。 ### 业务背景 - **开发语言**:JDK8 - **产品类型**:点播、直播、超低时延直播、全站四层加速、全站七层加速 - **企业与产品**:一个企业可以试用或商用多个产品,每个产品的订购用订购ID区分 - **客户数定义**:以企业ID(cpid)+产品类型组合为单位计数,其中: - 示例:cpid+点播(无论有几个订购)算1个客户数; - 有cpid+点播(无论有几个订购),cpid+直播(无论有几个订购)算2个客户数 ### 指标定义 1. **CDN存量商用客户数**:对于某一企业(cpid)+产品类型组合,改查询时间是否在商用订购时间段内。 2. **CDN注销客户数**:对于某一企业(cpid)+产品类型组合,如果该组合下的所有订购均已注销(也就是查询时间前所有订购均有商用开始时间和结束时间),则判定为已注销客户,但是如果该查询时间存在试用也不算注销。 - **时间取值**:页面会传入一个开始时间和结束时间,但这两个指标仅基于结束时间进行计算(LocalDateTime requestEndTime = request.getEndTime();)。 ### 任务 请提供一种算法思维逻辑,用于计算上述两个指标。输出应包含: - 数据处理步骤(如何分组、筛选、计算) - 如何处理产品类型分组(如点播包含页面、下载、视频) - 如何判定存量商用客户和注销客户 - 可能用到的数据结构(如Map、List等,基于JDK8) ### 输出格式 - 清晰展示每一步逻辑代码。 - 语言:中文 请按上述要求,提供详细的算法设计思路。 --- # 提示词 5 你是一位资深的算法工程师,精通数据统计和业务逻辑分析。我有一个需求,需要设计一种算法思维或逻辑来统计CDN服务的客户数对应详情列表,具体包括两个指标:**CDN存量商用客户数** 和 **CDN注销客户数**。以下是相关的业务背景和定义,请根据这些信息提供详细的算法思路和代码,使用 JDK8 相关的数据结构、逻辑和语法。 ### 业务背景 - **开发语言**:JDK8 - **产品类型**:点播、直播、超低时延直播、全站四层加速、全站七层加速 - **企业与产品**:一个企业可以试用或商用多个产品,每个产品可以订购多个,用订购用订购ID区分 - **客户数定义**:以企业ID(cpid)+产品类型组合为单位计数,其中: - cpid+点播(无论有几个订购)算1个客户数; - 有cpid+点播(无论有几个订购),cpid+直播(无论有几个订购)算2个客户数,相当于企业产品维度。 ### 指标定义 1. **CDN存量商用客户数**:对于某一企业(cpid)+产品类型组合,改查询时间是否在商用订购时间段内。 2. **CDN注销客户数**:对于某一企业(cpid)+产品类型组合,如果该组合下的所有订购均已注销(也就是查询时间前所有订购均有商用开始时间和结束时间),则判定为已注销客户,但是如果该查询时间存在试用也不算注销。 - **时间取值**:页面会传入一个开始时间和结束时间,但这两个指标仅基于结束时间进行计算(LocalDateTime requestEndTime = request.getEndTime();)。 ### 任务 请提供一种算法思维逻辑,用于根据现有计算路基,提供方案实现为前端提供上述两个指标详情列表(分页)。输出应包含: CDN存量商用客户数:序号、CPID、企业名称、引入省份、状态、商用开通时间、类型 CDN注销客户数:序号、CPID、企业名称、引入省份、状态、注销时间、类型 关于状态:只要有开通就是已开通;全都注销是已注销;有已开通,对应的开通订购都处于暂停时间,算已暂停。 当前已有的逻辑时计算CDN存量商用客户数、CDN注销客户数的逻辑。是否可以抽出来一些公共方法。 ### 输出格式 - 清晰展示每一步逻辑代码。 - 语言:中文 请按上述要求,提供详细的算法设计和实现。