7、31admin total budget开发

news/2025/1/18 20:54:57/文章来源:https://www.cnblogs.com/lvshy/p/18336247
  1. 远程检查仓库状态

     

  2. 在测试平台部署运行 而不必执着于本地各种配置

     如何申请服务,部署运行,在项目的主分支,副分支上运行 基于gitlab

  3. 批量创建广告

    映射(Maps)
    AdsTypeMap: 将广告类型字符串映射到整型数值,例如“Search Ads”映射到model.AdsTypeSearch的整型表示。
    CostTypeMap: 将成本类型字符串(如"CPS"或"CPC")映射到整型数值。
    AdsCategoryMap: 将广告类别字符串(如"Single Merchant")映射到整型数值。
    TransactionTypeMap: 将交易类型字符串映射到整型数值。
    AdsStatusOperateMap: 将状态操作字符串(如"stopped"或"running")映射到整型数值,用于操作广告状态。
    AdsEnhancedBidPriceMap: 将增强竞价价格开关状态("off"或"on")映射到整型数值。
    AdsAutoKeywordModeMap: 将关键词自动模式开关状态("off"或"on")映射到food_ads.KeywordsMode枚举类型。
    TargetOrderTypeMap: 将目标订单类型字符串映射到整型数值。
    TargetUserABSTypeMap: 将目标用户ABS类型字符串映射到整型数值。
    结构体(Structs)
    BatchCreateAdsData: 用于存储创建广告所需的数据,包括广告名称、商家ID、商店ID列表、广告类型、开始和结束时间、位置组、关键词列表、描述等。
    BatchUpdateAdsData: 类似于BatchCreateAdsData,但还包含广告ID和一些用于更新的额外字段,如操作状态和过渡字段,用于处理字符串到实际类型的转换。
    BaseBulkAdsTaskServer: 这个结构体包含了处理批量广告任务所需的上下文和服务引用,以及各种数据列表和映射,用于存储和处理批量操作的结果。
    其他字段
    Content: 二维字符串数组,可能代表从CSV文件读取的内容。
    CreateAdsDataList 和 UpdateAdsDataList: 分别用于存储待创建和待更新的广告数据列表。
    FailAdsDataList, BudgetAdsDataList, SuccessAdsDataList: 分别用于存储失败、预算问题和成功创建的广告数据行。
    ResultFileHash: 可能用于标识结果文件的唯一哈希值。
    AllLocationIds: 所有位置ID的列表,可能用于验证位置数据的有效性。
    AdsTypeToCPCPriceMap 和 AdsTargetPriceMap: 映射广告类型或目标到其相关的CPC价格或目标价格。
    L2CategoryName2InfoMap: 二级类别名称到其信息的映射,可能用于分类数据。
    整体上,这个代码片段展示了如何组织和处理批量广告操作的数据,包括创建和更新广告,以及处理与广告相关的各种元数据和状态。

  4. 初始化一个服务器实例并检查

    用于构建和初始化一个批量处理广告任务的服务器实例,并检查创建广告数据时的各种约束条件。下面是每个函数的详细解释:
    BuildBaseBulkAdsTaskServer 函数
    功能: 构建一个BaseBulkAdsTaskServer实例。
    参数:
    ctx: 上下文,用于取消操作或传递截止时间。
    s: AdsBizService的指针,可能是业务逻辑服务的实例。
    model: CommonOperationMassLog的指针,可能用于记录批量操作的日志。
    req: 任何接口类型,但在函数内部被转换为food_ads.AsyncBatchProcessReq类型,这是批量处理请求的具体类型。
    返回: 返回一个BaseProcessTaskServer类型的实例,实际上是BaseBulkAdsTaskServer的一个实例。
    GetReportErrorMethod 方法
    功能: 根据BaseBulkAdsTaskServer实例的Model.Operation字段确定报告错误的方法名称。
    逻辑: 如果操作类型是更新,则返回BatchUpdateMethod,否则返回BatchCreateMethod。
    InitTask 方法
    功能: 初始化任务,下载文件,解析CSV数据,并初始化一些内部映射。
    流程:
    使用s3.GetS3Client().Download下载文件。
    使用csv.NewReader解析下载的数据。
    调用utils.FilterNotNullContent过滤掉空内容。
    初始化几个内部映射。
    记录初始化完成的信息。
    CheckCreateAdsName, CheckCreateAdsDesc, CheckCreateAdsTime, CheckCreateAdsLocationGroup, CheckCreateAdsCostType, CheckCreateAdsTargetKeywordList 方法
    功能: 检查BatchCreateAdsData实例的各个字段是否符合预期的规则。
    逻辑:
    CheckCreateAdsName: 检查广告名称长度是否有效。
    CheckCreateAdsDesc: 检查广告描述长度是否超过限制。
    CheckCreateAdsTime: 检查广告的开始时间是否早于结束时间。
    CheckCreateAdsLocationGroup: 检查位置组列表长度是否超过限制。
    CheckCreateAdsCostType: 检查成本类型和交易类型是否兼容,特别是在某些国家/地区是否只允许CPC。
    CheckCreateAdsTargetKeywordList: 检查关键词列表是否适用于特定的广告类型,并且长度是否合适。
    公共逻辑
    如果检查发现错误,会调用metric_reporter.ReportBatchFileError报告错误,并返回错误消息。
    使用logkit进行日志记录,包括错误和信息级别的日志。
    整个代码段展示了如何构建和初始化批量广告处理任务,以及如何在创建广告前进行必要的数据验证。这有助于确保数据的完整性和一致性,防止无效或不合规的广告数据进入系统。

  5. 数据库交互错误

    了BaseBulkAdsTaskServer结构体中的方法,它们负责验证批量广告创建数据的正确性,设置价格映射,以及处理与数据库相关的逻辑。以下是每个方法的详细解释:
    CheckCreateAdsAutoKeywords 方法
    功能: 验证BatchCreateAdsData中的自动关键词模式是否适用于推荐类型的广告。
    逻辑: 如果广告类型是推荐(AdsTypeRCMD)并且关键词模式不是默认模式(KeywordsMode_Default),则返回错误信息,说明推荐广告不能设置自动关键词模式。
    CheckCreateAdsBidPrice 方法
    功能: 验证竞价价格是否在允许的范围内。
    逻辑:
    如果成本类型是CPS(按销售付费),则直接返回空字符串,因为CPS类型通常不需要设置竞价。
    获取广告类型对应的CPC(按点击付费)价格。
    检查竞价价格是否低于或高于CPC价格的10倍。
    如果设置了最大竞价价格,也检查它是否合理。
    ValidateCreateAdsCol 方法
    功能: 遍历一系列验证函数,对BatchCreateAdsData的每一列数据进行验证。
    逻辑:
    定义了一个函数数组,包含了所有验证函数。
    对每种验证函数,如果返回的错误信息不为空,那么将错误信息添加到FailAdsDataList,并返回false表示验证失败。
    SetAdsTypeToCPCPriceMap 方法
    功能: 设置一个映射,将广告类型映射到CPC价格。
    逻辑:
    遍历预定义的广告类型列表。
    对于每种广告类型,从Redis中获取CPC价格,并将其存入AdsTypeToCPCPriceMap。
    如果获取价格过程中出现错误,记录错误并标记所有数据为失败。
    SetUserTargetPriceMap 方法
    功能: 设置一个映射,将目标类型映射到其相应的投标价格。
    逻辑:
    遍历预定义的目标类型列表。
    对于每种目标类型,从数据库中获取投标模型,并将其价格存入AdsTargetPriceMap。
    如果获取价格过程中出现错误,记录错误并标记所有数据为失败。
    公共逻辑
    多个方法中使用了logkit进行日志记录,当发生错误时,记录详细的错误信息。
    在SetAdsTypeToCPCPriceMap和SetUserTargetPriceMap中,如果数据获取失败,会将失败原因添加到FailAdsDataList,这是一个用于收集所有验证失败的广告数据及其错误信息的列表。

  6. 一些用于解析和验证批量广告创建数据中目标类型和类别的函数,以及一个用于设置所有二级商店类别的方法。下面是每个函数和方法的详细解释:
    ParseTargetOrderTypes 函数
    功能: 解析目标订单类型字符串,并将其转换为整数类型的目标订单类型列表。
    逻辑:
    使用utils.SplitStringFilterNullList分割输入字符串,并过滤掉空值。
    遍历得到的字符串列表,查找每个字符串在TargetOrderTypeMap中的映射。
    如果找到映射,则将对应的整数值添加到结果列表;如果没有找到,则返回错误信息。
    ParseTargetUserABSTypes 函数
    功能: 类似于ParseTargetOrderTypes,但是针对用户ABS类型。
    逻辑: 与ParseTargetOrderTypes相同,只是使用的映射是TargetUserABSTypeMap。
    ParseTargetCategoryList 方法
    功能: 解析目标类别列表字符串,并将其转换为整数类型的目标类别列表。
    逻辑:
    分割输入字符串,并过滤掉空值。
    遍历得到的字符串列表,查找每个字符串在L2CategoryName2InfoMap中的映射。
    如果找到映射,则将对应类别的代码转换为整数并添加到结果列表;如果没有找到,则返回错误信息。
    SetAllL2StoreCategory 方法
    功能: 设置所有二级商店类别的映射。
    逻辑:
    调用b.Server.GetAllStoreCategoryTree获取所有商店类别的树状结构。
    如果获取过程中出现错误,记录错误并标记所有数据为失败。
    遍历一级商店类别下的所有二级商店类别,将每个二级类别的名称和信息存储在L2CategoryName2InfoMap中。
    记录获取所有二级商店类别成功的日志信息。
    公共逻辑
    这些函数和方法都使用了utils.SplitStringFilterNullList来分割和过滤输入的字符串,这表明它们都在处理逗号分隔的值(CSV)数据。
    如果在解析或获取数据的过程中遇到错误,会将错误信息添加到FailAdsDataList,这是一个用于收集所有验证失败的广告数据及其错误信息的列表。

  7. 批量创建广告并存如list

    aseBulkAdsTaskServer结构体的一个方法BatchCreateAdsStart,它负责从上传的数据中批量创建广告。下面是对这段代码的详细解释:
    方法逻辑概述
    此方法首先尝试获取所有位置组ID,如果失败则标记所有上传的广告数据为失败,并报告错误。接着初始化一些内部映射和数据结构,然后遍历上传的广告数据,对每一行数据进行解析和验证,最后将有效数据存储在createAdsDataList中。
    详细步骤
    获取所有位置组ID:
    调用getAllLocationGroupIDs方法获取所有位置组ID,如果获取失败,记录错误并标记所有数据为失败。
    设置其他映射和数据结构:
    调用SetAllL2StoreCategory, SetAdsTypeToCPCPriceMap, 和 SetUserTargetPriceMap方法,分别设置商店类别映射、广告类型到CPC价格映射和用户目标价格映射。
    创建广告数据映射:
    创建一个映射mapping,将列索引映射到列名,用于后续解析行数据。
    遍历上传数据:
    遍历b.Content中的每一行数据,除了第一行(标题行)。
    对每行数据进行解析,将列名映射到具体的数据字段。
    根据解析结果创建BatchCreateAdsData实例,并填充其属性。
    解析和验证数据:
    解析广告类型、交易类型、描述、广告名、成本类型、广告位置组等字段。
    解析广告类别,根据类别设置商家ID或品牌ID。
    解析开始和结束时间,自动关键词模式,关键词列表,预算,竞价价格,增强竞价模式,最大竞价价格,目标订单类型,目标用户ABS类型,目标类别列表,以及商店ID列表。
    在解析过程中,如果发现任何无效或不正确的数据,将该行数据添加到FailAdsDataList中,并跳过该行。
    数据校验:
    调用ValidateCreateAdsCol方法对BatchCreateAdsData实例进行额外的校验,如果校验不通过,则跳过该行数据。
    收集有效数据:
    将通过所有校验的BatchCreateAdsData实例添加到createAdsDataList中。
    完成处理:
    将createAdsDataList赋值给b.CreateAdsDataList,表示成功解析的数据。
    记录一条信息日志,表示批量创建广告开始的处理已完成。
    注意事项
    此方法中使用了多个映射如AdsTypeMap, TransactionTypeMap, CostTypeMap, AdsCategoryMap, AdsAutoKeywordModeMap, AdsEnhancedBidPriceMap等,这些映射用于将字符串类型的字段转换为对应的枚举或整型值。
    数据解析和验证过程中,使用了多个辅助函数如utils.SplitStringFilterNullList, utils.String2Timestamp, ParseStringToFloatWithDecimal等,这些函数用于处理字符串转换和数据清洗。
    错误处理方面,使用了FailAdsDataList来收集所有失败的数据行及其原因,以便后续可能的错误报告或用户反馈。

  8. BaseBulkAdsTaskServer结构体的一个方法BatchUpdateAdsStart,用于批量更新广告数据。下面是对这段代码的详细解释:
    方法逻辑概述
    此方法首先尝试获取所有位置组ID,如果失败则标记所有上传的广告数据为失败,并报告错误。接着初始化一些内部映射和数据结构,然后遍历上传的广告数据,对每一行数据进行解析和验证,最后将有效数据存储在updateAdsDataList中。
    详细步骤
    获取所有位置组ID:
    调用getAllLocationGroupIDs方法获取所有位置组ID,如果获取失败,记录错误并标记所有数据为失败。
    设置其他映射和数据结构:
    调用SetAllL2StoreCategory, SetAdsTypeToCPCPriceMap, 和 SetUserTargetPriceMap方法,分别设置商店类别映射、广告类型到CPC价格映射和用户目标价格映射。
    创建广告数据映射:
    创建一个映射mapping,将列索引映射到列名,用于后续解析行数据。
    遍历上传数据:
    遍历b.Content中的每一行数据,除了第一行(标题行)。
    对每行数据进行解析,将列名映射到具体的数据字段。
    根据解析结果创建BatchUpdateAdsData实例,并填充其属性。
    解析和验证数据:
    解析广告ID,广告描述,广告名称,目标关键词列表,广告位置组,广告操作状态,自动关键词模式字符串,开始和结束时间,预算,增强竞价模式字符串,竞价价格字符串,最大竞价价格字符串,目标订单类型,目标用户ABS类型,目标类别列表,以及商店ID列表。
    在解析过程中,如果发现任何无效或不正确的数据,将该行数据添加到FailAdsDataList中,并跳过该行。
    收集有效数据:
    将通过所有校验的BatchUpdateAdsData实例添加到updateAdsDataList中。
    完成处理:
    将updateAdsDataList赋值给b.UpdateAdsDataList,表示成功解析的数据。
    记录一条信息日志,表示批量更新广告开始的处理已完成。
    注意事项
    此方法中使用了多个辅助函数如utils.SplitStringFilterNullList, strconv.ParseInt, utils.String2Timestamp, ParseStringToFloatWithDecimal等,这些函数用于处理字符串转换和数据清洗。
    错误处理方面,使用了FailAdsDataList来收集所有失败的数据行及其原因,以便后续可能的错误报告或用户反馈。
    数据解析过程中,对于某些字段如AdvertiseEndTime, AdvertiseStartTime, Budget, EnhancedBidPriceStr, BidPriceStr, MaxBidPriceStr等,只有当它们存在时才进行解析,不存在则忽略。
    广告ID的解析使用了strconv.ParseInt,确保ID能被正确转换为整数类型。
    这个方法主要用于处理批量更新广告的业务逻辑,确保上传的数据被正确解析和验证,从而避免数据不一致或错误的更新操作。

  9. process 处理之前过来的广告列表,将其遍历读取后插入数据库

    BaseBulkAdsTaskServer结构体的一个方法ProcessBatchCreateAds,用于处理批量创建广告的业务逻辑。下面是对这段代码的详细解释:
    方法逻辑概述
    此方法遍历CreateAdsDataList中的每一个广告数据,执行以下步骤:
    获取商家和品牌信息。
    获取位置组ID。
    获取商店ID列表和相关信息。
    计算广告预算和相关预算信息。
    创建广告业务模型和预算模型。
    插入数据到数据库。
    处理预算警告提示。
    详细步骤
    获取商家和品牌信息:
    调用GetMerchantOrBrandInfoByAdsCategory方法获取与广告类别相关的商家和品牌信息。
    获取位置组ID:
    调用GetCreateLocationGroupIDs方法获取位置组ID。
    获取商店ID列表和相关信息:
    调用GetStoreIdList方法获取商店ID列表。
    使用BatchMGetStoreInfo方法获取商店信息。
    计算涉及的商家ID列表。
    计算广告预算和相关预算信息:
    从GetStoreDailyBudgetInfoMap获取每个商店的每日预算信息。
    计算广告总预算,以及每个商家的预算。
    检查预算是否有效,包括检查预算是否超出限制、低于最小值、超过最大值等情况。
    创建广告业务模型和预算模型:
    构建AdsBizModel和AdsBudgetModel对象,准备插入数据库。
    插入数据到数据库:
    根据成本类型调用不同的数据库插入方法。
    处理预算警告提示:
    如果存在无效预算的商店ID,调用GetBudgetWarnTipFactory生成预算警告提示。
    注意事项
    此方法中使用了多个辅助函数如NewSetFromSlice, NewInt64SliceFromSet, sliceconv.FormatInt64, sliceconv.FormatUint64等,这些函数用于集合操作和数据格式化。
    错误处理方面,使用了FailAdsDataList和BudgetAdsDataList来收集所有失败或有预算警告的数据行及其原因,以便后续可能的错误报告或用户反馈。
    数据解析和验证过程中,确保所有必要的信息都被正确获取和处理,例如商家信息、位置组信息、商店信息和预算信息。
    数据插入数据库前,会根据成本类型决定插入的额外数据,例如竞标价格模型。
    预算警告处理中,根据不同的预算问题生成相应的警告提示,并将其附加到BudgetAdsDataList中。
    这个方法主要用于处理批量创建广告的复杂业务逻辑,确保上传的数据被正确解析、验证和持久化到数据库,同时处理可能出现的预算问题。

  10. 最终还是更新的adsBIZMODEl  !!!

    BaseBulkAdsTaskServer结构体中的几个方法,它们分别用于验证和设置广告模型中的不同属性。下面是每个方法的详细解释:
    ValidateAdsNameAndSetAdsModel
    此方法验证广告名称是否符合长度要求,并将其设置到AdsBizModel中。
    功能:检查广告名称data.AdsName的字符数是否超过最大允许长度maxCharOfCampaignName。使用utf8.RuneCountInString函数来计算Unicode字符数。
    逻辑:
    如果广告名称过长,则记录错误信息,将错误信息添加到FailAdsDataList,并返回错误。
    如果广告名称长度合适且非空,则更新adsModel.AdsName。
    ValidateDescAndSetAdsModel
    此方法验证广告描述是否符合长度要求,并将其设置到AdsBizModel中。
    功能:类似广告名称的验证,但是针对data.Description字段,最大长度为maxCharsOfDescription。
    逻辑:
    如果描述过长,则记录错误信息,将错误信息添加到FailAdsDataList,并返回错误。
    如果描述长度合适且非空,则更新adsModel.Description。
    ValidateValidTimeAndSetAdsModel
    此方法验证广告的有效时间是否符合规则,并设置到AdsBizModel中。
    功能:根据广告当前状态(通过GetAdsCurrentState获取),判断广告开始和结束时间是否可编辑。
    逻辑:
    对于正在进行的广告(adsOngoingStatusForInvalidTime),只能编辑结束时间,且必须满足CheckCreateAdsTimeIsValid条件。
    对于即将开始的广告(adsUpcomingStatusForInvalidTime),开始和结束时间都可编辑,但开始时间不能早于今天,且必须满足CheckCreateAdsTimeIsValid条件。
    ValidateKeywordListAndSetAdsModel
    此方法验证关键词列表是否符合长度要求,并将其设置到AdsBizModel中。
    功能:只对非推荐类广告进行验证,检查关键词列表data.TargetKeywordList的长度是否超过maxLenTargetKeywordList。
    逻辑:
    如果关键词列表过长,则记录错误信息,将错误信息添加到FailAdsDataList,并返回错误。
    如果关键词列表长度合适且非空,则更新adsModel.TargetKeywordList,关键词之间以逗号,分隔。
    公共逻辑
    所有方法都会在验证失败时,将错误信息添加到FailAdsDataList,并使用metric_reporter报告错误。
    成功时,将相应的字段设置到adsModel中。
    这些方法共同构成了批量更新广告时对输入数据的验证和模型设置的逻辑,确保了数据的完整性和业务规则的遵守。

  11. 仅仅在搜索广告设置关键词列表
  12. 仅仅在cpc广告时 设置目标用户恶化订单类型及其附加价格
  13. alidateLocationGroupAndSetAdsModel
    此方法验证广告的位置组是否有效,并将其设置到AdsBizModel中。
    功能:如果data.AdsLocationGroup不为空,调用checkUpdateAdsLocationGroup方法检查位置组的有效性。
    逻辑:
    如果检查失败,则记录错误信息,将错误信息添加到FailAdsDataList,并返回错误。
    如果检查成功,将位置组设置到adsModel.AdsLocationGroup,元素间以逗号,分隔。
    ValidateAdsStatusAndSetAdsModel
    此方法验证广告状态是否有效,并将其设置到AdsBizModel中。
    功能:根据data.AdsOperationStatus更新广告状态,或者根据当前时间和广告的开始/结束时间自动计算状态。
    逻辑:
    如果data.AdsOperationStatus为停止操作,则直接设置adsModel.AdsStatus为停止状态。
    否则,根据当前时间动态计算广告状态。
    如果data.AdsOperationStatus无效,则记录错误信息,将错误信息添加到FailAdsDataList,并返回错误。
    ValidateAutoKeywordAndSetAdsModel
    此方法验证自动关键词模式是否有效,并将其设置到AdsBizModel中。
    功能:验证关键词模式字符串,确保其对于特定类型的广告是有效的。
    逻辑:
    如果广告类型是推荐类,则直接返回,无需验证。
    验证关键词模式是否存在于AdsAutoKeywordModeMap中,如果不存在,则记录错误信息,将错误信息添加到FailAdsDataList,并返回错误。
    检查是否在推荐类广告上设置了自动关键词模式,如果是,则返回错误。
    确保在手动模式下,至少有一组关键词存在,否则返回错误。
    ValidateStoreIdsAndSetAdsModel
    此方法验证商店ID列表是否有效,并将其设置到AdsBizModel中。
    功能:如果data.StoreIds不为空,调用GetStoreIdList方法检查商店ID的有效性。
    逻辑:
    如果检查失败,则记录错误信息,将错误信息添加到FailAdsDataList,并返回错误。
    如果检查成功,将商店ID列表设置到adsModel.StoreIDList,元素间以逗号,分隔。
    ValidateTargetUserABSInfo 和 ValidateTargetOrderInfo
    这两个方法分别验证目标用户和目标订单信息是否有效,并将其设置到AdsBizModel中。
    功能:仅当广告成本类型为CPC时生效,设置目标用户或订单类型及其附加价格。
    逻辑:
    如果data.TargetUserABSType或data.TargetOrderType不为空,设置相关字段。
    如果附加价格未设置,则使用默认值。
    公共逻辑
    所有方法都会在验证失败时,将错误信息添加到FailAdsDataList,并使用metric_reporter报告错误。
    成功时,将相应的字段设置到adsModel中。

  14. 基本竞价价格是cpc价格的十倍一下 不低于cpc价格
  15. 只有在开启了增强竞价模式的情况下 最大竞价价格才会生效 且不超过基本竞价的十倍

    ValidateTargetCategoryList
    此方法用于验证和设置目标分类列表。
    功能:如果广告的成本类型为CPC并且data.TargetCategoryList不为空,则将分类列表设置到adsModel中,并检查TargetCategoryAddPrice是否已设置,如果没有,则使用默认值。
    逻辑:
    将data.TargetCategoryList转换为逗号分隔的字符串并赋值给adsModel.TargetCategoryList。
    如果TargetCategoryAddPrice未设置,则使用AdsTargetPriceMap中的默认值。
    ValidateEditAdsCol
    此方法用于调用一系列验证和设置广告模型的方法。
    功能:遍历一个包含多个验证方法的数组,并依次调用这些方法来验证和设置adsModel。
    逻辑:
    定义了一个匿名数组funcArr,其中包含了所有需要调用的验证方法。
    遍历这个数组,对每一个方法进行调用,如果有任何方法返回错误,则立即返回该错误。
    SetBidPriceInfoForUpdateAdsData
    此方法用于设置和验证广告的竞价价格信息。
    功能:处理增强竞价模式、基本竞价价格、最大竞价价格的设置,并确保价格符合业务规则。
    逻辑:
    如果广告成本类型为CPS,则直接返回false。
    如果data.EnhancedBidPriceStr不为空,验证增强竞价模式是否有效,如果不有效,则记录错误并返回true。
    如果data.BidPriceStr不为空,尝试将其转换为浮点数,如果转换失败,则记录错误并返回true;否则,根据AmountConversionValue转换为整数形式。
    对于最大竞价价格,只有在增强竞价模式开启时才会进行验证,确保它大于基本竞价价格且不超过基本竞价价格的10倍。
    检查基本竞价价格是否在允许范围内,即不低于CPC价格且不高于CPC价格的10倍。
    如果最大竞价价格设置且小于等于基本竞价价格,或者超过基本竞价价格的10倍,则记录错误并返回true。
    公共逻辑
    所有方法都遵循相同的错误处理模式:如果发现任何问题,会将错误信息追加到FailAdsDataList中,并可能返回true或具体的错误。
    在处理价格时,使用了ParseStringToFloatWithDecimal函数来解析字符串为浮点数,并使用AmountConversionValue来转换价格单位。
    这些方法共同确保了广告模型中的价格信息和其他关键属性在批量更新前的正确性和合规性。

  16. 竞价是怎么竞  商店的每日预算是否能支付竞价和最大竞价
  17. 函数 HandleBatchUpdateAdsBidPrice
    这个函数负责处理竞价价格的更新,它接收一系列参数:
    data: 包含待更新的广告数据。
    adsModel: 广告业务模型。
    bidPriceInfos: 当前的竞价信息列表。
    budgetInfoMap: 商店每日预算的信息映射。
    hasInvalidBudget: 是否存在无效的预算情况。
    函数首先设置默认的竞价信息,然后根据传入的bidPriceInfos列表来覆盖默认信息。
    接着,如果存在无效的预算并且bidPriceInfos不为空,那么会检查商店的每日预算是否足够支付竞价价格或最大竞价价格。如果预算不足,则记录错误信息,并返回ErrParamsInvalid错误。

  18. 匹配更新广告的业务逻辑:

    这段代码是针对广告批量更新操作的业务逻辑处理,主要涉及以下几个关键步骤:
    获取广告模型:
    遍历b.UpdateAdsDataList中的每一项数据,尝试从数据库中获取对应的广告模型adsModels。
    如果获取失败或未找到模型,记录错误并跳过该数据项。
    广告模型验证:
    检查广告是否允许编辑,例如,由合作伙伴应用或广告招募创建的广告不允许编辑。
    调用ValidateEditAdsCol方法验证并设置adsModel的部分字段。
    解析商店ID:
    将adsModel.StoreIDList字符串转换为storeIDList整型切片。
    使用BatchMGetStoreInfo方法获取这些商店的详细信息。
    处理商店和商家信息:
    创建一个merchantSet来存储所有涉及的商家ID。
    构建storeMap,将商店ID映射到具体的商店信息。
    更新adsModel.MerchantIDList以反映处理后的商家ID列表。
    查询和处理预算信息:
    获取广告已创建的商店预算信息budgetInfos。
    分析哪些商店ID需要添加、删除或已存在。
    计算总预算,同时处理预算的合法性检查,包括但不限于欠款状态、预算范围等。
    构建预算模型:
    根据预算信息构建新增、更新和删除的预算模型addBudgetModels、updateBudgetModels、deleteBudgetModels。
    处理CPC成本类型的竞价信息:
    如果广告的成本类型是CPC,获取竞价信息bidPriceInfos。
    调用HandleBatchUpdateAdsBidPrice处理竞价价格的更新。
    构建更新竞价价格所需的模型。
    执行数据库操作:
    根据成本类型,调用相应的数据库更新方法,更新广告模型和其他相关数据。
    如果有预算相关的警告,生成额外的信息并记录。
    日志记录和错误报告:
    使用logkit记录过程中的各种信息和错误。
    使用metric_reporter报告批量文件错误。
    这个函数的核心在于管理和更新广告及其相关联的预算和竞价信息,同时确保数据的完整性和一致性,避免因预算不足或不合理而产生的问题。在处理过程中,它还负责记录详细的日志,便于后续的审计和故障排查。

  19. 后续处理

    UploadCreateAdsResult
    功能: 当批量创建广告完成时,此方法将结果(成功、失败和预算相关数据)写入CSV格式的字节缓冲区,并将其上传到S3存储桶。
    流程:
    如果存在失败的数据、成功的数据或预算数据,则使用csv.NewWriter创建一个CSV写入器。
    将头部信息和额外列标题追加到第一行。
    循环写入失败、预算和成功数据的行。
    调用generateUpdateTask生成文件的哈希值,并将其保存在b.ResultFileHash中。
    如果上传失败,记录错误并返回错误。
    UploadUpdateAdsResult
    功能: 当批量更新广告完成时,上传失败结果到S3存储桶。
    流程:
    如果存在失败数据,则创建CSV写入器。
    根据操作类型(创建或更新)确定附加的列标题。
    写入失败数据的行。
    生成文件哈希值并保存。
    如果上传失败,记录错误并返回错误。
    UploadResult
    功能: 根据请求的操作类型(创建或更新),调用相应的上传结果方法。
    UpdateFinish
    功能: 更新任务的状态为完成,并将结果文件的哈希值和文件名保存到数据库。
    流程:
    设置b.Model.Status为完成状态。
    如果有结果文件哈希值,更新模型的失败文件哈希和文件名。
    调用massLogDao.Update更新数据库中的记录。
    如果更新失败,记录错误并返回错误。
    GetRunLock 和 ReleaseLock
    功能: 这两个方法用于锁定机制,但在这个实现中它们总是返回true,意味着没有实际的锁管理发生。
    UpdateFailed
    功能: 当任务失败时,调用UpdateAsyncFileTaskToMassLog方法更新异步文件任务的状态到数据库中的MassLog表,通常用于记录失败的任务信息。
    整体来看,这些方法共同处理了批量广告操作的后处理阶段,包括结果数据的组织、上传、数据库状态更新和错误处理。这确保了系统能够正确地反馈给用户关于批量操作的结果,并且能够持久化这些结果以便后续分析或审计。

  20. 更新数据时的过渡字段

    在Go语言中,结构体中的“过渡字段”通常是指那些在数据转换或处理过程中暂时使用的字段,它们的存在是为了简化代码逻辑或数据转换过程。这些字段往往不会被持久化,也不会在最终的数据模型中保留,而是仅在数据处理的某个阶段使用。
    在你给出的BatchUpdateAdsData结构体中,以下字段被视为过渡字段:
    BidPriceStr
    MaxBidPriceStr
    EnhancedBidPriceStr
    KeywordsModeStr
    这些字段的用途可能是为了在读取或写入数据时进行类型转换。例如,当从CSV文件中读取数据时,所有的数据最初都是字符串形式,因此需要将数字类型的字段(如BidPrice)从字符串转换为整数。相反,在写入数据时,可能需要将整数类型的字段转换回字符串以便正确输出。
    具体来说:
    BidPriceStr, MaxBidPriceStr, EnhancedBidPriceStr 可能用于存储从CSV读取的原始字符串值,之后在处理过程中被转换成整数类型(int64或int32)。
    KeywordsModeStr 可能用于存储关键词模式的字符串表示,在处理时会被转换成相应的枚举或数值类型。
    这些过渡字段有助于确保数据转换的正确性,避免在读取和写入数据时出现类型不匹配的问题。在处理完数据后,这些字段通常会被清除或不再使用,因为它们只在数据转换的上下文中具有意义。
    总之,过渡字段在数据处理流程中起到桥梁的作用,使得数据可以从一种形式(如字符串)转换到另一种形式(如整数),从而满足业务逻辑的需求。

  21. 类型映射到底是用在什么地方?固定的选项枚举值! 根据分隔符分隔是用在什么地方  前端传过来列表,我们自己分隔后校验!

     

     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/776494.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python cv2库 批量压缩图片jpg、png 脚本

效果图: (1)压缩前:10.9M (2) 压缩后:1.46M(3) 直接上代码 ,# 设置压缩质量 0-100 ,0最差,100最好compression_params = [int(cv2.IMWRITE_JPEG_QUALITY), 50]import cv2 import osPATH = rF:\aa_jpg # 压缩该路径下的图片,压缩后会保存到原路径def resizeImage(fil…

染色法判定二分图

染色法判定二分图 二分图: 1.当且仅当图中无奇数环 2.能且只能用两种颜色染色#include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N = 100010, M = 200010;int n, m; int h[N], e[M], ne[M], idx; int color[N];//…

一个纯前端实现的头像生成网站

vue-color-avatar —— 一款基于 Vite + Vue3 实现的矢量风格头像的生成器,你可以搭配不同的素材组件,生成自己的个性化头像。大家好,我是 Java陈序员。 今天,给大家介绍一个纯前端实现的头像生成网站。关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超2…

CSS + v-bind

学而不思则罔,思而不学则殆!

SillyTavern搭建

github地址 https://github.com/SillyTavern/SillyTavern/tree/release SillyTavern 是一个可以安装在电脑(和安卓手机)上的用户界面,让您可以与文本生成的人工智能互动,并与您或社区创建的角色聊天/玩角色扮演游戏。环境查看 系统环境# cat /etc/redhat-release Rocky Li…

BUUCTF [SCTF2019]babyre

记录一下脱花指令的过程 扔进ida中观察,发现有红字报错。像这种肯定是花指令用来干扰程序的,将loc_98Fnop掉即可,大概有四处这样的花指令 在最后发现一段smc,因为没有解密函数,因此推测直接解密即可按d全部转化为数据,然后再按c转化为代码又出现一个花指令这个nop明显是干…

Windows下下载编译boost库

下载boost库 链接:https://www.boost.org/下载最新的版本即可,因为最新的版本是兼容以前版本的。 编译boost库 下载后解压如果没有b2.exe就先双击一下booststrap.bat自动生成文件。然后在此目录打开cmd; 执行命令: .\b2.exe install --toolset=msvc-14.3 --build-type=comp…

生物实验室设备文件采集如何才能质量和效率双管齐下?

生物实验室的设备文件采集是实验室运营、科研活动和数据科学实践应用中不可或缺的一环。通过数据采集,实验室可以优化资源配置、提高实验结果的准确性和可靠性、支持科研水平的提升,并确保数据的安全性和可追溯性。因此,实验室应高度重视设备数据采集工作,并不断优化数据采…

传输限速的方案那么多,却都没有这一个全面!

在很多行业和领域,传输速度并不是无限制地越快越好,反而基于很多原因,在很多情况下,需要对传输的速度进行限制,原因如下: 带宽分配:在有限的网络资源下,对传输进行限速可以确保关键应用和服务的优先级,避免某些应用或用户过度占用带宽资源,影响其他用户或应用的正常使…

用了组合式 (Composition) API 后代码变得更乱了,怎么办?

组合式 (Composition) API 的一大特点是“非常灵活”,但也因为非常灵活,也可能导致我们的代码变得愈发混乱,最终到达无法维护的地步。前言 组合式 (Composition) API 的一大特点是“非常灵活”,但也因为非常灵活,每个开发都有自己的想法。加上项目的持续迭代导致我们的代码…

利用开源库Triangle对二维边界点数组进行三角化

将Triangle的参数开关设置具象化前言 将我几年前还是“小小小白”时(目前将自己定义为“小白”),编译Triangle库时的场景记录了下来,那时候算是才开始接触开源项目,很多东西都不懂,本着一颗不会不懂就瞎折腾的精神,一路走来,之前在cnblog自己的另一个账号也记录过,现在…

postman参数化

生命不断追求不止