From c943dd76cc4381d82d4b8faa6ddc5d7acec505fd Mon Sep 17 00:00:00 2001 From: Administrator Date: Tue, 23 Nov 2021 10:46:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReportServices/ReportMakeService.cs | 36 +++- .../SettleAccount.Application.xml | 11 +- .../Entities/SettleAccountEntityBase.cs | 9 + .../Entities/UnSettle/UnSettleDetailReport.cs | 7 +- .../Reports/ReportDetailBase.cs | 11 +- .../Report/ErpPartDapperRepository.cs | 85 +++++++++ .../InvoiceSettledDiffDapperRepository.cs | 163 ++++++++++------ .../SettleFisDiffDetailDapperRepository.cs | 2 + .../Report/UnSettleDiffDapperRepository.cs | 159 +++++++++++----- .../Report/UnSettledDetailDapperRepository.cs | 175 +++++++++++------- .../Services/OutputService.cs | 20 +- .../Report/InvoiceSettledDiffExportService.cs | 8 +- .../Report/SettleFisDiffExportService.cs | 139 +++++++++++++- 13 files changed, 616 insertions(+), 209 deletions(-) create mode 100644 src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/ErpPartDapperRepository.cs diff --git a/src/Modules/SettleAccount/src/SettleAccount.Application/Reports/ReportServices/ReportMakeService.cs b/src/Modules/SettleAccount/src/SettleAccount.Application/Reports/ReportServices/ReportMakeService.cs index 1559a11a..0c3076d6 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.Application/Reports/ReportServices/ReportMakeService.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.Application/Reports/ReportServices/ReportMakeService.cs @@ -55,10 +55,7 @@ namespace Win.Sfs.SettleAccount.Reports.ReportServices ISettleAccountBranchEfCoreRepository settlementPartVersionrepository, ISettleAccountBranchEfCoreRepository fisVersionrepository, ISettleAccountBranchEfCoreRepository itemInvoicePriceVersionrepository, - //ISettleAccountBranchEfCoreRepository materialRepository, - //ISettleAccountBranchEfCoreRepository repository, - //ISettleAccountBranchEfCoreRepository versionRepository, - //IDistributedCache cache, + IExcelImportAppService excelImportService, //ISnowflakeIdGenerator snowflakeIdGenerator, //ICommonManager commonManager, @@ -197,7 +194,7 @@ namespace Win.Sfs.SettleAccount.Reports.ReportServices /// - /// 导入功能 + /// 1.大众发票与结算核对汇总表 /// /// 上传的文件(前端已经限制只能上传一个附件) /// @@ -225,14 +222,14 @@ namespace Win.Sfs.SettleAccount.Reports.ReportServices customConditionList.Add(new CustomCondition() { Name = "ProjectName", Value = "结算与开票数据对比" }); customConditionList.Add(new CustomCondition() { Name = "Year", Value = year ?? DateTime.Now.Year.ToString() }); - var _taskid = await _service.ExportEnqueueAsync("结算与开票数据对比", ExportExtentsion.Excel, CurrentUser, typeof(InvoiceSettledDiffExportService), customConditionList, (rs) => + var _taskid = await _service.ExportEnqueueAsync("大众发票与结算核对汇总表", ExportExtentsion.Excel, CurrentUser, typeof(InvoiceSettledDiffExportService), customConditionList, (rs) => { }); return _taskid; } /// - /// 导入功能 + /// 3.大众准时化结算数量差异比对表 /// /// 上传的文件(前端已经限制只能上传一个附件) /// @@ -254,9 +251,34 @@ namespace Win.Sfs.SettleAccount.Reports.ReportServices } + /// + ///6.大众准时化未结差异比对表 + /// + /// 上传的文件(前端已经限制只能上传一个附件) + /// + [HttpGet] + [Route("UnSettleDiffExport-Make")] + [DisableRequestSizeLimit] + + public async Task UnSettleDiffExportServiceMake(string version, string materialCode, string begin, string end) + { + List customConditionList = new List(); + customConditionList.Add(new CustomCondition() { Name = "Version", Value = version }); + customConditionList.Add(new CustomCondition() { Name = "MaterialCode", Value = materialCode }); + customConditionList.Add(new CustomCondition() { Name = "BeginTime", Value = begin }); + customConditionList.Add(new CustomCondition() { Name = "EndTime", Value = end }); + var _taskid = await _service.ExportEnqueueAsync("大众准时化未结差异比对表", ExportExtentsion.Excel, CurrentUser, typeof(UnSettleDiffExportService), customConditionList, (rs) => + { + }); + return _taskid; + } + + + + diff --git a/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccount.Application.xml b/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccount.Application.xml index c5652139..808ef9d6 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccount.Application.xml +++ b/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccount.Application.xml @@ -2289,18 +2289,25 @@ - 导入功能 + 1.大众发票与结算核对汇总表 上传的文件(前端已经限制只能上传一个附件) - 导入功能 + 3.大众准时化结算数量差异比对表 上传的文件(前端已经限制只能上传一个附件) + + + 6.大众准时化未结差异比对表 + + 上传的文件(前端已经限制只能上传一个附件) + + 结算总成和ERP总成价格对比 diff --git a/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/SettleAccountEntityBase.cs b/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/SettleAccountEntityBase.cs index d5868c57..e3e108ad 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/SettleAccountEntityBase.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/SettleAccountEntityBase.cs @@ -3,9 +3,18 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Win.Sfs.SettleAccount.Entities.Materials; +using Win.Sfs.SettleAccount.Entities.Prices; namespace Win.Sfs.SettleAccount.Entities { + + public class CacheManager + { + public static List CacheMaterials { set; get; } + public static List CachePriceList { set; get; } + } + public interface ISettleAccountEntityBase { public string Version { set; get; } diff --git a/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/UnSettle/UnSettleDetailReport.cs b/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/UnSettle/UnSettleDetailReport.cs index 915baa30..f9913a45 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/UnSettle/UnSettleDetailReport.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/UnSettle/UnSettleDetailReport.cs @@ -12,14 +12,11 @@ namespace Win.Sfs.SettleAccount.Entities.UnSettle { [ExporterHeader(DisplayName = "结算平台未结数量 ")] public decimal Qty { set; get; } - [ExporterHeader(DisplayName = "定价 ")] - public decimal Price { set; get; } - [ExporterHeader(DisplayName = "金额 ")] - public decimal Amt { set; get; } + [ExporterHeader(DisplayName = "漏结标识 ")] public string Flag { set; get; } [ExporterHeader(DisplayName = "漏结期间 ")] - public string UNSettleVersion { set; get; } + public string UnSettleVersion { set; get; } [ExporterHeader(DisplayName = "说明 ")] public string Remark { set; get; } diff --git a/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/ReportDetailBase.cs b/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/ReportDetailBase.cs index 286b9e81..038609bd 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/ReportDetailBase.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/ReportDetailBase.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; namespace Win.Sfs.SettleAccount.Reports { + public class ReportDetailBase { [ExporterHeader(DisplayName = "交货单号 ")] @@ -17,7 +18,7 @@ namespace Win.Sfs.SettleAccount.Reports public string KENNCode { set; get; } [ExporterHeader(DisplayName = "底盘号")] public string ChassisNumber { set; get; } - [ExporterHeader(DisplayName = "M100交货状态 ")] + [ExporterHeader(DisplayName = "交货状态 ")] public string WmsState { set; get; } [ExporterHeader(DisplayName = "物料号")] public string SapMaterialCode { set; get; } @@ -26,13 +27,15 @@ namespace Win.Sfs.SettleAccount.Reports [ExporterHeader(DisplayName = "客户物料 ")] public string MaterialCode { set; get; } [ExporterHeader(DisplayName = "组件组物料 ")] - public string ParentMaterialCode { set; get; } + public string ParentSapMaterialCode { set; get; } [ExporterHeader(DisplayName = "组件组物料描述 ")] public string ParentMaterialDesc { set; get; } [ExporterHeader(DisplayName = "物料组(车型) ")] public string MaterialGroup { set; get; } - - + [ExporterHeader(DisplayName = "定价 ")] + public decimal Price { set; get; } + [ExporterHeader(DisplayName = "金额 ")] + public decimal Amt { set; get; } } diff --git a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/ErpPartDapperRepository.cs b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/ErpPartDapperRepository.cs new file mode 100644 index 00000000..2c73e30a --- /dev/null +++ b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/ErpPartDapperRepository.cs @@ -0,0 +1,85 @@ +using Dapper; +using Magicodes.ExporterAndImporter.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories.Dapper; +using Volo.Abp.EntityFrameworkCore; +using Win.Sfs.SettleAccount.Entities; +using Win.Sfs.SettleAccount.Entities.Materials; +using Win.Sfs.SettleAccount.Entities.Prices; +using Win.Sfs.SettleAccount.Reports; + +namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report +{ + + + /// + /// 主数据Dapper表 + /// + public class ErpPartDapperRepository : DapperRepository, ITransientDependency + { + public ErpPartDapperRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + + } + + public virtual List GetDiffReport(List childList) where T : ReportDetailBase, new() + { + List _materialList = new List(); + List _priceList = new List(); + if (CacheManager.CacheMaterials != null) + { + _materialList = CacheManager.CacheMaterials; + } + else + { + _materialList = DbConnection.Query("select * from set_material").ToList(); + } + if (CacheManager.CachePriceList != null) + { + _priceList = CacheManager.CachePriceList; + } + else + { + _priceList = DbConnection.Query("select MaterialCode,Price from Set_PriceList where version=(select max(version) from set_Set_PriceListVersion)").ToList(); + } + + List _list = new List(); + foreach (var itm in childList) + { + var parentMaterial = new T(); + parentMaterial.WmsBillNum = itm.WmsBillNum; + parentMaterial.CP5Time = itm.CP5Time; + parentMaterial.KENNCode = itm.KENNCode; + parentMaterial.ChassisNumber = itm.ChassisNumber; + parentMaterial.WmsState = itm.WmsState; + parentMaterial.SapMaterialCode = itm.ParentSapMaterialCode; + parentMaterial.MaterialDesc = itm.ParentMaterialDesc; + parentMaterial.MaterialCode = itm.ParentSapMaterialCode; + parentMaterial.ParentSapMaterialCode = itm.ParentSapMaterialCode; + parentMaterial.ParentMaterialDesc = itm.ParentMaterialDesc; + + var _price = _priceList.Where(p => p.MaterialCode == itm.ParentSapMaterialCode).FirstOrDefault(); + if (_price != null) + { + parentMaterial.Price = _price.Price; + parentMaterial.Amt = _price.Price; + } + var _material = _materialList.Where(p => p.MaterialCode == itm.ParentSapMaterialCode).FirstOrDefault(); + if (_material != null) + { + parentMaterial.MaterialGroup = _material.EstimateTypeDesc; + + } + _list.Add(parentMaterial); + } + + return _list; + + } + } +} diff --git a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/InvoiceSettledDiffDapperRepository.cs b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/InvoiceSettledDiffDapperRepository.cs index 4cb3f017..b46e903d 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/InvoiceSettledDiffDapperRepository.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/InvoiceSettledDiffDapperRepository.cs @@ -20,74 +20,117 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob public virtual List GetInvoiceSettledDiffReportList(string version,string year, string tablename ,string materialcode) { - //string str = string.Empty; - //str += " where 1=1 "; - ////if (!string.IsNullOrEmpty(year)) - ////{ - //// str += string.Format(" and year='{0}' ", year); - ////} - //if (!string.IsNullOrEmpty(version)) - //{ - // str += string.Format(" and version='{0}' ", version); - //} - - - //// string sqlString = "select "+ string.Format(" {0} as Version ,",version) + "a.MaterialCode,isnull(b.qty,0) InvoiceQty,isnull(c.qty,0) SettleQty, (isnull(b.qty,0)-isnull(c.qty,0)) as DiffQty from (\n" + - //// " select distinct MaterialCode from( \n"+ - ////"select distinct MaterialCode from Set_Invoice {0}\n" + - //// "union all\n" + - //// "select distinct MaterialCode from {1} {0}\n" + - //// ") temp \n"+ - //// ") as a\n" + - //// "left join\n" + - //// "\n" + - //// "(select SUM(QTY) qty,MaterialCode from Set_Invoice {0} GROUP BY MaterialCode) b on a.MaterialCode=b.MaterialCode\n" + - //// "\n" + - //// "left join\n" + - //// "(select SUM(QTY) qty,MaterialCode from {1} {0} GROUP BY MaterialCode) c on a.MaterialCode=c.MaterialCode"; + + + // string sqlString = + //"SELECT \n" + string.Format(" '{0}' as Version ,", version) + "\n" + + //" b.*,\n" + + //" ISnull(\n" + + //" c.Qty,\n" + + //" IsNull( d.qty, 0 )) SettleQty,\n" + + //"CASE\n" + + //" \n" + + //" WHEN e.Type = 'CP7报废' THEN\n" + + //" isnull( e.Qty, 0 ) ELSE 0 \n" + + //" END AS CP7ScrapQty,\n" + + //"CASE\n" + + //" \n" + + //" WHEN e.Type = '索赔' THEN\n" + + //" isnull( e.Qty, 0 ) ELSE 0 \n" + + //" END AS ClaimQty,\n" + + //" (\n" + + //" b.InvoiceQty - ISnull(\n" + + //" c.Qty,\n" + + //" IsNull( d.qty, 0 ))) DiffQty,\n" + + //" Isnull( f.Price, 0 ) SalePrice,\n" + + //" b.InvoicePrice - Isnull( f.Price, 0 ) DiffPrice,\n" + + //" '' AS SapMaterialCode \n" + + //"FROM\n" + + //" (\n" + + //" SELECT\n" + + //" Factory, MaterialCode,\n" + + //" SUM( QTY ) InvoiceQty,\n" + + //" sum( amt ) InvoiceAmt,\n" + + //" sum( amt )/ sum( Qty ) InvoicePrice \n" + + //" FROM\n" + + //" Set_Invoice \n" + + //" WHERE\n" + + //" version = '{0}' \n" + + //" GROUP BY\n" + + //" MaterialCode,Factory \n" + + //" ) b\n" + + //" LEFT JOIN ( SELECT SUM( QTY ) Qty, MaterialCode FROM Set_settle WHERE version = '{0}' GROUP BY MaterialCode ) c ON b.MaterialCode = c.MaterialCode\n" + + //" LEFT JOIN ( SELECT SUM( QTY ) qty, MaterialCode FROM Set_KanbanSettle WHERE version = '{0}' GROUP BY MaterialCode ) d ON b.MaterialCode = d.MaterialCode\n" + + //" LEFT JOIN ( SELECT * FROM Set_ScrapClaims WHERE version = '{0}' ) e ON b.MaterialCode = e.MaterialCode\n" + + //" LEFT JOIN ( SELECT * FROM Set_PriceList WHERE version = '{0}' ) f ON b.MaterialCode = f.MaterialCode"; + string sqlString = -"SELECT \n" + string.Format(" '{0}' as Version ,", version) + "\n" + -" b.*,\n" + -" ISnull(\n" + -" c.Qty,\n" + -" IsNull( d.qty, 0 )) SettleQty,\n" + -"CASE\n" + -" \n" + -" WHEN e.Type = 'CP7报废' THEN\n" + -" isnull( e.Qty, 0 ) ELSE 0 \n" + -" END AS CP7ScrapQty,\n" + -"CASE\n" + -" \n" + -" WHEN e.Type = '索赔' THEN\n" + -" isnull( e.Qty, 0 ) ELSE 0 \n" + -" END AS ClaimQty,\n" + -" (\n" + -" b.InvoiceQty - ISnull(\n" + -" c.Qty,\n" + -" IsNull( d.qty, 0 ))) DiffQty,\n" + -" Isnull( f.Price, 0 ) SalePrice,\n" + -" b.InvoicePrice - Isnull( f.Price, 0 ) DiffPrice,\n" + -" '' AS SapMaterialCode \n" + + "SELECT\n" + +" temp1.*, temp1.InvoicePrice - Isnull( temp2.Price, 0 ) DiffPrice , \n" + +" temp2.Price SalePrice\n" + "FROM\n" + " (\n" + " SELECT\n" + -" Factory, MaterialCode,\n" + -" SUM( QTY ) InvoiceQty,\n" + -" sum( amt ) InvoiceAmt,\n" + -" sum( amt )/ sum( Qty ) InvoicePrice \n" + +string.Format(" '{0}' as Version ,", version)+"\n" + +" b.*,\n" + +" ISnull(\n" + +" c.Qty,\n" + +" IsNull( d.qty, 0 )) SettleQty,\n" + +" CASE\n" + +" \n" + +" WHEN e.Type = 'CP7报废' THEN\n" + +" isnull( e.Qty, 0 ) ELSE 0 \n" + +" END AS CP7ScrapQty,\n" + +" CASE\n" + +" \n" + +" WHEN e.Type = '索赔' THEN\n" + +" isnull( e.Qty, 0 ) ELSE 0 \n" + +" END AS ClaimQty,\n" + +" (\n" + +" b.InvoiceQty - ISnull(\n" + +" c.Qty,\n" + +" IsNull( d.qty, 0 ))) DiffQty,\n" + +//" Isnull( f.Price, 0 ) SalePrice,\n" + +//" b.InvoicePrice - Isnull( f.Price, 0 ) DiffPrice,\n" + +" g.MaterialCode AS SapMaterialCode,\n" + +" g.MaterialDesc AS MaterialDesc \n" + +" FROM\n" + +" (\n" + +" SELECT\n" + +" Factory,\n" + +" MaterialCode,\n" + +" SUM( QTY ) InvoiceQty,\n" + +" sum( amt ) InvoiceAmt,\n" + +" sum( amt )/ sum( Qty ) InvoicePrice \n" + +" FROM\n" + +" Set_Invoice \n" + +" WHERE\n" + +" version = '{0}' \n" + +" GROUP BY\n" + +" MaterialCode,\n" + +" Factory \n" + +" ) b\n" + +" LEFT JOIN ( SELECT SUM( QTY ) Qty, MaterialCode FROM Set_settle WHERE version = '{0}' GROUP BY MaterialCode ) c ON b.MaterialCode = c.MaterialCode\n" + +" LEFT JOIN ( SELECT SUM( QTY ) qty, MaterialCode FROM Set_KanbanSettle WHERE version = '{0}' GROUP BY MaterialCode ) d ON b.MaterialCode = d.MaterialCode\n" + +" LEFT JOIN ( SELECT * FROM Set_ScrapClaims WHERE version = '{0}' ) e ON b.MaterialCode = e.MaterialCode\n" + +//" LEFT JOIN ( SELECT * FROM Set_PriceList WHERE version = '{0}' ) f ON b.MaterialCode = f.MaterialCode\n" + +" LEFT JOIN Set_material g ON b.MaterialCode = g.CustomerPartCode \n" + +" ) temp1\n" + +" LEFT JOIN (\n" + +" SELECT\n" + +" Price,\n" + +" MaterialCode \n" + " FROM\n" + -" Set_Invoice \n" + +" Set_PriceList \n" + " WHERE\n" + -" version = '{0}' \n" + -" GROUP BY\n" + -" MaterialCode,Factory \n" + -" ) b\n" + -" LEFT JOIN ( SELECT SUM( QTY ) Qty, MaterialCode FROM Set_settle WHERE version = '{0}' GROUP BY MaterialCode ) c ON b.MaterialCode = c.MaterialCode\n" + -" LEFT JOIN ( SELECT SUM( QTY ) qty, MaterialCode FROM Set_KanbanSettle WHERE version = '{0}' GROUP BY MaterialCode ) d ON b.MaterialCode = d.MaterialCode\n" + -" LEFT JOIN ( SELECT * FROM Set_ScrapClaims WHERE version = '{0}' ) e ON b.MaterialCode = e.MaterialCode\n" + -" LEFT JOIN ( SELECT * FROM Set_PriceList WHERE version = '{0}' ) f ON b.MaterialCode = f.MaterialCode"; +" version =(\n" + +" SELECT\n" + +" max( version ) \n" + +" FROM\n" + +" Set_PriceListVersion \n" + +" )) temp2 ON temp1.SapMaterialCode = temp2.MaterialCode"; diff --git a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/SettleFisDiffDetailDapperRepository.cs b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/SettleFisDiffDetailDapperRepository.cs index 1c611486..1153f1c3 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/SettleFisDiffDetailDapperRepository.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/SettleFisDiffDetailDapperRepository.cs @@ -46,6 +46,8 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report public string SapCode { set; get; } } + + [ExcelExporter(Name = "未结汇总", AutoFitAllColumn = true, MaxRowNumberOnASheet = 500000)] public class SettleFisDiffSum { diff --git a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/UnSettleDiffDapperRepository.cs b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/UnSettleDiffDapperRepository.cs index 3a581541..26521d6f 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/UnSettleDiffDapperRepository.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/UnSettleDiffDapperRepository.cs @@ -32,6 +32,9 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report } + /// + /// 6.大众准时化未结差异比对表 + /// public class UnSettleDiffDapperRepository : DapperRepository, ITransientDependency { public UnSettleDiffDapperRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) @@ -44,71 +47,125 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report string str1 = "where 1=1 "; - -string sql1 = "SELECT\n" + -" a.MaterialCode,\n" + -" a.KENNCode,\n" + -" a.ChassisNumber,\n" + -" a.qty unsettleQty,\n" + -" b.qty \n" + -" a.Cp5Time \n"+ - -"FROM\n" + -" Set_unsettle a\n" + -" LEFT JOIN (\n" + -" SELECT\n" + -" ItemCode,\n" + -" KENNCode,\n" + -" ChassisNumber2,\n" + -" sum( qty ) qty \n" + -" FROM\n" + -" Set_fis \n" + -" WHERE\n" + -" state = 0 \n" + -" OR state = 4 \n" + -" GROUP BY\n" + -" ItemCode,\n" + -" KENNCode,\n" + -" ChassisNumber2 \n" + -" ) b ON a.ChassisNumber = b.ChassisNumber2 \n" + -" AND a.MaterialCode = b.ItemCode \n" + -" AND a.KENNCode = b.KENNCode {0}"; - - - - string sql2 = - "SELECT\n" + - " a.*,\n" + - " b.Qty unsettleQty \n" + + string sql1 = "SELECT\n" + + " a.MaterialCode,\n" + + " a.KENNCode,\n" + + " a.ChassisNumber,\n" + + " a.qty UNSettleQty,\n" + + " b.qty,\n" + + " a.CP5A CP5Time,\n" + + " c.MaterialCode SapMaterialCode,\n" + + " c.MaterialDesc MaterialDesc,\n" + + " a.model Factory \n" + "FROM\n" + - " (\n" + + " Set_unsettle a\n" + + " LEFT JOIN (\n" + " SELECT\n" + - " WMSState,\n" + - " WMSBillNum,\n" + " ItemCode,\n" + " KENNCode,\n" + " ChassisNumber2,\n" + - " sum( qty ) qty,\n" + - " ErpMaterialCode,\n" + - " ChassisNumber \n" + + " sum( qty ) qty \n" + " FROM\n" + " Set_fis \n" + " WHERE\n" + " state = 0 \n" + + " OR state = 4 \n" + " GROUP BY\n" + " ItemCode,\n" + " KENNCode,\n" + " ChassisNumber2,\n" + - " WMSState,\n" + - " WMSBillNum,\n" + - " ErpMaterialCode,\n" + - " ChassisNumber \n" + - " Cp5Time \n" + - " ) a\n" + - " LEFT JOIN Set_unsettle b ON a.ChassisNumber2 = b.ChassisNumber \n" + - " AND b.MaterialCode = a.ItemCode \n" + - " AND a.KENNCode = b.KENNCode {0}"; + " Model \n" + + " ) b ON a.ChassisNumber = b.ChassisNumber2 \n" + + " AND a.MaterialCode = b.ItemCode \n" + + " AND a.KENNCode = b.KENNCode\n" + + " LEFT JOIN Set_material c ON a.MaterialCode = c.CustomerPartCode {0}"; + + + + string sql2 = + "SELECT\n" + +" t1.*,\n" + +" t1.Qty * T2.Price AMT,\n" + +" T2.Price,\n" + +" Qty -(\n" + +" ISNULL( UnSettleQty, 0 )) DiffQty,\n" + +" Qty -(\n" + +" ISNULL( UnSettleQty, 0 ))* isnull( t2.Price, 0 ) DiffPrice \n" + +"FROM\n" + +" (\n" + +" SELECT\n" + +" temp1.WMSState,\n" + +" temp1.WMSBillNum,\n" + +" temp1.MaterialCode,\n" + +" temp1.KENNCode,\n" + +" temp1.ChassisNumber2,\n" + +" temp1.Qty,\n" + +" temp1.ChassisNumber,\n" + +" temp1.CP5Time,\n" + +" temp1.UnSettleQty,\n" + +" temp1.SapMaterialCode,\n" + +" temp1.MaterialDesc,\n" + +" temp1.MaterialGroup,\n" + +" temp2.MaterialCode AS ParentSapMaterialCode,\n" + +" temp2.MaterialDesc AS ParentMaterialDesc \n" + +" FROM\n" + +" (\n" + +" SELECT\n" + +" a.WMSState,\n" + +" a.WMSBillNum,\n" + +" a.MaterialCode,\n" + +" a.KENNCode,\n" + +" a.ChassisNumber2,\n" + +" a.Qty,\n" + +" a.ParentCode,\n" + +" a.ChassisNumber,\n" + +" a.CP5Time,\n" + +" b.Qty AS UnSettleQty,\n" + +" C.MaterialCode AS SapMaterialCode,\n" + +" C.MaterialDesc,\n" + +" C.EstimateTypeDesc AS MaterialGroup \n" + +" FROM\n" + +" (\n" + +" SELECT\n" + +" WMSState,\n" + +" WMSBillNum,\n" + +" ItemCode AS MaterialCode,\n" + +" KENNCode,\n" + +" ChassisNumber2,\n" + +" SUM( Qty ) AS Qty,\n" + +" ErpMaterialCode AS ParentCode,\n" + +" ChassisNumber,\n" + +" CP5Time \n" + +" FROM\n" + +" Set_fis \n" + +" WHERE\n" + +" ( State = 0 ) \n" + +" GROUP BY\n" + +" ItemCode,\n" + +" KENNCode,\n" + +" ChassisNumber2,\n" + +" WMSState,\n" + +" WMSBillNum,\n" + +" ErpMaterialCode,\n" + +" ChassisNumber,\n" + +" CP5Time \n" + +" ) AS a\n" + +" LEFT OUTER JOIN Set_Unsettle AS b ON a.ChassisNumber2 = b.ChassisNumber \n" + +" AND b.MaterialCode = a.MaterialCode \n" + +" AND a.KENNCode = b.KENNCode\n" + +" LEFT OUTER JOIN Set_material AS C ON a.MaterialCode = C.CustomerPartCode \n" + +" ) AS temp1\n" + +" LEFT OUTER JOIN Set_material AS temp2 ON temp1.ParentCode = temp2.CustomerPartCode \n" + +" ) t1\n" + +" LEFT JOIN (\n" + +" SELECT\n" + +" MaterialCode,\n" + +" Price \n" + +" FROM\n" + +" Set_PriceList \n" + +"WHERE\n" + +" version = ( SELECT max( version ) FROM Set_PriceListVersion )) t2 ON t1.MaterialCode = t2.MaterialCode"; string _sql = string.Empty; diff --git a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/UnSettledDetailDapperRepository.cs b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/UnSettledDetailDapperRepository.cs index ff33ff8f..f80f2d31 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/UnSettledDetailDapperRepository.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/UnSettledDetailDapperRepository.cs @@ -11,18 +11,23 @@ using Dapper; using Win.Sfs.SettleAccount.FISes; using Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report.ExportDto; using Win.Sfs.SettleAccount.Entities.UnSettle; +using Win.Sfs.SettleAccount.Entities.Materials; +using Win.Sfs.SettleAccount.Entities.Prices; namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report { + /// + /// 7.大众准时化未结明细表(包含漏结,漏结要有标识) + /// public class UnSettledDetailDapperRepository : DapperRepository, ITransientDependency { - //ERP总成开票报表 + public UnSettledDetailDapperRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } - public virtual List GetDiffReport(string year, string begin, string end, string customcode, string version,string materialCode,string materialGroup,string sapCode) + public virtual List GetDiffReport(string year, string begin, string end, string customcode, string version, string materialCode, string materialGroup, string sapCode) { string str = string.Empty; @@ -30,7 +35,7 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report if (!string.IsNullOrEmpty(begin)) { - str += string.Format(" and beginTime>'{0}' ",begin); + str += string.Format(" and beginTime>'{0}' ", begin); } if (!string.IsNullOrEmpty(end)) { @@ -38,81 +43,113 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report } if (!string.IsNullOrEmpty(materialCode)) { - str += string.Format(" and MaterialCode='{0}' ", materialCode); + str += string.Format(" and ItemCode='{0}' ", materialCode); } if (!string.IsNullOrEmpty(materialGroup)) { str += string.Format(" and MaterialGroup='{0}' ", materialGroup); } - if (!string.IsNullOrEmpty(sapCode)) - { - str += string.Format(" and MaterialGroup='{0}' ", materialGroup); - } + //if (!string.IsNullOrEmpty(sapCode)) + //{ + // str += string.Format(" and SapCode='{0}' ", materialGroup); + //} var sqlString = - " SELECT\n" + - " A.*,\n" + - " C.Price,\n" + - " ISNULL( A.QTY, 0 )* ISNULL( C.Price, 0 ) AMT \n" + - "FROM\n" + - " (\n" + - " SELECT DISTINCT\n" + - " '' WMSState,\n" + - " '' UnSettleVersion,\n" + - " '' WMSBillNum,\n" + - " BeginTime CP5Time,\n" + - " ErpMaterialCode MaterialCode,\n" + - " ChassisNumber,\n" + - " KENNCode,\n" + - " 1 QTY,\n" + - " ErpMaterialCode ParentMaterialCode,\n" + - " '' FLAG \n" + - " FROM\n" + - " Set_fis \n" + - " WHERE\n" + - " 1 = 1 \n" + - " AND STATE = 0 {0} UNION ALL\n" + - " SELECT\n" + - " WMSState,\n" + - " UnSettleVersion,\n" + - " WMSBillNum,\n" + - " BeginTime CP5Time,\n" + - " ItemCode MaterialCode,\n" + - " ChassisNumber,\n" + - " KENNCode,\n" + - " QTY,\n" + - " ErpMaterialCode,\n" + - " '' FLAG \n" + - " FROM\n" + - " [Set_fis] \n" + - " WHERE\n" + - " 1 = 1 \n" + - " AND STATE = 0 {0} UNION ALL\n" + - " SELECT\n" + - " WMSState,\n" + - " UnSettleVersion,\n" + - " WMSBillNum,\n" + - " BeginTime CP5Time,\n" + - " ItemCode MaterialCode,\n" + - " ChassisNumber,\n" + - " KENNCode,\n" + - " QTY,\n" + - " ErpMaterialCode,\n" + - " 'L' FLAG \n" + - " FROM\n" + - " [Set_fis] \n" + - " WHERE\n" + - " 1 = 1 \n" + - " AND STATE = 4 {0}\n" + - " ) A\n" + - " LEFT JOIN ( SELECT Price, MaterialCode FROM Set_PriceList WHERE version = ( SELECT Max( Version ) FROM Set_PriceList ) ) C ON a.MaterialCode = c.MaterialCode"; - - - - string _sql = string.Format(sqlString, version); + "SELECT\n" + + " A.*,\n" + + " C.Price,\n" + + " ISNULL( A.QTY, 0 )* ISNULL( C.Price, 0 ) AMT,\n" + + " B.EstimateTypeDesc MaterialGroup,\n" + + " B.MaterialDesc MaterialDesc,\n" + + " d.MaterialDesc ParentMaterialDesc \n" + + "FROM\n" + + " (\n" + + " SELECT\n" + + " WMSState,\n" + + " WMSBillNum,\n" + + " UnSettleVersion,\n" + + " BeginTime CP5Time,\n" + + " ItemCode MaterialCode,\n" + + " ChassisNumber,\n" + + " KENNCode,\n" + + " QTY,\n" + + " ErpMaterialCode ParentSapMaterialCode,\n" + + " '' FLAG \n" + + " FROM\n" + + " Set_fis {0} \n" + + " WHERE\n" + + " 1 = 1 \n" + + " AND STATE = 0 UNION ALL\n" + + " SELECT\n" + + " WMSState,\n" + + " UnSettleVersion,\n" + + " WMSBillNum,\n" + + " BeginTime CP5Time,\n" + + " ItemCode MaterialCode,\n" + + " ChassisNumber,\n" + + " KENNCode,\n" + + " QTY,\n" + + " ErpMaterialCode ParentSapMaterialCode,\n" + + " 'L' FLAG \n" + + " FROM\n" + + " Set_fis {0} \n" + + " WHERE\n" + + " 1 = 1 \n" + + " AND STATE = 4 \n" + + " ) A\n" + + " LEFT JOIN Set_material B ON a.MaterialCode = b.CustomerPartCode\n" + + " LEFT JOIN ( SELECT Price, MaterialCode FROM Set_PriceList WHERE version = ( SELECT Max( Version ) FROM Set_PriceList ) ) C ON a.MaterialCode = c.MaterialCode\n" + + " LEFT JOIN Set_material d ON a.ParentSapMaterialCode = d.MaterialCode"; + + + + + + + + var _materialList = DbConnection.Query("select * from set_material").ToList(); + var _priceList = DbConnection.Query("select MaterialCode,Price from Set_PriceList where version=(select max(version) from set_Set_PriceListVersion)").ToList(); + + + + string _sql = string.Format(sqlString, str); ; var _query = DbConnection.Query(_sql); - return _query.ToList(); + + var _list = _query.ToList(); + var _ls = _list.Where(p=>p.Flag!="L").GroupBy(p => new { p.KENNCode, p.ChassisNumber, p.ParentSapMaterialCode }).Select(p => p.FirstOrDefault()).ToList(); + + foreach (var itm in _ls) + { + + var parentMaterial = new UnSettleDetailReport(); + parentMaterial.WmsBillNum = itm.WmsBillNum; + parentMaterial.CP5Time = itm.CP5Time; + parentMaterial.KENNCode = itm.KENNCode; + parentMaterial.ChassisNumber = itm.ChassisNumber; + parentMaterial.WmsState = itm.WmsState; + parentMaterial.SapMaterialCode = itm.ParentSapMaterialCode; + parentMaterial.MaterialDesc = itm.ParentMaterialDesc; + parentMaterial.MaterialCode = itm.ParentSapMaterialCode; + parentMaterial.ParentSapMaterialCode = itm.ParentSapMaterialCode; + parentMaterial.ParentMaterialDesc = itm.ParentMaterialDesc; + + var _price=_priceList.Where(p => p.MaterialCode == itm.ParentSapMaterialCode).FirstOrDefault(); + if (_price != null) + { + parentMaterial.Price = _price.Price; + parentMaterial.Amt = _price.Price; + } + var _material=_materialList.Where(p => p.MaterialCode == itm.ParentSapMaterialCode).FirstOrDefault(); + if (_material != null) + { + parentMaterial.MaterialGroup = _material.EstimateTypeDesc; + + } + _list.Add(parentMaterial); + } + + return _list; } } } diff --git a/src/Modules/SettleAccount/src/SettleAccount.Job/Services/OutputService.cs b/src/Modules/SettleAccount/src/SettleAccount.Job/Services/OutputService.cs index 3881f5ed..e5d6f65f 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.Job/Services/OutputService.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.Job/Services/OutputService.cs @@ -57,8 +57,26 @@ namespace SettleAccount.Job.Services _taskjobRepository.UpdateTaskJob(Id, _task); //保存导出文件到服务器存成二进制 } + public void Export(Guid Id, string fileName, List p_list, List p_list1) where T1 : class, new() + where T2: class, new() + { + ExcelExporter _exporter = new ExcelExporter();//导出Excel + + var result = _exporter + .Append(p_list, "sheet1") + .SeparateBySheet() + .Append(p_list1) + .ExportAppendDataAsByteArray(); + + + + result.ShouldNotBeNull(); + _fileContainer.SaveAsync(fileName, result.Result, true); + var _task = new Win.Sfs.SettleAccount.Entities.TaskJob() { DownFileName = fileName }; + _taskjobRepository.UpdateTaskJob(Id, _task); + //保存导出文件到服务器存成二进制 + } - diff --git a/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/InvoiceSettledDiffExportService.cs b/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/InvoiceSettledDiffExportService.cs index 76951a32..099b2b5f 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/InvoiceSettledDiffExportService.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/InvoiceSettledDiffExportService.cs @@ -70,8 +70,12 @@ namespace SettleAccount.Job.Services SalePrice =itm. SalePrice , DiffPrice =itm. DiffPrice , SapMaterialCode =itm.SapMaterialCode , - Factory = itm.Factory - + MaterialDesc=itm.MaterialDesc, + + + Factory = itm.Factory, + + diff --git a/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/SettleFisDiffExportService.cs b/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/SettleFisDiffExportService.cs index c2fd9c20..d223b3ce 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/SettleFisDiffExportService.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/SettleFisDiffExportService.cs @@ -1,5 +1,8 @@ -using System; +using NPOI.SS.UserModel; +using NPOI.XSSF.UserModel; +using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,12 +15,18 @@ using Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report; namespace SettleAccount.Job.Services.Report { + /// + /// 3.大众准时化结算数量差异比对表 + /// public class SettleFisDiffExportService : ITransientDependency, IExportJob { private readonly SettleFisDiffDetailDapperRepository _dapper; private readonly OutputService _outputService; + + + public SettleFisDiffExportService(SettleFisDiffDetailDapperRepository dapper, OutputService outputService) { _dapper = dapper; @@ -33,7 +42,7 @@ namespace SettleAccount.Job.Services.Report var end = p_list.Where(p => p.Name == "EndTime").FirstOrDefault().Value; var _list= _dapper.GetReportList(version, materialCode, begin,end); - _list.GroupBy(p => new { p.MaterialCode,p.SapCode }).Select(p =>new SettleFisDiffSum + var _ls= _list.GroupBy(p => new { p.MaterialCode,p.SapCode }).Select(p =>new SettleFisDiffSum { MaterialCode= p.Key.MaterialCode, @@ -46,18 +55,132 @@ namespace SettleAccount.Job.Services.Report }); + //_outputService.Export(id, string.Format("大众准时化结算数量差异比对表_{0}.xlsx", Guid.NewGuid().ToString()),_list.ToList(),_ls.ToList()); + _outputService.Export(id, string.Format("大众准时化结算数量合计_{0}.xlsx", Guid.NewGuid().ToString()), _ls.ToList()); - - - + _outputService.Export(id,string.Format("大众准时化结算数量差异比对表_{0}.xlsx", Guid.NewGuid().ToString()), _list); + return id.ToString(); + } + /// + /// 将数个Excel文件中的第一个工作表合并至一个Excel文件中 + /// + /// 需要合并的数个Excel文件路径 + /// 合并成的一个Excel文件路径 + private void MergeExcels(string[] excelFilePaths, string desFilePath) + { + XSSFWorkbook mergeWorkBook = new XSSFWorkbook(); + for (int i = 0; i < excelFilePaths.Length; i++) + { + if (File.Exists(excelFilePaths[i])) + { + using (FileStream fs = new FileStream(excelFilePaths[i], FileMode.Open, FileAccess.Read, FileShare.Write)) + { + XSSFWorkbook tmpWorkBook = new XSSFWorkbook(fs); + XSSFSheet tmpSheet = tmpWorkBook.GetSheetAt(0) as XSSFSheet; + if (excelFilePaths[i].Contains("当月结算表")) + { + IRow row = null; + for (int j = 2; j < tmpSheet.PhysicalNumberOfRows && tmpSheet.GetRow(j) != null; j++)/*j=1 从索引的第一行开始过滤掉表头*/ + { + row = tmpSheet.GetRow(j); + try + { + if (!string.IsNullOrWhiteSpace(row.GetCell(1).ToString()))/*验证数值非空*/ + { + //cell.CSS("color:red;font-weight:bold;font-size:11;font-name:宋体;border-type:thin;") + /*修改样式关键代码*/ + ICellStyle style = tmpWorkBook.CreateCellStyle(); + style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Orange.Index; + style.FillPattern = FillPattern.SolidForeground; + style.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Orange.Index; + + style.BorderTop = BorderStyle.Thin;//上 + style.BorderBottom = BorderStyle.Thin;//下 + style.BorderLeft = BorderStyle.Thin;//左 + style.BorderRight = BorderStyle.Thin;//右 + style.VerticalAlignment = VerticalAlignment.Center; + style.Alignment = HorizontalAlignment.Center; + + IFont font = tmpWorkBook.CreateFont(); + font.FontHeightInPoints = 10; // 字体大小 直接对应Excel中的字体大小 + font.FontName = "宋体"; //跟Excel中的字体值一样,直接写对应的名称即可 + font.IsBold = true;//加粗 + style.SetFont(font); + /*修改指定单元格样式 如果要修改行样式则需要将row.Cells.Count循环出来,挨个设置!*/ + for (int g = 0; g < row.Cells.Count; g++) + { + row.Cells[g].CellStyle = style; + } + row.RowStyle = style; + + if (row.GetCell(1).ToString() == "核算表不存在") + { + ICellStyle style1 = tmpWorkBook.CreateCellStyle(); + style1.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Yellow.Index; + style1.FillPattern = FillPattern.SolidForeground; + style1.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Yellow.Index; + + style1.BorderTop = BorderStyle.Thin;//上 + style1.BorderBottom = BorderStyle.Thin;//下 + style1.BorderLeft = BorderStyle.Thin;//左 + style1.BorderRight = BorderStyle.Thin;//右 + style1.VerticalAlignment = VerticalAlignment.Center; + style1.Alignment = HorizontalAlignment.Center; + IFont font1 = tmpWorkBook.CreateFont(); + font1.FontHeightInPoints = 10; // 字体大小 直接对应Excel中的字体大小 + font1.FontName = "宋体"; //跟Excel中的字体值一样,直接写对应的名称即可 + font1.IsBold = true;//加粗 + font1.Color = NPOI.HSSF.Util.HSSFColor.White.Index; + style1.SetFont(font); + //style.fon + //HSSFFont font = workbookAll.CreateFont(); + //font.FontHeightInPoints = 9; // 字体大小 直接对应Excel中的字体大小 + //font.FontName = "宋体"; //跟Excel中的字体值一样,直接写对应的名称即可 + //font.Boldweight = HSSFFont.BOLDWEIGHT_BOLD;//加粗 + //style.SetFont(font); + + + /*修改指定单元格样式 如果要修改行样式则需要将row.Cells.Count循环出来,挨个设置!*/ + for (int g = 0; g < row.Cells.Count; g++) + { + row.Cells[g].CellStyle = style1; + } + row.RowStyle = style1; + + } + /*重新修改文件指定单元格样式*/ + } + } + catch + { } + } + } + tmpSheet.CopyTo(mergeWorkBook, Path.GetFileNameWithoutExtension(excelFilePaths[i]), true, true); + } + } + /* 考虑数据量,此处可以限制最多可以合并工作表的数量 */ + //if (mergeWorkBook.NumberOfSheets >= 200) + //{ + // break; + //} + } + if (mergeWorkBook.NumberOfSheets != 0) + { + FileStream fsDesFile = new FileStream(desFilePath, FileMode.OpenOrCreate, FileAccess.Write); + mergeWorkBook.Write(fsDesFile); + fsDesFile.Close(); + mergeWorkBook.Close(); + } + else + { + mergeWorkBook.Close(); + } + } - _outputService.Export(id,string.Format("大众准时化结算数量差异比对表_{0}.xlsx", Guid.NewGuid().ToString()), _list); - return id.ToString(); - } } } From fd76b6b25ab301fc1d4fe4a0652e44b9acb5fc9f Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 24 Nov 2021 08:43:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/VSWorkspaceState.json | 2 +- .vs/Win.Sfs.SmartSettlementSystem.PG/v16/.suo | Bin 39936 -> 70144 bytes .../InvoiceSettledDiffDapperRepository.cs | 49 ++---------------- ....Snowflakes.csproj.AssemblyReference.cache | Bin 18773 -> 105429 bytes ....Sfs.Shared.csproj.AssemblyReference.cache | Bin 203914 -> 113933 bytes 5 files changed, 6 insertions(+), 45 deletions(-) diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json index fd5a9563..3a989def 100644 --- a/.vs/VSWorkspaceState.json +++ b/.vs/VSWorkspaceState.json @@ -2,6 +2,6 @@ "ExpandedNodes": [ "" ], - "SelectedNode": "\\WY.NewJit.sln (src\\Modules\\派格FIS\\WY.NewJit.sln)", + "SelectedNode": "\\SettleAccount.sln (src\\SettleAccount.sln)", "PreviewInSolutionExplorer": false } \ No newline at end of file diff --git a/.vs/Win.Sfs.SmartSettlementSystem.PG/v16/.suo b/.vs/Win.Sfs.SmartSettlementSystem.PG/v16/.suo index c73c4fe0d1176b4a34d937d6a0bb89d1d6ed37e0..091b16411d3e2226194105180fe8c84eca0fe6e5 100644 GIT binary patch delta 3681 zcmeH}ZERE58OME$p~1C-Nxa|$6HIWkkoup&?uB~3yK z2{9oZT9#GB{~`h1hbfAtsj6DwGOc12^Hj8YeZ+p^8R7u(EOC(FZp4Xho$hhnbM$bS z=pmjbdWk-wpEyDc5HAo%iDSedF+?0EhKU5h)l3xr7izLqn15hxfU8zVEF-wnTuEN% zXKJn@Z}Y?8O7dr3NX4Hm=PEu(P~+jRTgICIT}G@k=EGw2Z{W`JaQPNd!2KhKZJD|# zQ}aFGVM$Z1IW1CFVIIzGJNis*IR+Zd#Y}fqV&2qb zT9WBn=nkOI+?L~5Jkqbtn;+C)D!9f>Ji!VVy+hD$SjwYa_tiLKtHs-TH-be54A`DD zaVxn%S!=a9o9X}J@$gbVEvv`p=YBODk=%ZdPl-glzM&eSt-VsD-?3D;_ajhH4(6;ci*t6WngEDoFuJh{--xP~1^f2#Y?S5Q~JP;iwYz zN25x1g1l(L@V}X{V3Ajr6iM=S30`-^D=1x(UkFICnBexSO2pF@bH@~aW&_Ee-awAH zrI;KOqV9+yC>}XLF8JIuH5Leqsz;K$qC+MgBuh|jubMoqPg+U;!c9n6>r6)KU%g0s zq}CerafZ7uzhhcM{n`7D2iH=bzGv}y{+9n}IzP_E(=m6Z$*kkouYJ*m$#Dt-%NIew zvmzS=%lM!MGQ_gQ#P3+1McH?3HTqVz@+g+hUeC#1 z?Bqz9_SxC%?3;+lL4FXVl}Mb= z!S&);zN!eSB2u!8a#RTTWkv8HxHeVPK&tWY&zDMAir~6b@_g!>4EW~^SaX6D8zD{- zqr{8EcZgHOy^Aexu!)e8EcrF2!g1VQ-@|^0iDTcz_Vspl6)nE+C!Z@p;^Ca-74#R5 z{|9><>mIs+R_BcVJspAvD_|;n6}^W(!1%YDnF|+7|A5)u7F6!f#f1%iTrR)EehK%s zYLu6cu}}Gm5I02@mUH8cO|Rgd%g?URyEXXaNC6rjsY9`=9#X}}+8t43>E&m4+i*ps z1*?lQg9b1oU4pW63oh&r;`N7YD-Mu_-RZxN#boJ^aiZfC6mKamDR;F|xq`7-yxVY2 zoAZ`1W<|K}WOARCtQld(Y{Ri}K#NqCGL}o8G^7{46&Pbu#xDcn)y8C?Q5&hUF|wIU_xixZGUKipk_NxVEPqn>#AmbXtqt_C_+~BRb*}9ewC&6}3diYm6!6 z{m;|eyuV`?8Sw6|?_qYY5kEMRhxeW;r6n(r>_;JP&BczVo%m?yCuIM5+&-CymyS4a zcW;sA>@;$DTYQHQa+lG*A$F5?IfoyKR^;p{Ww*HW=_%8Vd8pj&fHm|g1>Nn1rFj2f zxGbYU)uVYZsHGT<+@c^FP40_pt+8^(N){gltg)(ebc7Tqj0aq(863mx{vvjVcDq4A z=wi(@{x@)R*^sI)(!9@B=_z=pka8BGv)iim9&#~OpB`g8oS<`iCw*s^T61wHMU8FJ{~;;GcGeK@>}F+08dBg)%Mm=>IPeRD1uw0Gpsh*aJrqo|jn V<<0(Lyj*Q(PHkeWo1xk6`Ul$hex(2a delta 1023 zcmb`GUr1AN6vy|Q*UY)AD@||H%tXQm2fEF9HOsrQKWY&Rf*umw)S%K>F({05^kgui z-4hW)ATsMEbnccF_%K-cQV&KC(VvGN3xa%5N+Q?yj4gVoHxGO`_jk_kckb`^{hePp zCWW7xZ#C=^roYT)G9AQ_W9#X3nloa~H!Gq+NjDD_2Zz2CF28##telW(#5^Kgv}!(X z<-itzHEHrGbri}A%cTem1GYmXq)JrrSuo&PJy|cq7lRV8A8?hefESm6ZJ-=f00nFZ zc2Ehbzz(`-=^1OpR}*jo7jT1S-~lZ_1+AbB>;dgyFW3ho0A)@ zO(%A?9`%1C$x=l&i$pb%hsIK*k((rOGbJch(Io7~s$68&YdWob2)-=ViCaUDNXC^r z<3g`Z$%1c^6KtF`R%)#xaXTgCOcSsuxl}$Ex@)YJycAZxcy5GTje%w>YrW>;0 zR$}>bS!1OPMJF|>;~Jtr^Gv3?LABB4R0mbZpx+&Exc&YXN2@>3?`T%tfq{T)z}3>+ zpLqr%_dL#OCP8B{XFj)j9?ef*rrqXJ((Whirx4+G{r3Wzny#ikrChI1X13Y+U_qaG zB_=6)^#*z3RTT4Iprz{`3eL7uXe~zeHiae<k! diff --git a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/InvoiceSettledDiffDapperRepository.cs b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/InvoiceSettledDiffDapperRepository.cs index b46e903d..85c55cc7 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/InvoiceSettledDiffDapperRepository.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/InvoiceSettledDiffDapperRepository.cs @@ -11,6 +11,11 @@ using Win.Sfs.SettleAccount.Reports.InvoiceSettledDiffs; namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob { + + + /// + /// 1.大众发票与结算汇总核对表-UPdate + /// public class InvoiceSettledDiffDapperRepository : DapperRepository, ITransientDependency { public InvoiceSettledDiffDapperRepository(IDbContextProvider dbContextProvider) @@ -22,50 +27,6 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob - // string sqlString = - //"SELECT \n" + string.Format(" '{0}' as Version ,", version) + "\n" + - //" b.*,\n" + - //" ISnull(\n" + - //" c.Qty,\n" + - //" IsNull( d.qty, 0 )) SettleQty,\n" + - //"CASE\n" + - //" \n" + - //" WHEN e.Type = 'CP7报废' THEN\n" + - //" isnull( e.Qty, 0 ) ELSE 0 \n" + - //" END AS CP7ScrapQty,\n" + - //"CASE\n" + - //" \n" + - //" WHEN e.Type = '索赔' THEN\n" + - //" isnull( e.Qty, 0 ) ELSE 0 \n" + - //" END AS ClaimQty,\n" + - //" (\n" + - //" b.InvoiceQty - ISnull(\n" + - //" c.Qty,\n" + - //" IsNull( d.qty, 0 ))) DiffQty,\n" + - //" Isnull( f.Price, 0 ) SalePrice,\n" + - //" b.InvoicePrice - Isnull( f.Price, 0 ) DiffPrice,\n" + - //" '' AS SapMaterialCode \n" + - //"FROM\n" + - //" (\n" + - //" SELECT\n" + - //" Factory, MaterialCode,\n" + - //" SUM( QTY ) InvoiceQty,\n" + - //" sum( amt ) InvoiceAmt,\n" + - //" sum( amt )/ sum( Qty ) InvoicePrice \n" + - //" FROM\n" + - //" Set_Invoice \n" + - //" WHERE\n" + - //" version = '{0}' \n" + - //" GROUP BY\n" + - //" MaterialCode,Factory \n" + - //" ) b\n" + - //" LEFT JOIN ( SELECT SUM( QTY ) Qty, MaterialCode FROM Set_settle WHERE version = '{0}' GROUP BY MaterialCode ) c ON b.MaterialCode = c.MaterialCode\n" + - //" LEFT JOIN ( SELECT SUM( QTY ) qty, MaterialCode FROM Set_KanbanSettle WHERE version = '{0}' GROUP BY MaterialCode ) d ON b.MaterialCode = d.MaterialCode\n" + - //" LEFT JOIN ( SELECT * FROM Set_ScrapClaims WHERE version = '{0}' ) e ON b.MaterialCode = e.MaterialCode\n" + - //" LEFT JOIN ( SELECT * FROM Set_PriceList WHERE version = '{0}' ) f ON b.MaterialCode = f.MaterialCode"; - - - string sqlString = "SELECT\n" + " temp1.*, temp1.InvoicePrice - Isnull( temp2.Price, 0 ) DiffPrice , \n" + diff --git a/src/Shared/Win.Abp.Snowflakes/obj/Debug/netcoreapp5/Win.Abp.Snowflakes.csproj.AssemblyReference.cache b/src/Shared/Win.Abp.Snowflakes/obj/Debug/netcoreapp5/Win.Abp.Snowflakes.csproj.AssemblyReference.cache index c0945f0514ebc5eac7e4ea9acc45a42d3d0ac87a..a8c100ba466e6ca0b0b93d00aab8224a8d1e2f68 100644 GIT binary patch literal 105429 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 IXW#z+0b$!{V*mgE delta 28 jcmcb*o$cx*MqXd1pkQZ4Mp*_12F9Yvf~@KrO%y!=dUppf diff --git a/src/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.csproj.AssemblyReference.cache b/src/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.csproj.AssemblyReference.cache index b792a35760f30ca6eafacf7774492e29c6e0d08b..421e2dd799a077f45ffc34f1449f979c525003c4 100644 GIT binary patch delta 59 zcmV-B0L1@_xeSf^1`16=Qd2_#0lfeKlh9%`u|9b?vv)yg1+#WYcM6x#3<3m`TxArq R*H*DChuqWwx7^eMu1Amo7qkEX literal 203914 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