任务描述

1. 问题分析

http://aida.zhcxkj.com/instant/sales/ad

 虎鲸-及时销量首页 广告费加载数据慢:


获取广告费方法--执行步骤:

1. 获取skulist,ordersourcelist 集合,需5-10秒

2. 获取广告费:根据查询时间段从skulist,ordersourcelist

里计算广告费用GetCampFree(), 循环skulist20万记录,每次5000计算广告费,串行需40次计算完成:40*1.5=60秒

3. 根据2的结果集做业务处理:币种转换,费率计算,广告费量计算等,3秒



2. 解决方案:

优化建议:

根据分析发现执行步骤的第2步慢, 将第2步由单线程改为多线程

优化后测试结果对比:速度提升了10倍 -20倍


st
"st01获取数据豪秒=8521;st02单线程豪秒=150023;st03多线程豪秒=7315;
st04数据处理时间豪秒=3767"
adresultList.Count
9810
adresultList2.Count
9810
--------------------------------------------------------------

st
"st01获取数据豪秒=2913;st02单线程豪秒=30589;st03多线程豪秒=3420;
st04数据处理时间豪秒=2899"
adresultList.Count  //单线程返回结果集
9810
adresultList2.Count //多线程返回结果集
9810

2. 解决方案:多线程

第2步骤:获取广告费改为多线程:

       //获取广告费 多线程
        public List<AdvertResult> GetCampFeeTask(int customerId, List<string> OrderSourceSKU, List<int> OrderSourceIDs, DateTime start, DateTime end)
        {
            List<Task> taskList = new List<Task>();
            var cpcApiModel = _cpcApiOption.Value;
            var result = new List<AdvertResult>();
            if (!OrderSourceSKU.Any())
                return result;
            
            int pageSize = 5000;
            //var list = new List<AdvertResult>();
            for (int i = 0; i*5000 <= OrderSourceSKU.Count; i++)
            {
                try
                {
                    if (taskList.Count(t => t.Status != TaskStatus.RanToCompletion) >= 20)
                    {
                        Task.WaitAny(taskList.ToArray());
                        taskList = taskList.Where(t => t.Status != TaskStatus.RanToCompletion).ToList();
                    }

                    int k = i;
                    int skipNum = k * pageSize;

                    taskList.Add(Task.Run(() =>
                    {
                        try
                        {
                            var ordersourSkus = OrderSourceSKU.Skip(skipNum).Take(pageSize).ToList();
                            if (ordersourSkus.Any())
                            {
                                string jsonData = "{"language": "zh_CN","input": {"CustomerId": " + customerId + ","OrderSourceIds":[" + string.Join(",", OrderSourceIDs) + "],"skus":[" + string.Join(",", ordersourSkus.Select(w => """ + w + """)) + "],"beginTime": "" + start + "","endTime": "" + end + ""}}";
                                var list = CommonCPCRequest<AdvertResult>(jsonData, "api/campaigns/productad/searchsummariesbysku", customerId == 1 ? cpcApiModel.BaseUrl158 : cpcApiModel.BaseUrl);
                                lock (LockSku)
                                {
                                    if (list.Count > 0)
                                    {
                                        result = result.Union(list).ToList();
                                    }
                                  
                                }

                            }
                        }
                        catch(Exception ex)
                        {
                                  //process error              
                        }
                    }));
                }
                catch (Exception ex)
                {
                    _logger.LogError($"即时销量请求广告系统错误:{customerId},{ex.Message}{ex.StackTrace}");
                }

            }

            Task.WaitAll(taskList.ToArray());
            return result;
          
        }


3.原方案:

单线程

 /// <summary>
        /// 获取广告费 单线程
        /// </summary>
        /// <returns></returns>
        public  List<AdvertResult> GetCampFee(int customerId, List<string> OrderSourceSKU, List<int> OrderSourceIDs, DateTime start, DateTime end)
        {
            var cpcApiModel = _cpcApiOption.Value;
            var result= new List<AdvertResult>();
            if (!OrderSourceSKU.Any())
                return result;
            int pageIndex = 0;
            int pageSize = 5000;
            do
            {
                try
                {
                    var ordersourSkus = OrderSourceSKU.Skip(pageIndex * pageSize).Take(pageSize).ToList();
                    if (ordersourSkus.Any())
                    {
                        
                        string jsonData = "{"language": "zh_CN","input": {"CustomerId": " + customerId + ","OrderSourceIds":[" + string.Join(",", OrderSourceIDs) + "],"skus":[" + string.Join(",", ordersourSkus.Select(w => """ + w + """)) + "],"beginTime": "" + start + "","endTime": "" + end + ""}}";
                        var list = CommonCPCRequest<AdvertResult>(jsonData, "api/campaigns/productad/searchsummariesbysku", customerId == 1 ? cpcApiModel.BaseUrl158 : cpcApiModel.BaseUrl);
                        //result = result.Union(list).ToList();
                        if (list.Count > 0)
                        {
                            result = result.Union(list).ToList();
                        }
                    }
                }
                catch (Exception e)
                {
                    _logger.LogError($"即时销量请求广告系统错误:{customerId},{e.Message}{e.StackTrace}");
                }
                pageIndex++;
            } while (OrderSourceSKU.Count >= pageIndex * pageSize);
            return result;
        }


历史记录  
  1. 2022-07-07 15:51:24, 由 陈少军 创建。
  2. 2022-07-07 15:53:55, 由 陈少军 编辑。
    修改了 任务描述,区别为:
    004-
    004+
    005-
    005+ 获取广告费方法--执行步骤:
    006- 获取广告费方法--执行步骤:
    006+ 1.获取skulist,ordersourcelist 集合,需5-10秒
    007- 1.获取skulist,ordersourcelist 集合,需5-10秒
    007+ 2.获取广告费:根据查询时间段从skulist,ordersourcelist
    008- 2.获取广告费:根据查询时间段从skulist,ordersourcelist
    008+ 里计算广告费用GetCampFree(), 循环skulist20万记录,每次5000计算广告费,串行需40次计算完成:40*1.5=60秒
    009- 里计算广告费用GetCampFree(), 循环skulist20万记录,每次5000计算广告费,串行需40次计算完成:40*1.5=60秒
    009+ 3.根据2的结果集做业务处理:币种转换,费率计算,广告费量计算等,3秒
    010- 3.根据2的结果集做业务处理:币种转换,费率计算,广告费量计算等,3秒
    010+
    011-
    011+
    012-
    012+ 2. 解决方案:
    013- 2. 解决方案:
    013+ 优化建议:
    014- 优化建议:
    014+ 根据分析发现执行步骤的第2步慢, 将第2步由单线程改为多线程
    015- 根据分析发现执行步骤的第2步慢, 将第2步由单线程改为多线程
    015+ 优化后测试结果对比:速度提升了10倍 -20倍
    016- 优化后测试结果对比:速度提升了10倍 -20倍
    016+
    017-
    017+ st"st01获取数据豪秒=8521;st02单线程豪秒=150023;st03多线程豪秒=7315;st04数据处理时间豪秒=3767"adresultList.Count9810adresultList2.Count9810--------------------------------------------------------------
    018- st"st01获取数据豪秒=8521;st02单线程豪秒=150023;st03多线程豪秒=7315;st04数据处理时间豪秒=3767"adresultList.Count9810adresultList2.Count9810--------------------------------------------------------------
    018+ st"st01获取数据豪秒=2913;st02单线程豪秒=30589;st03多线程豪秒=3420;st04数据处理时间豪秒=2899"adresultList.Count //单线程返回结果集9810adresultList2.Count//多线程返回结果集9810
    019- st"st01获取数据豪秒=2913;st02单线程豪秒=30589;st03多线程豪秒=3420;st04数据处理时间豪秒=2899"adresultList.Count //单线程返回结果集9810adresultList2.Count//多线程返回结果集9810
    019+ 2. 解决方案:多线程
    020-
    020+ 第2步骤:获取广告费改为多线程:
    021- 2. 解决方案:多线程
    021+ //获取广告费 多线程 public List&lt;AdvertResult&gt; GetCampFeeTask(int customerId, List&lt;string&gt; OrderSourceSKU, List&lt;int&gt; OrderSourceIDs, DateTime start, DateTime end) { List&lt;Task&gt; taskList = new List&lt;Task&gt;(); var cpcApiModel = _cpcApiOption.Value; var result = new List&lt;AdvertResult&gt;(); if (!OrderSourceSKU.Any()) return result; int pageSize = 5000; //var list = new List&lt;AdvertResult&gt;(); for (int i = 0; i*5000 &lt;= OrderSourceSKU.Count; i++) { try { if (taskList.Count(t =&gt; t.Status != TaskStatus.RanToCompletion) &gt;= 20) { Task.WaitAny(taskList.ToArray()); taskList = taskList.Where(t =&gt; t.Status != TaskStatus.RanToCompletion).ToList(); } int k = i; int skipNum = k * pageSize; taskList.Add(Task.Run(() =&gt; { try { var ordersourSkus = OrderSourceSKU.Skip(skipNum).Take(pageSize).ToList(); if (ordersourSkus.Any()) { string jsonData = "{"language": "zh_CN","input": {"CustomerId": " + customerId + ","OrderSourceIds":[" + string.Join(",", OrderSourceIDs) + "],"skus":[" + string.Join(",", ordersourSkus.Select(w =&gt; """ + w + """)) + "],"beginTime": "" + start + "","endTime": "" + end + ""}}"; var list = CommonCPCRequest&lt;AdvertResult&gt;(jsonData, "api/campaigns/productad/searchsummariesbysku", customerId == 1 ? cpcApiModel.BaseUrl158 : cpcApiModel.BaseUrl); lock (LockSku) { if (list.Count &gt; 0) { result = result.Union(list).ToList(); } } } } catch(Exception ex) { //process error } })); } catch (Exception ex) { _logger.LogError($"即时销量请求广告系统错误:{customerId},{ex.Message}{ex.StackTrace}"); } } Task.WaitAll(taskList.ToArray()); return result; }
    022- 第2步骤:获取广告费改为多线程:
    022+
    023- //获取广告费 多线程 public List&lt;AdvertResult&gt; GetCampFeeTask(int customerId, List&lt;string&gt; OrderSourceSKU, List&lt;int&gt; OrderSourceIDs, DateTime start, DateTime end) { List&lt;Task&gt; taskList = new List&lt;Task&gt;(); var cpcApiModel = _cpcApiOption.Value; var result = new List&lt;AdvertResult&gt;(); if (!OrderSourceSKU.Any()) return result; int pageSize = 5000; //var list = new List&lt;AdvertResult&gt;(); for (int i = 0; i*5000 &lt;= OrderSourceSKU.Count; i++) { try { if (taskList.Count(t =&gt; t.Status != TaskStatus.RanToCompletion) &gt;= 20) { Task.WaitAny(taskList.ToArray()); taskList = taskList.Where(t =&gt; t.Status != TaskStatus.RanToCompletion).ToList(); } int k = i; int skipNum = k * pageSize; taskList.Add(Task.Run(() =&gt; { try { var ordersourSkus = OrderSourceSKU.Skip(skipNum).Take(pageSize).ToList(); if (ordersourSkus.Any()) { string jsonData = "{"language": "zh_CN","input": {"CustomerId": " + customerId + ","OrderSourceIds":[" + string.Join(",", OrderSourceIDs) + "],"skus":[" + string.Join(",", ordersourSkus.Select(w =&gt; """ + w + """)) + "],"beginTime": "" + start + "","endTime": "" + end + ""}}"; var list = CommonCPCRequest&lt;AdvertResult&gt;(jsonData, "api/campaigns/productad/searchsummariesbysku", customerId == 1 ? cpcApiModel.BaseUrl158 : cpcApiModel.BaseUrl); lock (LockSku) { if (list.Count &gt; 0) { result = result.Union(list).ToList(); } } } } catch(Exception ex) { //process error } })); } catch (Exception ex) { _logger.LogError($"即时销量请求广告系统错误:{customerId},{ex.Message}{ex.StackTrace}"); } } Task.WaitAll(taskList.ToArray()); return result; }
    023+ 3.原方案:
    024-
    024+ 单线程
    025- 3.原方案:
    025+ /// &lt;summary&gt; /// 获取广告费 单线程 /// &lt;/summary&gt; /// &lt;returns&gt;&lt;/returns&gt; public List&lt;AdvertResult&gt; GetCampFee(int customerId, List&lt;string&gt; OrderSourceSKU, List&lt;int&gt; OrderSourceIDs, DateTime start, DateTime end) { var cpcApiModel = _cpcApiOption.Value; var result= new List&lt;AdvertResult&gt;(); if (!OrderSourceSKU.Any()) return result; int pageIndex = 0; int pageSize = 5000; do { try { var ordersourSkus = OrderSourceSKU.Skip(pageIndex * pageSize).Take(pageSize).ToList(); if (ordersourSkus.Any()) { string jsonData = "{"language": "zh_CN","input": {"CustomerId": " + customerId + ","OrderSourceIds":[" + string.Join(",", OrderSourceIDs) + "],"skus":[" + string.Join(",", ordersourSkus.Select(w =&gt; """ + w + """)) + "],"beginTime": "" + start + "","endTime": "" + end + ""}}"; var list = CommonCPCRequest&lt;AdvertResult&gt;(jsonData, "api/campaigns/productad/searchsummariesbysku", customerId == 1 ? cpcApiModel.BaseUrl158 : cpcApiModel.BaseUrl); //result = result.Union(list).ToList(); if (list.Count &gt; 0) { result = result.Union(list).ToList(); } } } catch (Exception e) { _logger.LogError($"即时销量请求广告系统错误:{customerId},{e.Message}{e.StackTrace}"); } pageIndex++; } while (OrderSourceSKU.Count &gt;= pageIndex * pageSize); return result; }
    026- 单线程
    026+
    027- /// &lt;summary&gt; /// 获取广告费 单线程 /// &lt;/summary&gt; /// &lt;returns&gt;&lt;/returns&gt; public List&lt;AdvertResult&gt; GetCampFee(int customerId, List&lt;string&gt; OrderSourceSKU, List&lt;int&gt; OrderSourceIDs, DateTime start, DateTime end) { var cpcApiModel = _cpcApiOption.Value; var result= new List&lt;AdvertResult&gt;(); if (!OrderSourceSKU.Any()) return result; int pageIndex = 0; int pageSize = 5000; do { try { var ordersourSkus = OrderSourceSKU.Skip(pageIndex * pageSize).Take(pageSize).ToList(); if (ordersourSkus.Any()) { string jsonData = "{"language": "zh_CN","input": {"CustomerId": " + customerId + ","OrderSourceIds":[" + string.Join(",", OrderSourceIDs) + "],"skus":[" + string.Join(",", ordersourSkus.Select(w =&gt; """ + w + """)) + "],"beginTime": "" + start + "","endTime": "" + end + ""}}"; var list = CommonCPCRequest&lt;AdvertResult&gt;(jsonData, "api/campaigns/productad/searchsummariesbysku", customerId == 1 ? cpcApiModel.BaseUrl158 : cpcApiModel.BaseUrl); //result = result.Union(list).ToList(); if (list.Count &gt; 0) { result = result.Union(list).ToList(); } } } catch (Exception e) { _logger.LogError($"即时销量请求广告系统错误:{customerId},{e.Message}{e.StackTrace}"); } pageIndex++; } while (OrderSourceSKU.Count &gt;= pageIndex * pageSize); return result; }
    004- <p></p>
    004+ <p><br /></p>
    005- <p>
    005+ <p class="MsoNormal">获取广告费方法--执行步骤:</p>
    006- </p><p class="MsoNormal">获取广告费方法--执行步骤:</p>
    006+ <p class="MsoNormal">1.<span>获取</span><span>skulist,ordersourcelist 集合,需</span>5-10秒</p>
    007- <p class="MsoNormal">1.<span>获取</span><span>skulist,ordersourcelist 集合,需</span>5-10秒</p>
    007+ <p class="MsoNormal">2.<span>获取广告费:根据查询时间段从</span><span>skulist,ordersourcelist</span></p>
    008- <p class="MsoNormal">2.<span>获取广告费:根据查询时间段从</span><span>skulist,ordersourcelist</span></p>
    008+ <p class="MsoNormal"><span>里计算广告费用</span><span>GetCampFree(), 循环skulist20万记录,每次5000计算广告费,串行需40次计算完成:40*1.5=60秒</span></p>
    009- <p class="MsoNormal"><span>里计算广告费用</span><span>GetCampFree(), 循环skulist20万记录,每次5000计算广告费,串行需40次计算完成:40*1.5=60秒</span></p>
    009+ <p class="MsoNormal" style="margin-left:0pt;text-indent:0pt;">3.<span>根据</span><span>2的结果集做业务处理:币种转换,费率计算,广告费量计算等,3秒</span></p>
    010- <p class="MsoNormal" style="margin-left:0pt;text-indent:0pt;">3.<span>根据</span><span>2的结果集做业务处理:币种转换,费率计算,广告费量计算等,3秒</span></p>
    010+ <p><br /></p>
    011- <p><br /></p>
    011+ <p><br /></p>
    012- <p><br /></p>
    012+ <p>2. 解决方案:</p>
    013- <p>2. 解决方案:</p>
    013+ <p>优化建议:</p>
    014- <p>优化建议:</p>
    014+ <p>根据分析发现执行步骤的第2步慢, 将第2步由单线程改为多线程</p>
    015- <p>根据分析发现执行步骤的第2步慢, 将第2步由单线程改为多线程</p>
    015+ <p>优化后测试结果对比:速度提升了10倍 -20倍</p>
    016- <p>优化后测试结果对比:速度提升了10倍 -20倍</p>
    016+ <p><br /></p>
    017- <p><br /></p>
    017+ <p>st<br />"st01获取数据豪秒=8521;st02单线程豪秒=150023;st03多线程豪秒=7315;<br />st04数据处理时间豪秒=3767"<br />adresultList.Count<br />9810<br />adresultList2.Count<br />9810<br />--------------------------------------------------------------</p>
    018- <p>st<br />"st01获取数据豪秒=8521;st02单线程豪秒=150023;st03多线程豪秒=7315;<br />st04数据处理时间豪秒=3767"<br />adresultList.Count<br />9810<br />adresultList2.Count<br />9810<br />--------------------------------------------------------------</p>
    018+ <p>st<br />"st01获取数据豪秒=2913;st02单线程豪秒=30589;st03多线程豪秒=3420;<br />st04数据处理时间豪秒=2899"<br />adresultList.Count //单线程返回结果集<br />9810<br />adresultList2.Count<span>//多线程返回结果集</span><br />9810</p>
    019- <p>st<br />"st01获取数据豪秒=2913;st02单线程豪秒=30589;st03多线程豪秒=3420;<br />st04数据处理时间豪秒=2899"<br />adresultList.Count //单线程返回结果集<br />9810<br />adresultList2.Count<span>//多线程返回结果集</span><br />9810<br /></p>
    019+ <p>2. 解决方案:多线程</p>
    020-
    020+ <p>第2步骤:获取广告费改为多线程:</p>
    021- <p>2. 解决方案:多线程</p>
    021+ <p> //获取广告费 多线程<br /> public List&lt;AdvertResult&gt; GetCampFeeTask(int customerId, List&lt;string&gt; OrderSourceSKU, List&lt;int&gt; OrderSourceIDs, DateTime start, DateTime end)<br /> {<br /> List&lt;Task&gt; taskList = new List&lt;Task&gt;();<br /> var cpcApiModel = _cpcApiOption.Value;<br /> var result = new List&lt;AdvertResult&gt;();<br /> if (!OrderSourceSKU.Any())<br /> return result;<br /> <br /> int pageSize = 5000;<br /> //var list = new List&lt;AdvertResult&gt;();<br /> for (int i = 0; i*5000 &lt;= OrderSourceSKU.Count; i++)<br /> {<br /> try<br /> {<br /> if (taskList.Count(t =&gt; t.Status != TaskStatus.RanToCompletion) &gt;= 20)<br /> {<br /> Task.WaitAny(taskList.ToArray());<br /> taskList = taskList.Where(t =&gt; t.Status != TaskStatus.RanToCompletion).ToList();<br /> }<br /><br /> int k = i;<br /> int skipNum = k * pageSize;<br /><br /> taskList.Add(Task.Run(() =&gt;<br /> {<br /> try<br /> {<br /> var ordersourSkus = OrderSourceSKU.Skip(skipNum).Take(pageSize).ToList();<br /> if (ordersourSkus.Any())<br /> {<br /> string jsonData = "{"language": "zh_CN","input": {"CustomerId": " + customerId + ","OrderSourceIds":[" + string.Join(",", OrderSourceIDs) + "],"skus":[" + string.Join(",", ordersourSkus.Select(w =&gt; """ + w + """)) + "],"beginTime": "" + start + "","endTime": "" + end + ""}}";<br /> var list = CommonCPCRequest&lt;AdvertResult&gt;(jsonData, "api/campaigns/productad/searchsummariesbysku", customerId == 1 ? cpcApiModel.BaseUrl158 : cpcApiModel.BaseUrl);<br /> lock (LockSku)<br /> {<br /> if (list.Count &gt; 0)<br /> {<br /> result = result.Union(list).ToList();<br /> }<br /> <br /> }<br /><br /> }<br /> }<br /> catch(Exception ex)<br /> {<br /> //process error <br /> }<br /> }));<br /> }<br /> catch (Exception ex)<br /> {<br /> _logger.LogError($"即时销量请求广告系统错误:{customerId},{ex.Message}{ex.StackTrace}");<br /> }<br /><br /> }<br /><br /> Task.WaitAll(taskList.ToArray());<br /> return result;<br /> <br /> }</p>
    022- <p>第2步骤:获取广告费改为多线程:</p>
    022+ <p><br /></p>
    023- <p> //获取广告费 多线程<br /> public List&lt;AdvertResult&gt; GetCampFeeTask(int customerId, List&lt;string&gt; OrderSourceSKU, List&lt;int&gt; OrderSourceIDs, DateTime start, DateTime end)<br /> {<br /> List&lt;Task&gt; taskList = new List&lt;Task&gt;();<br /> var cpcApiModel = _cpcApiOption.Value;<br /> var result = new List&lt;AdvertResult&gt;();<br /> if (!OrderSourceSKU.Any())<br /> return result;<br /> <br /> int pageSize = 5000;<br /> //var list = new List&lt;AdvertResult&gt;();<br /> for (int i = 0; i*5000 &lt;= OrderSourceSKU.Count; i++)<br /> {<br /> try<br /> {<br /> if (taskList.Count(t =&gt; t.Status != TaskStatus.RanToCompletion) &gt;= 20)<br /> {<br /> Task.WaitAny(taskList.ToArray());<br /> taskList = taskList.Where(t =&gt; t.Status != TaskStatus.RanToCompletion).ToList();<br /> }<br /><br /> int k = i;<br /> int skipNum = k * pageSize;<br /><br /> taskList.Add(Task.Run(() =&gt;<br /> {<br /> try<br /> {<br /> var ordersourSkus = OrderSourceSKU.Skip(skipNum).Take(pageSize).ToList();<br /> if (ordersourSkus.Any())<br /> {<br /> string jsonData = "{"language": "zh_CN","input": {"CustomerId": " + customerId + ","OrderSourceIds":[" + string.Join(",", OrderSourceIDs) + "],"skus":[" + string.Join(",", ordersourSkus.Select(w =&gt; """ + w + """)) + "],"beginTime": "" + start + "","endTime": "" + end + ""}}";<br /> var list = CommonCPCRequest&lt;AdvertResult&gt;(jsonData, "api/campaigns/productad/searchsummariesbysku", customerId == 1 ? cpcApiModel.BaseUrl158 : cpcApiModel.BaseUrl);<br /> lock (LockSku)<br /> {<br /> if (list.Count &gt; 0)<br /> {<br /> result = result.Union(list).ToList();<br /> }<br /> <br /> }<br /><br /> }<br /> }<br /> catch(Exception ex)<br /> {<br /> //process error <br /> }<br /> }));<br /> }<br /> catch (Exception ex)<br /> {<br /> _logger.LogError($"即时销量请求广告系统错误:{customerId},{ex.Message}{ex.StackTrace}");<br /> }<br /><br /> }<br /><br /> Task.WaitAll(taskList.ToArray());<br /> return result;<br /> <br /> }<br /></p>
    023+ <p>3.原方案:</p>
    024- <p><br /></p>
    024+ <p>单线程</p>
    025- <p>3.原方案:</p>
    025+ <p>/// &lt;summary&gt;<br /> /// 获取广告费 单线程<br /> /// &lt;/summary&gt;<br /> /// &lt;returns&gt;&lt;/returns&gt;<br /> public List&lt;AdvertResult&gt; GetCampFee(int customerId, List&lt;string&gt; OrderSourceSKU, List&lt;int&gt; OrderSourceIDs, DateTime start, DateTime end)<br /> {<br /> var cpcApiModel = _cpcApiOption.Value;<br /> var result= new List&lt;AdvertResult&gt;();<br /> if (!OrderSourceSKU.Any())<br /> return result;<br /> int pageIndex = 0;<br /> int pageSize = 5000;<br /> do<br /> {<br /> try<br /> {<br /> var ordersourSkus = OrderSourceSKU.Skip(pageIndex * pageSize).Take(pageSize).ToList();<br /> if (ordersourSkus.Any())<br /> {<br /> <br /> string jsonData = "{"language": "zh_CN","input": {"CustomerId": " + customerId + ","OrderSourceIds":[" + string.Join(",", OrderSourceIDs) + "],"skus":[" + string.Join(",", ordersourSkus.Select(w =&gt; """ + w + """)) + "],"beginTime": "" + start + "","endTime": "" + end + ""}}";<br /> var list = CommonCPCRequest&lt;AdvertResult&gt;(jsonData, "api/campaigns/productad/searchsummariesbysku", customerId == 1 ? cpcApiModel.BaseUrl158 : cpcApiModel.BaseUrl);<br /> //result = result.Union(list).ToList();<br /> if (list.Count &gt; 0)<br /> {<br /> result = result.Union(list).ToList();<br /> }<br /> }<br /> }<br /> catch (Exception e)<br /> {<br /> _logger.LogError($"即时销量请求广告系统错误:{customerId},{e.Message}{e.StackTrace}");<br /> }<br /> pageIndex++;<br /> } while (OrderSourceSKU.Count &gt;= pageIndex * pageSize);<br /> return result;<br /> }</p>
    026- <p>单线程</p>
    026+ <div><br /></div>
    027- <p>/// &lt;summary&gt;<br /> /// 获取广告费 单线程<br /> /// &lt;/summary&gt;<br /> /// &lt;returns&gt;&lt;/returns&gt;<br /> public List&lt;AdvertResult&gt; GetCampFee(int customerId, List&lt;string&gt; OrderSourceSKU, List&lt;int&gt; OrderSourceIDs, DateTime start, DateTime end)<br /> {<br /> var cpcApiModel = _cpcApiOption.Value;<br /> var result= new List&lt;AdvertResult&gt;();<br /> if (!OrderSourceSKU.Any())<br /> return result;<br /> int pageIndex = 0;<br /> int pageSize = 5000;<br /> do<br /> {<br /> try<br /> {<br /> var ordersourSkus = OrderSourceSKU.Skip(pageIndex * pageSize).Take(pageSize).ToList();<br /> if (ordersourSkus.Any())<br /> {<br /> <br /> string jsonData = "{"language": "zh_CN","input": {"CustomerId": " + customerId + ","OrderSourceIds":[" + string.Join(",", OrderSourceIDs) + "],"skus":[" + string.Join(",", ordersourSkus.Select(w =&gt; """ + w + """)) + "],"beginTime": "" + start + "","endTime": "" + end + ""}}";<br /> var list = CommonCPCRequest&lt;AdvertResult&gt;(jsonData, "api/campaigns/productad/searchsummariesbysku", customerId == 1 ? cpcApiModel.BaseUrl158 : cpcApiModel.BaseUrl);<br /> //result = result.Union(list).ToList();<br /> if (list.Count &gt; 0)<br /> {<br /> result = result.Union(list).ToList();<br /> }<br /> }<br /> }<br /> catch (Exception e)<br /> {<br /> _logger.LogError($"即时销量请求广告系统错误:{customerId},{e.Message}{e.StackTrace}");<br /> }<br /> pageIndex++;<br /> } while (OrderSourceSKU.Count &gt;= pageIndex * pageSize);<br /> return result;<br /> }<br /></p><div><br /></div>

    *postman 测试参数


    https://localhost:44376/instant/Sales/ad

    token:

    post  input 参数
    {
        "input":
    {"batchQuery":"asin",
    "currency":"usd",
    "start":"2022-06-23 00:00:00",
    "end":"2022-06-23 23:59:59",
    "customerId":1,
    "userId":421
    }
    ,"language":"zh_CN"
    }

  3. 2022-07-07 16:01:00, 由 陈少军 指派给 王翔宇。
    修改了 预计剩余,旧值为 "0",新值为 "2"。
    参考解决方案优化
  4. 2022-07-08 09:49:57, 由 夏宇 移动,之前为 "#626 系统管理部 - 系统服务优化 "。
  5. 2022-07-08 10:00:31, 由 夏宇 编辑。
    修改了 所属迭代,旧值为 "637",新值为 "626"。
  6. 2022-07-08 10:42:12, 由 陈少军 添加备注。
    postman测试http://aida.zhcxkj.com/instant/sales/ad 接口平均 由90秒左右 改善到12秒左右
  7. 2022-07-18 20:12:36, 由 王翔宇 完成。
    修改了 总计消耗,旧值为 "0",新值为 "4"。
    修改了 指派给 ,旧值为 "wangxiangyu",新值为 "chenshaojun"。
    修改了 实际完成,旧值为 "",新值为 "2022-07-18 20:05:36"。
    修改了 任务状态,旧值为 "wait",新值为 "done"。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2022-07-18 20:12:36"。
    修改了 预计剩余,旧值为 "2",新值为 "0"。
    修改了 由谁完成,旧值为 "",新值为 "wangxiangyu"。

    已改成多线程处理。



  8. 2023-10-31 14:53:12, 由 周杰 关闭。
    修改了 任务状态,旧值为 "done",新值为 "closed"。
    修改了 指派给 ,旧值为 "chenshaojun",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "zhoujie"。
    修改了 关闭时间,旧值为 "0000-00-00 00:00:00",新值为 "2023-10-31 14:53:12"。
    修改了 关闭原因,旧值为 "",新值为 "done"。
所属迭代 系统管理部 - 系统服务优化
所属模块 /
相关需求 暂无
指派给 Closed 于 2023-10-31 14:53:12
任务类型 后端
任务标签 初始
开发组
任务状态 已关闭
进度 100%
优先级 P2
关键词
抄送给 刘灿 胡晓龙 罗友军
由谁创建 陈少军 于 2022-07-07 15:51:24
由谁完成 王翔宇 于 2022-07-18 20:05:36
由谁取消 暂无
由谁关闭 周杰 于 2023-10-31 14:53:12
关闭原因 已完成
最后编辑 周杰 于 2023-10-31 14:53:12
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 0工时
总计消耗 4工时
预计剩余 0工时
预计开始 2022-07-07
实际开始 2022-07-18
截止日期 2022-07-14