فهرست منبع

添加不同出价方式参数

songyh 4 سال پیش
والد
کامیت
7cc0ac657c

+ 2 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/AiBytedanceAdDplinkInfo.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -28,6 +29,7 @@ public class AiBytedanceAdDplinkInfo {
 	private Long adId;
 	/**accountId*/
 	private Long accountId;
+	private BigDecimal adbid;
 	/**strategyId*/
 	private Long strategyId;
 	/**createTime*/

+ 58 - 99
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAdvertiserStrategyServiceImpl.java

@@ -6,11 +6,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.base.Joiner;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.Transformer;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.bytedance.advertise.dockapi.MarketingService;
@@ -36,6 +32,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.transaction.Transactional;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -77,7 +74,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
     public Long createCreative(AiBytedanceAdvertiserStrategy strategy, Integer createType, Long videoCnt, String openUrl) {
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(strategy.getAccountId()+"");
         if (null == token) {
-            log.info("token获取失败=>accountId:{}", token.getAccountId());
+            log.info("token获取失败=>accountId:{}", strategy.getAccountId());
             return videoCnt;
         }
 
@@ -97,11 +94,6 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             log.info("获取视频素材为空=>accountId:{}", token.getAccountId());
             return videoCnt;
         }
-        /**
-         * 1:创建组
-         * 查询当前账户排列到的dp链接标识号
-         */
-        //根据dpLink获取组名称
 
         for (ByteDanceVideoInfo video:videoInfos) {
             //1:过滤掉所有不存在于视频库的数据
@@ -109,17 +101,21 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             if(null == materialInfo){
                 continue;
             }
+            //过滤掉所有未绑定文案的数据
             List<BytedanceVideoSlogenInfo>slogenInfos = slogenInfoService.listByParams(video.getSignature(),1);
             if(null == slogenInfos||slogenInfos.isEmpty()){
                 continue;
             }
-            /**
-             * 2:创建计划
-             */
+            // 2:创建计划
             Long dpIndex ;
             AiBytedanceAdDplinkInfo adDplinkInfo = adDplinkInfoService.getlatestDpLinkInfo(strategy.getId(),strategy.getAccountId(),1);
             if(null == adDplinkInfo){
                 adDplinkInfo = new AiBytedanceAdDplinkInfo();
+                if("FIX".equalsIgnoreCase(strategy.getAdBidCreateType())){
+                    adDplinkInfo.setAdbid(strategy.getAdBid());
+                }else{
+                    adDplinkInfo.setAdbid(strategy.getAdMinBid());
+                }
                 adDplinkInfo.setDpLinkIndex(strategy.getDpLinkStartIndex());
             }else{
                 adDplinkInfo.setId(null);
@@ -138,8 +134,10 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             strategy.setAdOpenUrl(openUrl.replace("{{dp链接下标}}",dpIndex.toString()));
             String dplinkCode = StringUtils.getParamFromUrl(strategy.getAdOpenUrl(),"bc_fl_src");
             String adName = getAdName(strategy,dplinkCode,video);
-            System.out.println(adName);
-            JSONObject adParams = getAdParams(strategy,adName,campaignId);
+            //计算本次出价
+            BigDecimal currentBid = StringUtils.getRandomAdCpaBid(strategy.getAdBidCreateType(),strategy.getAdMaxBid(),strategy.getAdMinBid(),strategy.getAdStepBid(),adDplinkInfo.getAdbid());
+            adDplinkInfo.setAdbid(currentBid);
+            JSONObject adParams = getAdParams(strategy,adName,campaignId,currentBid);
             Long adId = createAdInfo(token,strategy,adParams);
             if(null == adId){
                 continue;
@@ -175,11 +173,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(null!=inventoryType&&!"".equals(inventoryType)){
             String[] inventoryTypeString = inventoryType.split(",");
             if(inventoryTypeString.length>0){
-              JSONArray inventoryTypeArray = new JSONArray();
-              for(int i=0;i<inventoryTypeString.length;i++){
-                    inventoryTypeArray.add(inventoryTypeString[i]);
-              }
-              params.put("inventory_type",inventoryTypeArray);
+              params.put("inventory_type",inventoryType);
             }
         }
         Integer smartInventory = strategy.getCreativeSmartInventory();
@@ -298,7 +292,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(!Check.isNull(imageCode)){
             //1:根据imageCode获取图片id
             JSONObject promotionCard = new JSONObject();
-            String iconImageId = getBytedanceImageIdByCode(imageCode,strategy,token);
+            String iconImageId = getBytedanceImageIdByCode(imageCode,token);
             if(!Check.isNull(iconImageId)){
                 promotionCard.put("product_image_id",iconImageId);
             }
@@ -306,11 +300,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             if(!Check.isNull(productSellingPoints)){
                 String[] pointString = productSellingPoints.split(",");
                 if(pointString.length>0){
-                    JSONArray pointArray = new JSONArray();
-                    for(int i=0;i<pointString.length;i++){
-                        pointArray.add(pointString[i]);
-                    }
-                    promotionCard.put("product_selling_points",pointArray);
+                    promotionCard.put("product_selling_points",pointString);
                 }
             }
             String productDescription = strategy.getCreativeProductDescription();
@@ -371,7 +361,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
 
     }
 
-    private String getBytedanceImageIdByCode(String imageCode, AiBytedanceAdvertiserStrategy strategy,CtopOauthToken token) {
+    private String getBytedanceImageIdByCode(String imageCode, CtopOauthToken token) {
         //1:根据code获取图片信息
         BytedanceImageInfo bytedanceImageInfo = bytedanceImageInfoService.getByParams(imageCode);
         if(null!=bytedanceImageInfo){
@@ -408,7 +398,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         return (Long)result.getResult();
     }
 
-    private JSONObject getAdParams(AiBytedanceAdvertiserStrategy strategy, String adName, Long campaignId) {
+    private JSONObject getAdParams(AiBytedanceAdvertiserStrategy strategy, String adName, Long campaignId,BigDecimal lastBid) {
         JSONObject params = new JSONObject();
         //公共参数
         params.put("advertiser_id",strategy.getAccountId());
@@ -458,7 +448,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         }
         if(!Check.isNull(strategy.getAdGamePackageThumbnailId())){
             JSONArray ids = JSON.parseArray(strategy.getAdGamePackageThumbnailId());
-            if(null == ids&&!ids.isEmpty()){
+            if(null != ids&&!ids.isEmpty()){
                 params.put("game_package_thumbnail_ids",ids);
             }
         }
@@ -471,7 +461,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         }
         if(!Check.isNull(strategy.getAdCity())){
             String[] city = strategy.getAdCity().split(",");
-            if(null != city&&city.length>0){
+            if(city.length>0){
                 params.put("city",city);
             }
         }
@@ -572,51 +562,31 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(!Check.isNull(strategy.getAdInterestWords())){
             String[] interestWords = strategy.getAdInterestWords().split(",");
             if(interestWords.length>0){
-                JSONArray interestWordsArray = new JSONArray();
-                for(int i=0;i<interestWords.length;i++){
-                    interestWordsArray.add(interestWords[i]);
-                }
-                params.put("interest_words",interestWordsArray);
+                params.put("interest_words",interestWords);
             }
         }
         if(!Check.isNull(strategy.getAdAwemeFanBehaviors())){
             String[] awemeFanBehaviors = strategy.getAdAwemeFanBehaviors().split(",");
             if(awemeFanBehaviors.length>0){
-                JSONArray awemeFanBehaviorsArray = new JSONArray();
-                for(int i=0;i<awemeFanBehaviors.length;i++){
-                    awemeFanBehaviorsArray.add(awemeFanBehaviors[i]);
-                }
-                params.put("aweme_fan_behaviors",awemeFanBehaviorsArray);
+                params.put("aweme_fan_behaviors",awemeFanBehaviors);
             }
         }
         if(!Check.isNull(strategy.getAdAwemeFanCategories())){
             String[] awemeFanCategories = strategy.getAdAwemeFanCategories().split(",");
             if(awemeFanCategories.length>0){
-                JSONArray awemeFanCategoriesArray = new JSONArray();
-                for(int i=0;i<awemeFanCategories.length;i++){
-                    awemeFanCategoriesArray.add(awemeFanCategories[i]);
-                }
-                params.put("aweme_fan_categories",awemeFanCategoriesArray);
+                params.put("aweme_fan_categories",awemeFanCategories);
             }
         }
         if(!Check.isNull(strategy.getAdAwemeFanAccounts())){
             String[] awemeFanAccount = strategy.getAdAwemeFanAccounts().split(",");
             if(awemeFanAccount.length>0){
-                JSONArray awemeFanAccountArray = new JSONArray();
-                for(int i=0;i<awemeFanAccount.length;i++){
-                    awemeFanAccountArray.add(awemeFanAccount[i]);
-                }
-                params.put("aweme_fan_accounts",awemeFanAccountArray);
+                params.put("aweme_fan_accounts",awemeFanAccount);
             }
         }
         if(!Check.isNull(strategy.getAdAwemeFansNumbers())){
             String[] awemeFansNumbers = strategy.getAdAwemeFansNumbers().split(",");
             if(awemeFansNumbers.length>0){
-                JSONArray awemeFansNumbersArray = new JSONArray();
-                for(int i=0;i<awemeFansNumbers.length;i++){
-                    awemeFansNumbersArray.add(awemeFansNumbers[i]);
-                }
-                params.put("aweme_fans_numbers",awemeFansNumbersArray);
+                params.put("aweme_fans_numbers",awemeFansNumbers);
             }
         }
         if(!Check.isNull(strategy.getAdFilterAwemeAbnormalActive())){
@@ -634,31 +604,19 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(!Check.isNull(strategy.getAdFlowPackage())){
             String[] flowPackage = strategy.getAdFlowPackage().split(",");
             if(flowPackage.length>0){
-                JSONArray flowPackageArray = new JSONArray();
-                for(int i=0;i<flowPackage.length;i++){
-                    flowPackageArray.add(flowPackage[i]);
-                }
-                params.put("flow_package",flowPackageArray);
+                params.put("flow_package",flowPackage);
             }
         }
         if(!Check.isNull(strategy.getAdExcludeFlowPackage())){
             String[] excludeFlowPackage = strategy.getAdExcludeFlowPackage().split(",");
             if(excludeFlowPackage.length>0){
-                JSONArray excludeFlowPackageArray = new JSONArray();
-                for(int i=0;i<excludeFlowPackage.length;i++){
-                    excludeFlowPackageArray.add(excludeFlowPackage[i]);
-                }
-                params.put("exclude_flow_package",excludeFlowPackageArray);
+                params.put("exclude_flow_package",excludeFlowPackage);
             }
         }
         if(!Check.isNull(strategy.getAdPlatform())){
             String[] platform = strategy.getAdPlatform().split(",");
             if(platform.length>0){
-                JSONArray platformArray = new JSONArray();
-                for(int i=0;i<platform.length;i++){
-                    platformArray.add(platform[i]);
-                }
-                params.put("platform",platformArray);
+                params.put("platform",platform);
             }
         }
 
@@ -802,9 +760,8 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(!Check.isNull(strategy.getAdPricing())){
             params.put("pricing",strategy.getAdPricing());
         }
-        if(!Check.isNull(strategy.getAdBid())){
-            params.put("bid",strategy.getAdBid());
-        }
+        BigDecimal bid = StringUtils.getRandomAdCpaBid(strategy.getAdBidCreateType(),strategy.getAdMaxBid(),strategy.getAdMinBid(),strategy.getAdStepBid(),lastBid);
+        params.put("bid",bid);
         if(!Check.isNull(strategy.getAdCpaBid())){
             params.put("cpa_bid",strategy.getAdCpaBid());
         }
@@ -875,7 +832,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if(null!=strategy.getCampaignBudgetMode()&& "BUDGET_MODE_DAY".equals(strategy.getCampaignBudgetMode())){
             campaignParam.put("budget",strategy.getCampaignBudget());
         }
-        if(!Check.isNull(strategy.getCampaignDeliveryRelatedNum())){
+        if(null != strategy.getCampaignDeliveryRelatedNum()||!"".equals(strategy.getCampaignDeliveryRelatedNum().trim())){
             campaignParam.put("delivery_related_num",strategy.getCampaignDeliveryRelatedNum());
         }
         //创建组
@@ -944,7 +901,6 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         if (org.apache.commons.lang3.StringUtils.equals(state,"1")){
             // 修改 账户下 状态 为关闭
             aiBytedanceAdvertiserStrategyMapper.updStaById(id,state);
-
         }
 
         return Result.successMsg("状态修改成功---》"+("0".equals(state) ? "开" : "关"), null);
@@ -988,8 +944,8 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
     public Result getIndustryList(String accountId, String type) throws Exception {
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
         if (null == token) {
-            log.info("token获取失败=>accountId:{}", token.getAccountId());
-            return Result.error("token获取失败====>>>>accountId:"+token.getAccountId());
+            log.info("token获取失败=>accountId:{}", accountId);
+            return Result.error("token获取失败====>>>>accountId:"+accountId);
         }
         // api 获取行业列表
         Result listResult = marketingService.getToolIndustryList(token,type);
@@ -1025,7 +981,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
         List<Map<String,Object>> mapList = new ArrayList<>();
         for (IndustryVo vo : allList) {
             if (parentId.equals(vo.getPId())){
-                Map<String,Object> map = new HashMap();
+                Map<String,Object> map = new HashMap<>();
                 map.put("industryId", vo.getIndustry_id());
                 map.put("industryName", vo.getIndustry_name());
                 map.put("level", vo.getLevel());
@@ -1042,26 +998,26 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
 
     /**
      *
-     * @description: 获取广告组
+     * 获取广告组
      *
      * @param accountId 广告主id
      * @param adGroupSearchVoList
      * @param pageNo
      * @param pageSize
-     * @return: org.jeecg.common.api.vo.Result
-     * @author: zianY
+     * @return org.jeecg.common.api.vo.Result
+     * @author zianY
      */
     @Override
     public Result getCampaignGroup(String accountId, List<AdGroupSearchVo> adGroupSearchVoList, Integer pageNo, Integer pageSize) {
 
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
         if (null == token) {
-            log.info("token获取失败=>accountId:{}", token.getAccountId());
-            return Result.error("token获取失败====>>>>accountId:"+token.getAccountId());
+            log.info("token获取失败=>accountId:{}", accountId);
+            return Result.error("token获取失败====>>>>accountId:"+accountId);
         }
         // 获取广告组
         Result industryList = marketingService.getCampaignGroupList(token,accountId,null,pageNo,pageSize);
-        log.error("获取广告组=======>>>>>>>>>>>", industryList.getResult());
+        log.error("获取广告组=======>>>>>>>>>>>{}", industryList.getResult());
         return Result.successMsg("获取广告组成功。", industryList.getResult());
     }
 
@@ -1069,10 +1025,10 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
 
     /**
      *
-     * @description 获取广告计划
+     * 获取广告计划
      *
      * @param accountId 广告主id
-     * @param adGroupSearchVoList
+     * @param adGroupSearchVoList 计划参数
      * @param pageNo 页数
      * @param pageSize 每页条数
      * @return org.jeecg.common.api.vo.Result
@@ -1094,28 +1050,28 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
 
     /**
      *
-     * @description: 获取创意详细信息
+     * 获取创意详细信息
      *
      * @param accountId 广告主id
      * @param adId 计划id
-     * @return: org.jeecg.common.api.vo.Result
-     * @author: zianY
+     * @return org.jeecg.common.api.vo.Result
+     * @author zianY
      */
     @Override
     public Result creativeReadInfo(String accountId, String adId) {
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
         if (null == token) {
-            log.info("token获取失败=>accountId:{}", token.getAccountId());
-            return Result.error("token获取失败====>>>>accountId:"+token.getAccountId());
+            log.info("token获取失败=>accountId:{}", accountId);
+            return Result.error("token获取失败====>>>>accountId:"+accountId);
         }
         // 获取 创意详细信息
         Result industryList = marketingService.creativeRead(token,accountId,adId);
-        log.error("获取创意详细信息=======>>>>>>>>>>>", industryList.getResult());
+        log.error("获取创意详细信息=======>>>>>>>>>>>{}", industryList.getResult());
         return Result.successMsg("获取创意详细信息成功。", industryList.getResult());
     }
     /**
      *
-     * @description: 修改 广告 组-计划-创意
+     * 修改 广告 组-计划-创意
      *
      * @param strategy
      * @return: org.jeecg.common.api.vo.Result
@@ -1126,8 +1082,8 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
 
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(strategy.getAccountId()+"");
         if (null == token) {
-            log.info("token获取失败=>accountId:{}", token.getAccountId());
-            return Result.error("token获取失败====>>>>accountId:"+token.getAccountId());
+            log.info("token获取失败=>accountId:{}", strategy.getAccountId());
+            return Result.error("token获取失败====>>>>accountId:"+strategy.getAccountId());
         }
         // 1:修改广告组
         Result resultCampaign = marketingService.updateCampaign(token,
@@ -1247,15 +1203,16 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
 
     /**
      *
-     * @description:获取行动号召
+     * 获取行动号召
      *
      * @param accountId
      * @param landingType
      * @param advancedCreativeType
-     * @return: org.jeecg.common.api.vo.Result
-     * @author: zianY
+     * @return org.jeecg.common.api.vo.Result
+     * @author zianY
      */
-    public Result getAdActionText(String accountId,String landingType,String advancedCreativeType) throws Exception{
+    @Override
+    public Result getAdActionText(String accountId, String landingType, String advancedCreativeType) throws Exception{
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
        return marketingService.getActionText(token,landingType,advancedCreativeType);
     }
@@ -1274,6 +1231,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
      * @return: org.jeecg.common.api.vo.Result
      * @author: zianY
      */
+    @Override
     public Result getAdAudiencePackage(String accountId, String landingType, String deliveryRange){
        CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
         //查询定向包信息
@@ -1306,6 +1264,7 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
      * @return: org.jeecg.common.api.vo.Result
      * @author: zianY
      */
+    @Override
     public Result getDMPCustomAudience(String accountId){
 
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);

+ 24 - 49
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/utils/StringUtils.java

@@ -1,15 +1,10 @@
 package org.jeecg.modules.bytedance.common.utils;
 
-import org.checkerframework.checker.units.qual.min;
-
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Random;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -183,60 +178,40 @@ public class StringUtils {
 
     /**
      *
-     * @description: 获取目标转化出价
+     * 获取目标转化出价
      *
      * @param type 智能投放计划创建出价方式
      *             固定出价 FIX ;
      *             随机出价 RAND;
      *             阶梯出价 STEP
-     * @param maxBigDecimal 转化出价最da
-     * @param minBigDecimal 转化出价最小值
-     * @param stepBigDecimal 浮动间隔
-     * @return: java.lang.Double
-     * @author: zianY
+     * @param maxBid 转化出价最大
+     * @param minBid 转化出价最小值
+     * @param stepBid 浮动间隔
+     * @param lastBid 上次创建计划出价
+     * @author zianY
      */
-    public static Double  getRandomAdCpaBid(String type,BigDecimal maxBigDecimal,BigDecimal minBigDecimal,BigDecimal stepBigDecimal){
-        double max = maxBigDecimal.doubleValue();
-        double min = minBigDecimal.doubleValue();
-        double step = stepBigDecimal.doubleValue();
-        double result = 0d;
-        //当出价为随机出价时,可以随机选择出价范围内的一个值当作出价
-        if ("RAND".equalsIgnoreCase(type)){
-            result = min + (Math.random() * (max - min));
-            result = (double) Math.round(result * 100) / 100;
+    public static BigDecimal  getRandomAdCpaBid(String type,BigDecimal maxBid,BigDecimal minBid,BigDecimal stepBid,BigDecimal lastBid){
+        BigDecimal reuslt = null;
+        //固定出价
+        if("FIX".equalsIgnoreCase(type)){
+            reuslt = lastBid.setScale(2,RoundingMode.DOWN);
+        }
+        //随机出价
+        if("RAND".equalsIgnoreCase(type)){
+            double max = maxBid.doubleValue();
+            double min = minBid.doubleValue();
+            double randResult = min + (Math.random() * (max - min));
+            randResult = (double) Math.round(randResult * 100) / 100;
+            reuslt = new BigDecimal(randResult).setScale(2, RoundingMode.DOWN);
         }
         //当出价为阶梯出价时,创建的出价为 最低出价 + N * 浮动间隔 < 最高出价
         if ("STEP".equalsIgnoreCase(type)){
-            int r = (int) (Math.random()*(max-min)+min);
-            result = min + r * step;
-            if (result > max){
-                return getRandomAdCpaBid(type,maxBigDecimal,minBigDecimal,stepBigDecimal);
+            if(lastBid.add(stepBid).compareTo(maxBid)>0){
+                reuslt = minBid.setScale(2, RoundingMode.DOWN);
+            }else{
+                reuslt = lastBid.add(stepBid).setScale(2, RoundingMode.DOWN);
             }
-            //System.out.println("随机数-----"+r+"结果====="+min+"+"+r+"x"+step+"="+result);
-        }
-        BigDecimal bg = new BigDecimal(result).setScale(2, RoundingMode.DOWN);
-        return bg.doubleValue();
-
-
-    }
-
-
-
-
-
-    public static void main(String[] args) {
-        BigDecimal max = new BigDecimal(6.89);
-        BigDecimal min = new BigDecimal(0.12);
-        BigDecimal step = new BigDecimal(1.2);
-
-       for (int i = 0 ;i< 100 ;i++){
-           System.out.println(getRandomAdCpaBid("RAND",max,min,step));
         }
-
-
-
+        return reuslt;
     }
-
-
-
 }