From 49caf04049f73f34be1741d529eab4545cc9c5ec Mon Sep 17 00:00:00 2001
From: shanji <18996038927@163.com>
Date: Tue, 18 Oct 2022 21:51:38 +0800
Subject: [PATCH] 1

---
 .../Controllers/JDPopularizeSyncController.cs |  48 +++++-
 ...arizeReportFormAdGroupLevelSyncBusiness.cs |   6 -
 ...PopularizeReportFormAdLevelSyncBusiness.cs |   6 -
 ...rizeReportFormCampaignLevelSyncBusiness.cs | 159 ++++++++++++++++++
 4 files changed, 206 insertions(+), 13 deletions(-)
 create mode 100644 BBWY.Server.Business/Sync/JD/JDPopularizeReportFormCampaignLevelSyncBusiness.cs

diff --git a/BBWY.Server.API/Controllers/JDPopularizeSyncController.cs b/BBWY.Server.API/Controllers/JDPopularizeSyncController.cs
index 30a99dd8..7a0e7296 100644
--- a/BBWY.Server.API/Controllers/JDPopularizeSyncController.cs
+++ b/BBWY.Server.API/Controllers/JDPopularizeSyncController.cs
@@ -11,14 +11,20 @@ namespace BBWY.Server.API.Controllers
         private JDPopularizeSyncBusiness jdPopularizeSyncBusiness;
         private JDPopularizeReportFormSkuLevelSyncBusiness jdPopularizeReportFormSkuLevelSyncBusiness;
         private JDPopularizeReportFormAdLevelSyncBusiness jdPopularizeReportFormAdLevelSyncBusiness;
+        private JDPopularizeReportFormAdGroupLevelSyncBusiness jdPopularizeReportFormAdGroupLevelSyncBusiness;
+        private JDPopularizeReportFormCampaignLevelSyncBusiness jdPopularizeReportFormCampaignLevelSyncBusiness;
         public JDPopularizeSyncController(IHttpContextAccessor httpContextAccessor,
                                           JDPopularizeSyncBusiness jdPopularizeSyncBusiness,
                                           JDPopularizeReportFormSkuLevelSyncBusiness jdPopularizeReportFormSkuLevelSyncBusiness,
-                                          JDPopularizeReportFormAdLevelSyncBusiness jdPopularizeReportFormAdLevelSyncBusiness) : base(httpContextAccessor)
+                                          JDPopularizeReportFormAdLevelSyncBusiness jdPopularizeReportFormAdLevelSyncBusiness,
+                                          JDPopularizeReportFormAdGroupLevelSyncBusiness jdPopularizeReportFormAdGroupLevelSyncBusiness,
+                                          JDPopularizeReportFormCampaignLevelSyncBusiness jdPopularizeReportFormCampaignLevelSyncBusiness) : base(httpContextAccessor)
         {
             this.jdPopularizeSyncBusiness = jdPopularizeSyncBusiness;
             this.jdPopularizeReportFormSkuLevelSyncBusiness = jdPopularizeReportFormSkuLevelSyncBusiness;
             this.jdPopularizeReportFormAdLevelSyncBusiness = jdPopularizeReportFormAdLevelSyncBusiness;
+            this.jdPopularizeReportFormAdGroupLevelSyncBusiness = jdPopularizeReportFormAdGroupLevelSyncBusiness;
+            this.jdPopularizeReportFormCampaignLevelSyncBusiness = jdPopularizeReportFormCampaignLevelSyncBusiness;
         }
 
         /// <summary>
@@ -83,5 +89,45 @@ namespace BBWY.Server.API.Controllers
         {
             jdPopularizeReportFormAdLevelSyncBusiness.SyncShopPopularizeReportFormAdLevelByDate(shopId, startDate, endDate);
         }
+
+        /// <summary>
+        /// 同步全店推广报表-单元维度
+        /// </summary>
+        [HttpGet]
+        public void SyncAllShopPopularizeReportFormAdGroupLevel()
+        {
+            jdPopularizeReportFormAdGroupLevelSyncBusiness.SyncAllShopPopularizeReportFormAdGroupLevel();
+        }
+
+        /// <summary>
+        /// 同步指定条件的推广报表-单元维度
+        /// </summary>
+        /// <param name="shopId"></param>
+        /// <param name="startDate"></param>
+        /// <param name="endDate"></param>
+        [HttpGet]
+        public void SyncShopPopularizeReportFormAdGroupLevelByDate(long? shopId, DateTime startDate, DateTime endDate)
+        {
+            jdPopularizeReportFormAdGroupLevelSyncBusiness.SyncShopPopularizeReportFormAdGroupLevelByDate(shopId, startDate, endDate);
+        }
+
+        /// <summary>
+        /// 同步全店推广报表-计划维度
+        /// </summary>
+        public void SyncAllShopPopularizeReportFormCampaginLevel()
+        {
+            jdPopularizeReportFormCampaignLevelSyncBusiness.SyncAllShopPopularizeReportFormCampaignLevel();
+        }
+
+        /// <summary>
+        /// 同步指定条件的推广报表-计划维度
+        /// </summary>
+        /// <param name="shopId"></param>
+        /// <param name="startDate"></param>
+        /// <param name="endDate"></param>
+        public void SyncShopPopularizeReportFormCampaginLevelByDate(long? shopId, DateTime startDate, DateTime endDate)
+        {
+            jdPopularizeReportFormCampaignLevelSyncBusiness.SyncShopPopularizeReportFormCampaignLevelByDate(shopId, startDate, endDate);
+        }
     }
 }
diff --git a/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdGroupLevelSyncBusiness.cs b/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdGroupLevelSyncBusiness.cs
index cc92b4e0..7e4b8fb4 100644
--- a/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdGroupLevelSyncBusiness.cs
+++ b/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdGroupLevelSyncBusiness.cs
@@ -37,12 +37,6 @@ namespace BBWY.Server.Business.Sync
 
         }
 
-        /// <summary>
-        /// 删除推广报表-sku维度-京速推业务线数据
-        /// </summary>
-        /// <param name="shops"></param>
-        /// <param name="startDate"></param>
-        /// <param name="endDate"></param>
         private void DeleteOldData(IList<ShopResponse> shops, DateTime startDate, DateTime endDate)
         {
             var shopIds = shops.Select(s => Convert.ToInt64(s.ShopId)).ToList();
diff --git a/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdLevelSyncBusiness.cs b/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdLevelSyncBusiness.cs
index 1089337f..09b2f161 100644
--- a/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdLevelSyncBusiness.cs
+++ b/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdLevelSyncBusiness.cs
@@ -37,12 +37,6 @@ namespace BBWY.Server.Business.Sync
 
         }
 
-        /// <summary>
-        /// 删除推广报表-sku维度-京速推业务线数据
-        /// </summary>
-        /// <param name="shops"></param>
-        /// <param name="startDate"></param>
-        /// <param name="endDate"></param>
         private void DeleteOldData(IList<ShopResponse> shops, DateTime startDate, DateTime endDate)
         {
             var shopIds = shops.Select(s => Convert.ToInt64(s.ShopId)).ToList();
diff --git a/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormCampaignLevelSyncBusiness.cs b/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormCampaignLevelSyncBusiness.cs
new file mode 100644
index 00000000..ecff53d6
--- /dev/null
+++ b/BBWY.Server.Business/Sync/JD/JDPopularizeReportFormCampaignLevelSyncBusiness.cs
@@ -0,0 +1,159 @@
+using BBWY.Common.Http;
+using BBWY.Common.Models;
+using BBWY.Server.Model;
+using BBWY.Server.Model.Db;
+using BBWY.Server.Model.Dto;
+using Microsoft.Extensions.Options;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using NLog;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Yitter.IdGenerator;
+
+namespace BBWY.Server.Business.Sync
+{
+    public class JDPopularizeReportFormCampaignLevelSyncBusiness : BaseSyncBusiness, IDenpendency
+    {
+        public JDPopularizeReportFormCampaignLevelSyncBusiness(RestApiService restApiService,
+                                                              IOptions<GlobalConfig> options,
+                                                              ILogger logger,
+                                                              IFreeSql fsql,
+                                                              IIdGenerator idGenerator,
+                                                              TaskSchedulerManager taskSchedulerManager,
+                                                              VenderBusiness venderBusiness) : base(restApiService,
+                                                                                                    options,
+                                                                                                    logger,
+                                                                                                    fsql,
+                                                                                                    idGenerator,
+                                                                                                    taskSchedulerManager,
+                                                                                                    venderBusiness)
+        {
+
+        }
+
+        private void DeleteOldData(IList<ShopResponse> shops, DateTime startDate, DateTime endDate)
+        {
+            var shopIds = shops.Select(s => Convert.ToInt64(s.ShopId)).ToList();
+            fsql.Delete<JDPopularizeCampaign>().Where(s => shopIds.Contains(s.ShopId.Value) &&
+                                                          s.Date >= startDate && s.Date <= endDate).ExecuteAffrows();
+        }
+
+        public void SyncAllShopPopularizeReportFormCampaignLevel()
+        {
+            var shopList = venderBusiness.GetShopList(shopId: null, Enums.Platform.京东);
+            var date = DateTime.Now.Date.AddDays(-1);
+            DeleteOldData(shopList, date, date);
+            foreach (var shop in shopList)
+            {
+                Task.Factory.StartNew(() => SyncShopPopularizeReportFormCampaignLevelByDate(shop, date, date, 2),
+                                            System.Threading.CancellationToken.None,
+                                            TaskCreationOptions.LongRunning,
+                                            taskSchedulerManager.JDPopularizeTaskScheduler);
+
+                Task.Factory.StartNew(() => SyncShopPopularizeReportFormCampaignLevelByDate(shop, date, date, 134217728),
+                                          System.Threading.CancellationToken.None,
+                                          TaskCreationOptions.LongRunning,
+                                          taskSchedulerManager.JDPopularizeTaskScheduler);
+            }
+        }
+
+        public void SyncShopPopularizeReportFormCampaignLevelByDate(long? shopId, DateTime startDate, DateTime endDate)
+        {
+            startDate = startDate.Date;
+            endDate = endDate.Date;
+            var shopList = venderBusiness.GetShopList(shopId, Enums.Platform.京东);
+            DeleteOldData(shopList, startDate, endDate);
+            foreach (var shop in shopList)
+            {
+                Task.Factory.StartNew(() => SyncShopPopularizeReportFormCampaignLevelByDate(shop, startDate, endDate, 2),
+                                            System.Threading.CancellationToken.None,
+                                            TaskCreationOptions.LongRunning,
+                                            taskSchedulerManager.JDPopularizeTaskScheduler);
+
+                Task.Factory.StartNew(() => SyncShopPopularizeReportFormCampaignLevelByDate(shop, startDate, endDate, 134217728),
+                                           System.Threading.CancellationToken.None,
+                                           TaskCreationOptions.LongRunning,
+                                           taskSchedulerManager.JDPopularizeTaskScheduler);
+            }
+        }
+
+        private void SyncShopPopularizeReportFormCampaignLevelByDate(ShopResponse shop, DateTime startDate, DateTime endDate, int businessType)
+        {
+            var pageIndex = 1;
+            while (true)
+            {
+                SyncShopPopularizeReportFormCampaignLevel(shop, startDate, endDate, pageIndex, businessType, out int count);
+                if (count < 100)
+                    break;
+                pageIndex++;
+                Thread.Sleep(2000);
+            }
+        }
+
+        private void SyncShopPopularizeReportFormCampaignLevel(ShopResponse shop, DateTime startDate, DateTime endDate, int pageIndex, int businessType, out int currentCount)
+        {
+            currentCount = 0;
+            try
+            {
+                var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId);
+                var httpResult = restApiService.SendRequest(relayAPIHost, "Api/PlatformSDK/GetJDSopularizeReportFormByCampaignLevel", new SyncJDPopularizeReportFormRequest()
+                {
+                    AppKey = shop.AppKey,
+                    AppSecret = shop.AppSecret,
+                    AppToken = shop.AppToken,
+                    EndDate = endDate,
+                    StartDate = startDate,
+                    Platform = shop.PlatformId,
+                    PageIndex = pageIndex,
+                    Business = businessType
+                }, null, HttpMethod.Post);
+                if (httpResult.StatusCode != System.Net.HttpStatusCode.OK)
+                    throw new Exception($"获取JD推广报表-计划维度失败 {httpResult.Content}");
+
+                var presponse = JsonConvert.DeserializeObject<ApiResponse<JArray>>(httpResult.Content);
+                if (!presponse.Success)
+                    throw new Exception($"获取JD推广报表-计划维度失败 {presponse.Msg}");
+
+                SyncShopPopularizeReportFormCampaignLevel(long.Parse(shop.ShopId), presponse.Data, businessType);
+                currentCount = presponse.Data?.Count() ?? 0;
+            }
+            catch (Exception ex)
+            {
+                var data = JsonConvert.SerializeObject(new { shop, startDate, endDate, pageIndex });
+                logger.Error(ex, $"SyncShopPopularizeReportFormCampaignLevel Data:{data}");
+            }
+        }
+
+        private void SyncShopPopularizeReportFormCampaignLevel(long shopId, JArray jArray, int businessType)
+        {
+            if (jArray == null || !jArray.HasValues)
+                return;
+            var insertList = new List<JDPopularizeCampaign>();
+            foreach (var j in jArray)
+            {
+                insertList.Add(new JDPopularizeCampaign()
+                {
+                    Id = idGenerator.NewLong(),
+                    BusinessType = businessType,
+                    ShopId = shopId,
+                    CreateTime = DateTime.Now,
+                    CampaignId = j.Value<long>("campaignId"),
+                    CampaignName = j.Value<string>("campaignName"),
+                    Date = DateTime.ParseExact(j.Value<string>("date"), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
+                    Cost = j.Value<decimal>("cost"),
+                    Clicks = j.Value<int?>("clicks") ?? 0,
+                    Impressions = j.Value<int?>("impressions") ?? 0,
+                    TotalCartCnt = j.Value<int?>("totalCartCnt") ?? 0,
+                    TotalOrderCnt = j.Value<int?>("totalOrderCnt") ?? 0
+                });
+            }
+            if (insertList.Count > 0)
+                fsql.Insert(insertList).ExecuteAffrows();
+        }
+    }
+}