diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs
index df6b0a4..b1b3720 100644
--- a/BBWYB.Server.API/Controllers/DataRepairController.cs
+++ b/BBWYB.Server.API/Controllers/DataRepairController.cs
@@ -70,5 +70,9 @@ namespace BBWYB.Server.API.Controllers
         [HttpPost]
         public void SelectBExistsAndCNotExists()
         { dataRepairBusiness.SelectBExistsAndCNotExists(); }
+
+        [HttpPost]
+        public void SyncHistoryPurchaseScheme()
+        { dataRepairBusiness.SyncHistoryPurchaseScheme();}
     }
 }
diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
index 49b735d..a9ab217 100644
--- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
+++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
@@ -1,4 +1,5 @@
-using BBWYB.Common.Log;
+using BBWYB.Common.Extensions;
+using BBWYB.Common.Log;
 using BBWYB.Common.Models;
 using BBWYB.Server.Model;
 using BBWYB.Server.Model.Db;
@@ -15,12 +16,14 @@ namespace BBWYB.Server.Business
         private PurchaseSchemeBusiness purchaseSchemeBusiness;
         private PurchaseOrderBusiness purchaseOrderBusiness;
         private FreeSqlMultiDBManager freeSqlMultiDBManager;
-        public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager) : base(fsql, nLogManager, idGenerator)
+        private VenderBusiness venderBusiness;
+        public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness) : base(fsql, nLogManager, idGenerator)
         {
             this.kuaiDi100Manager = kuaiDi100Manager;
             this.purchaseSchemeBusiness = purchaseSchemeBusiness;
             this.purchaseOrderBusiness = purchaseOrderBusiness;
             this.freeSqlMultiDBManager = freeSqlMultiDBManager;
+            this.venderBusiness = venderBusiness;
         }
 
 
@@ -393,5 +396,68 @@ namespace BBWYB.Server.Business
             Console.WriteLine($"B端在而C端不在的数量有 {bexceptIdList.Count()}");
             Console.WriteLine($"C端在而B端不在的数量有 {cexceptIdList.Count()}");
         }
+
+        public void SyncHistoryPurchaseScheme()
+        {
+            var qtShops = venderBusiness.GetShopList(platform: Enums.Platform.拳探);
+            foreach (var shop in qtShops)
+            {
+                var psList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest()
+                {
+                    ShopId = long.Parse(shop.ShopId)
+                });
+
+                List<HistoryPurchaseScheme> insertHistoryPSList = new List<HistoryPurchaseScheme>();
+                List<HistoryPurchaseSchemeProduct> insertHistoryPSPList = new List<HistoryPurchaseSchemeProduct>();
+                List<HistoryPurchaseSchemeProductSku> insertHistoryPSSList = new List<HistoryPurchaseSchemeProductSku>();
+                //List<long> updatePurchaseSchemeIdList = new List<long>();
+
+                foreach (var ps in psList)
+                {
+                    //var newVersion = ps.Version + 1;
+                    var newVersion = ps.Version;
+                    foreach (var psp in ps.PurchaseSchemeProductList)
+                    {
+                        foreach (var pss in psp.PurchaseSchemeProductSkuList)
+                        {
+                            #region 处理历史版本
+                            var historyPss = psp.Map<HistoryPurchaseSchemeProductSku>();
+                            historyPss.HistoryId = idGenerator.NewLong();
+                            historyPss.Version = newVersion;
+                            insertHistoryPSSList.Add(historyPss);
+                            #endregion
+                        }
+                        #region 处理历史版本
+                        var historyPsp = psp.Map<HistoryPurchaseSchemeProduct>();
+                        historyPsp.HistoryId = idGenerator.NewLong();
+                        historyPsp.Version = newVersion;
+                        insertHistoryPSPList.Add(historyPsp);
+                        #endregion
+                    }
+
+                    #region 处理历史版本
+                    var historyPs = ps.Map<HistoryPurchaseScheme>();
+                    historyPs.HistoryId = idGenerator.NewLong();
+                    historyPs.Version = newVersion;
+                    insertHistoryPSList.Add(historyPs);
+
+                    //updatePurchaseSchemeIdList.Add(ps.Id);
+                    #endregion
+                }
+
+
+                fsql.Transaction(() =>
+                {
+                    if (insertHistoryPSList.Count() > 0)
+                        fsql.Insert(insertHistoryPSList).ExecuteAffrows();
+                    if (insertHistoryPSPList.Count() > 0)
+                        fsql.Insert(insertHistoryPSPList).ExecuteAffrows();
+                    if (insertHistoryPSSList.Count() > 0)
+                        fsql.Insert(insertHistoryPSSList).ExecuteAffrows();
+                    //if (updatePurchaseSchemeIdList.Count() > 0)
+                    //    fsql.Update<PurchaseScheme>(updatePurchaseSchemeIdList).Set(ps => ps.Version + 1).ExecuteAffrows();
+                });
+            }
+        }
     }
 }
diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
index 5affc42..b9b324b 100644
--- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
+++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
@@ -340,8 +340,8 @@ namespace BBWYB.Server.Business
             IUpdate<PurchaseSchemeGroupIndex>? updatePurchaseSchemeGroupIndex = null;
 
             List<HistoryPurchaseScheme> insertHistoryPSList = new List<HistoryPurchaseScheme>();
-            List<HistoryPurchaseScheme> insertHistoryPSPList = new List<HistoryPurchaseScheme>();
-            List<HistoryPurchaseScheme> insertHistoryPSSList = new List<HistoryPurchaseScheme>();
+            List<HistoryPurchaseSchemeProduct> insertHistoryPSPList = new List<HistoryPurchaseSchemeProduct>();
+            List<HistoryPurchaseSchemeProductSku> insertHistoryPSSList = new List<HistoryPurchaseSchemeProductSku>();
 
 
             if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0)
@@ -400,7 +400,8 @@ namespace BBWYB.Server.Business
                         ShopId = psReq.ShopId,
                         HYBDId = psReq.HYBDId,
                         HYSchemeId = psReq.HYSchemeId,
-                        SchemeGroupId = psReq.SchemeGroupId ?? 0
+                        SchemeGroupId = psReq.SchemeGroupId ?? 0,
+                        Version = 1
                     };
                     addPurchaseSchemeList.Add(ps);
                     foreach (var pspReq in psReq.PurchaseSchemeProductList)
@@ -419,8 +420,28 @@ namespace BBWYB.Server.Business
                             pss.SkuPurchaseSchemeId = ps.Id;
                             addPurchaseSchemeProductSkuList.Add(pss);
                             ps.DefaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1);
+
+                            #region 处理历史版本
+                            var historyPss = psp.Map<HistoryPurchaseSchemeProductSku>();
+                            historyPss.HistoryId = idGenerator.NewLong();
+                            historyPss.Version = 1;
+                            insertHistoryPSSList.Add(historyPss);
+                            #endregion
                         }
+
+                        #region 处理历史版本
+                        var historyPsp = psp.Map<HistoryPurchaseSchemeProduct>();
+                        historyPsp.HistoryId = idGenerator.NewLong();
+                        historyPsp.Version = 1;
+                        insertHistoryPSPList.Add(historyPsp);
+                        #endregion
                     }
+
+                    #region 处理历史版本
+                    var historyPs = ps.Map<HistoryPurchaseScheme>();
+                    historyPs.HistoryId = idGenerator.NewLong();
+                    insertHistoryPSList.Add(historyPs);
+                    #endregion
                 }
             }
 
@@ -435,6 +456,10 @@ namespace BBWYB.Server.Business
                 foreach (var psReq in batchCURDSchemeRequest.EditPurchaseSchemeList)
                 {
                     var schemeId = psReq.Id;
+                    var dbps = dbPurchaseSchemes.FirstOrDefault(x => x.Id == schemeId);
+                    if (dbps == null)
+                        throw new BusinessException($"未找到编辑方案{schemeId}");
+                    var newVersion = dbps.Version + 1; //采购方案版本
                     var defaultCost = 0M;
                     foreach (var pspReq in psReq.PurchaseSchemeProductList)
                     {
@@ -452,13 +477,43 @@ namespace BBWYB.Server.Business
                             pss.SkuPurchaseSchemeId = schemeId;
                             addPurchaseSchemeProductSkuList.Add(pss);
                             defaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1);
+
+                            #region 处理历史版本
+                            var historyPss = pssReq.Map<HistoryPurchaseSchemeProductSku>();
+                            historyPss.HistoryId = idGenerator.NewLong();
+                            historyPss.CreateTime = DateTime.Now;
+                            historyPss.SkuPurchaseSchemeId = schemeId;
+                            historyPss.Version = newVersion;
+                            insertHistoryPSSList.Add(historyPss);
+                            #endregion
                         }
+
+                        #region 处理历史版本
+                        var historyPsp = pspReq.Map<HistoryPurchaseSchemeProduct>();
+                        historyPsp.HistoryId = idGenerator.NewLong();
+                        historyPsp.CreateTime = DateTime.Now;
+                        historyPsp.SkuPurchaseSchemeId = schemeId;
+                        historyPsp.Version = newVersion;
+                        insertHistoryPSPList.Add(historyPsp);
+                        #endregion
                     }
                     var psupdate = fsql.Update<PurchaseScheme>(schemeId)
                                        .Set(ps => ps.DefaultCost, defaultCost)
                                        .Set(ps => ps.HYSchemeId, psReq.HYSchemeId)
-                                       .Set(ps => ps.HYBDId, psReq.HYBDId);
+                                       .Set(ps => ps.HYBDId, psReq.HYBDId)
+                                       .Set(ps => ps.Version, newVersion);
                     updatePurchaseSchemeList.Add(psupdate);
+
+                    #region 处理历史版本
+                    var historyPs = psReq.Map<HistoryPurchaseScheme>();
+                    historyPs.LastPurchaseTime = dbps.LastPurchaseTime;
+                    historyPs.LastPurchasePriceCost = dbps.LastPurchasePriceCost;
+                    historyPs.DefaultCost = defaultCost;
+                    historyPs.CreateTime = DateTime.Now;
+                    historyPs.Version = newVersion;
+                    historyPs.HistoryId = idGenerator.NewLong();
+                    insertHistoryPSList.Add(historyPs);
+                    #endregion
                 }
             }
             #endregion
@@ -497,6 +552,13 @@ namespace BBWYB.Server.Business
                 }
                 insertPurchaseSchemeGroupIndex?.ExecuteAffrows();
                 updatePurchaseSchemeGroupIndex?.ExecuteAffrows();
+
+                if (insertHistoryPSList.Count() > 0)
+                    fsql.Insert(insertHistoryPSList).ExecuteAffrows();
+                if (insertHistoryPSPList.Count() > 0)
+                    fsql.Insert(insertHistoryPSPList).ExecuteAffrows();
+                if (insertHistoryPSSList.Count() > 0)
+                    fsql.Insert(insertHistoryPSSList).ExecuteAffrows();
             });
 
             //删除信息残缺的采购方案
diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseScheme.cs
index d9798b2..fa4f370 100644
--- a/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseScheme.cs
+++ b/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseScheme.cs
@@ -57,12 +57,6 @@ namespace BBWYB.Server.Model.Db
         [Column(StringLength = 50, IsNullable = false)]
         public string ProductId { get; set; }
 
-        /// <summary>
-        /// 采购商Id
-        /// </summary>
-        [Column(StringLength = 20)]
-        public string PurchaserId { get; set; }
-
         /// <summary>
         /// 方案分组Id
         /// </summary>
diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProduct.cs b/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProduct.cs
index 982cc45..86cab85 100644
--- a/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProduct.cs
+++ b/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProduct.cs
@@ -18,12 +18,6 @@ namespace BBWYB.Server.Model.Db
 		[Column(DbType = "datetime")]
 		public DateTime? CreateTime { get; set; }
 
-		/// <summary>
-		/// 采购商品流水Id
-		/// </summary>
-		[Column(DbType = "bigint")]
-		public long? Id { get; set; }
-
 		[Column(StringLength = 50)]
 		public string ProductId { get; set; }
 
diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProductsku.cs b/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProductsku.cs
index 95eba67..78c6cb2 100644
--- a/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProductsku.cs
+++ b/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProductsku.cs
@@ -24,11 +24,6 @@ namespace BBWYB.Server.Model.Db
 		[Column(DbType = "datetime")]
 		public DateTime? CreateTime { get; set; }
 
-		/// <summary>
-		/// 采购sku流水Id
-		/// </summary>
-		[Column(DbType = "bigint")]
-		public long? Id { get; set; }
 
 		[Column(StringLength = 50, IsNullable = false)]
 		public string ProductId { get; set; }
diff --git a/BBWYB.Server.Model/MappingProfiles.cs b/BBWYB.Server.Model/MappingProfiles.cs
index 65112b1..d3b3542 100644
--- a/BBWYB.Server.Model/MappingProfiles.cs
+++ b/BBWYB.Server.Model/MappingProfiles.cs
@@ -50,8 +50,12 @@ namespace BBWYB.Server.Model
                                              .ForPath(t => t.OrderCost.PurchaseFreight, opt => opt.MapFrom(f => f.PurchaseFreight));
             CreateMap<OrderPurchaseInfo, OrderPurchaseInfoResponse>();
 
-            //CreateMap<AddOrEditPromotionTaskRequest, PromotionTask>();
-
+            CreateMap<EditPurchaseSchemeRequest, HistoryPurchaseScheme>();
+            CreateMap<InputPurchaseSchemeProductRequest, HistoryPurchaseSchemeProduct>();
+            CreateMap<InputPurchaseSchemeProductSkuRequest, HistoryPurchaseSchemeProductSku>();
+            CreateMap<PurchaseScheme, HistoryPurchaseScheme>();
+            CreateMap<PurchaseSchemeProduct, HistoryPurchaseSchemeProduct>();
+            CreateMap<PurchaseSchemeProductSku, HistoryPurchaseSchemeProductSku>();
         }
     }
 }