diff --git a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/HQHSettledDetailDapperRepository.cs b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/HQHSettledDetailDapperRepository.cs index d0053c72..7d7f137c 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/HQHSettledDetailDapperRepository.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/HQHSettledDetailDapperRepository.cs @@ -20,6 +20,16 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report : base(dbContextProvider) { } + + /// + /// 正向对比,有结算无发货报表 + /// + /// + /// + /// + /// + /// + /// public virtual List GetInvoiceSettledDetailDiffReportList(string version, string materialCode, string begin, string end, string materialGroup) { @@ -62,58 +72,62 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report //// condition += string.Format(" B.chassisNumber='{0}' ", materialGroup); ////} string str = "SELECT\n" + - " temp1.交货日期,\n" + - " isnull( temp1.手工或自动, '' ) 手工或自动,\n" + - " isnull( temp1.交货单号, '' ) 交货单号,\n" + - " temp1.收货仓库,\n" + - " temp1.收货仓库描述,\n" + - " temp1.订货看板编号,\n" + - " temp1.订货零件号,\n" + - " temp1.Sap编码,\n" + - " temp1.发货零件号,\n" + - " temp1.物料组,\n" + - " temp1.零件中文名称,\n" + - " temp1.发货数量,\n" + - " temp1.发货状态,\n" + - " temp1.结算验收单号,\n" + - " temp1.结算数量,\n" + - " temp1.结算单价,\n" + - " temp1.结算金额,\n" + - " isnull( TEMP2.Price, 0 ) AS 发货定价,\n" + - " isnull( temp1.发货数量, 0 ) * isnull( TEMP2.Price, 0 ) AS 发货总金额,\n" + - " 0 AS 数量差异,\n" + - " temp1.结算单价 - ISNULL( TEMP2.Price, 0 ) AS 单价差异,\n" + - " ( temp1.结算单价 - ISNULL( TEMP2.Price, 0 ) ) * temp1.结算数量 AS 差异总金额\n" + - "FROM\n" + - " (\n" + - " SELECT\n" + - " b.WmsBillNum AS 交货单号,\n" + - " b.LastModificationTime AS 交货日期,\n" + - " b.IsAuto AS 手工或自动,\n" + - " a.StorageLocation AS 收货仓库,\n" + - " a.StorageLocationDesc AS 收货仓库描述,\n" + - " a.HQHKanBan AS 订货看板编号,\n" + - " a.MaterialCode AS 订货零件号,\n" + - " c.MaterialCode Sap编码,\n" + - " '' AS 发货零件号,\n" + - " c.MaterialDesc AS 零件中文名称,\n" + - " isnull( b.Qty, 0 ) AS 发货数量,\n" + - " isnull( b.State, 0 ) AS 发货状态,\n" + - " a.AcceptanceNo AS 结算验收单号,\n" + - " isnull( a.Qty, 0 ) AS 结算数量,\n" + - " isnull( a.Price, 0 ) AS 结算单价,\n" + - " isnull( a.Amt, 0 ) AS 结算金额 ,\n" + - " C.EstimateTypeDesc AS 物料组 \n" + - " FROM\n" + - " Set_HQ_H_Platform AS a\n" + - " LEFT OUTER JOIN Set_HQ_H_Kanban AS b ON a.HQHKanBan = b.Kanban \n" + - " AND a.MaterialCode = b.MaterialCode\n" + - " LEFT OUTER JOIN Set_material AS c ON a.MaterialCode = c.CustomerPartCode \n" + - " WHERE\n" + - " ( a.HQHKanBan <> 'BJ' ) \n" + - " AND a.Version= '{0}' {1} \n" + - " ) AS temp1\n" + - " LEFT OUTER JOIN ( SELECT Price, MaterialCode FROM Set_PriceList WHERE ( Version = ( SELECT MAX ( Version ) FROM Set_PriceList ) ) ) AS TEMP2 ON temp1.Sap编码 = TEMP2.MaterialCode" ; + " temp1.交货时间,\n" + + " isnull( temp1.手工或自动, '' ) 手工或自动,\n" + + " isnull( temp1.交货单号, '' ) 交货单号,\n" + + " temp1.[工厂],\n" + + " temp1.收货仓库,\n" + + " temp1.收货仓库描述,\n" + + " temp1.订货看板编号,\n" + + " temp1.订货零件号,\n" + + " temp1.验收单日期,\n" + + " temp1.Sap编码,\n" + + " temp1.看板编号,\n" + + " temp1.物料组,\n" + + " temp1.零件中文名称,\n" + + " temp1.发货数量,\n" + + " temp1.发货状态,\n" + + " temp1.结算验收单号,\n" + + " temp1.结算数量,\n" + + " temp1.结算单价,\n" + + " temp1.结算金额,\n" + + " isnull( TEMP2.Price, 0 ) AS 发货定价,\n" + + " isnull( temp1.发货数量, 0 ) * isnull( TEMP2.Price, 0 ) AS 发货总金额,\n" + + " 0 AS 数量差异,\n" + + " temp1.结算单价 - ISNULL( TEMP2.Price, 0 ) AS 单价差异,\n" + + " ( temp1.结算单价 - ISNULL( TEMP2.Price, 0 ) ) * temp1.结算数量 AS 差异总金额 \n" + + "FROM\n" + + " (\n" + + " SELECT\n" + + " b.WmsBillNum AS 交货单号,\n" + + " b.LastModificationTime AS 交货时间,\n" + + " b.IsAuto AS 手工或自动,\n" + + " a.StorageLocation AS 收货仓库,\n" + + " a.StorageLocationDesc AS 收货仓库描述,\n" + + " a.HQHKanBan AS 订货看板编号,\n" + + " a.MaterialCode AS 订货零件号,\n" + + " c.MaterialCode Sap编码,\n" + + " c.MaterialDesc AS 零件中文名称,\n" + + " isnull( b.Qty, 0 ) AS 发货数量,\n" + + " isnull( b.State, 0 ) AS 发货状态,\n" + + " a.AcceptanceNo AS 结算验收单号,\n" + + " isnull( a.Qty, 0 ) AS 结算数量,\n" + + " isnull( a.Price, 0 ) AS 结算单价,\n" + + " isnull( a.Amt, 0 ) AS 结算金额 ,\n" + + " C.EstimateTypeDesc AS 物料组,\n" + + " a.Factory AS 工厂,\n" + + " a.KanbanNumber AS 看板编号,\n" + + " a.AcceptanceDate AS 验收单日期 \n" + + " FROM\n" + + " Set_HQ_H_Platform AS a\n" + + " LEFT OUTER JOIN Set_HQ_H_Kanban AS b ON a.HQHKanBan = b.Kanban \n" + + " AND a.MaterialCode = b.MaterialCode\n" + + " LEFT OUTER JOIN Set_material AS c ON a.MaterialCode = c.CustomerPartCode \n" + + " WHERE\n" + + " ( a.HQHKanBan <> 'BJ' ) \n" + + " AND a.Version= '{0}' { 1 } \n" + + " ) AS temp1\n" + + " LEFT OUTER JOIN ( SELECT Price, MaterialCode FROM Set_PriceList WHERE ( Version = ( SELECT MAX ( Version ) FROM Set_PriceList ) ) ) AS TEMP2 ON temp1.Sap编码 = TEMP2.MaterialCode"; var _sql = string.Format(str, version, condition); var _query = DbConnection.Query(_sql, null, null, true, 1200, null); @@ -122,6 +136,91 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report } + /// + /// 反向对比,有发货无结算报表 + /// + /// + /// + /// + /// + /// + /// + public virtual List GetReverseSettledDetailDiffReportList(string version, string materialCode, string begin, string end, string materialGroup) + { + + List _list = new List(); + + string condition = " "; + + //if (!string.IsNullOrEmpty(begin)) + //{ + // condition += string.Format(" and a.LastModificationTime>='{0}' ", begin); + //} + //if (!string.IsNullOrEmpty(end)) + //{ + // condition += string.Format(" and a.LastModificationTime<='{0}' ", end); + //} + + string str = "SELECT\n" + + " temp1.交货时间,\n" + + " isnull( temp1.手工或自动, '' ) 手工或自动,\n" + + " isnull( temp1.交货单号, '' ) 交货单号,\n" + + " temp1.收货仓库,\n" + + " temp1.收货仓库描述,\n" + + " temp1.订货看板编号,\n" + + " temp1.订货零件号,\n" + + " temp1.Sap编码,\n" + + " temp1.发货零件号,\n" + + " temp1.物料组,\n" + + " temp1.零件中文名称,\n" + + " temp1.发货数量,\n" + + " temp1.发货状态,\n" + + " temp1.结算验收单号,\n" + + " temp1.结算数量,\n" + + " temp1.结算单价,\n" + + " temp1.结算金额,\n" + + " isnull( TEMP2.Price, 0 ) AS 发货定价,\n" + + " isnull( temp1.发货数量, 0 ) * isnull( TEMP2.Price, 0 ) AS 发货总金额,\n" + + " 0 AS 数量差异,\n" + + " temp1.结算单价 - ISNULL( TEMP2.Price, 0 ) AS 单价差异,\n" + + " ( temp1.结算单价 - ISNULL( TEMP2.Price, 0 ) ) * temp1.结算数量 AS 差异总金额 \n" + + "FROM\n" + + " (\n" + + " SELECT\n" + + " a.WmsBillNum AS 交货单号,\n" + + " a.LastModificationTime AS 交货时间,\n" + + " a.IsAuto AS 手工或自动,\n" + + " b.StorageLocation AS 收货仓库,\n" + + " b.StorageLocationDesc AS 收货仓库描述,\n" + + " b.HQHKanBan AS 订货看板编号,\n" + + " b.MaterialCode AS 订货零件号,\n" + + " c.MaterialCode Sap编码,\n" + + " '' AS 发货零件号,\n" + + " c.MaterialDesc AS 零件中文名称,\n" + + " isnull( a.Qty, 0 ) AS 发货数量,\n" + + " isnull( a.State, 0 ) AS 发货状态,\n" + + " b.AcceptanceNo AS 结算验收单号,\n" + + " isnull( b.Qty, 0 ) AS 结算数量,\n" + + " isnull( b.Price, 0 ) AS 结算单价,\n" + + " isnull( b.Amt, 0 ) AS 结算金额 ,\n" + + " C.EstimateTypeDesc AS 物料组 \n" + + " FROM\n" + + " Set_HQ_H_Kanban AS a\n" + + " LEFT OUTER JOIN ( SELECT * FROM Set_HQ_H_Platform WHERE HQHKanBan <> 'BJ' AND Version = '{0}' ) AS b ON a.Kanban = b.HQHKanBan \n" + + " AND a.MaterialCode = b.MaterialCode\n" + + " LEFT OUTER JOIN Set_material AS c ON a.MaterialCode = c.CustomerPartCode \n" + + " WHERE\n" + + " b.HQHKanBan IS NULL \n" + + " AND b.MaterialCode IS NULL \n" + + " ) AS temp1\n" + + " LEFT OUTER JOIN ( SELECT Price, MaterialCode FROM Set_PriceList WHERE ( Version = ( SELECT MAX ( Version ) FROM Set_PriceList ) ) ) AS TEMP2 ON temp1.Sap编码 = TEMP2.MaterialCode"; + var _sql = string.Format(str, version, condition); + + var _query = DbConnection.Query(_sql, null, null, true, 1200, null); + _list = _query.ToList(); + return _list; + + } public virtual List GetDiffQtyList(string version) @@ -224,8 +323,6 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report } - - } public class HQHSharePartSettledDetailDiff @@ -302,6 +399,15 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report public decimal 单价差异 { set; get; } [ExporterHeader(DisplayName = "差异总金额")] public decimal 差异总金额 { set; get; } + + [ExporterHeader(DisplayName = "工厂")] + public string 工厂 { set; get; } + + [ExporterHeader(DisplayName = "看板编号")] + public string 看板编号 { set; get; } + + [ExporterHeader(DisplayName = "验收单日期",Format ="yyyy-MM-dd")] + public DateTime 验收单日期 { set; get; } } public class HQHSettleQtyDiff { diff --git a/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/HQHSettledDetailDiffExportService.cs b/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/HQHSettledDetailDiffExportService.cs index fb67fc45..0c6d6beb 100644 --- a/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/HQHSettledDetailDiffExportService.cs +++ b/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/HQHSettledDetailDiffExportService.cs @@ -1,11 +1,15 @@ -using System; +using Magicodes.ExporterAndImporter.Excel; +using Shouldly; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TaskJob.EventArgs; using TaskJob.Interfaces; +using Volo.Abp.BlobStoring; using Volo.Abp.DependencyInjection; +using Win.Sfs.BaseData.ImportExcelCommon; using Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report; namespace SettleAccount.Job.Services.Report @@ -18,6 +22,7 @@ namespace SettleAccount.Job.Services.Report private readonly HQHSettledDetailDapperRepository _dapperRepository; private readonly ErpPartDapperRepository _erpdapperRepository; + private readonly IBlobContainer _fileContainer; private readonly OutputService _outputService; private readonly InputService _inputService; @@ -26,14 +31,16 @@ namespace SettleAccount.Job.Services.Report ErpPartDapperRepository erpdapperRepository, HQHSettledDetailDapperRepository dapperRepository, + OutputService outputService, InputService inputService + , IBlobContainer fileContainer ) { _inputService = inputService; _outputService = outputService; _erpdapperRepository = erpdapperRepository; - + _fileContainer = fileContainer; _dapperRepository = dapperRepository; } @@ -49,7 +56,13 @@ namespace SettleAccount.Job.Services.Report var acceptNo = p_list.Where(p => p.Name == "AcceptNo").FirstOrDefault().Value; var sapCode = p_list.Where(p => p.Name == "SapCode").FirstOrDefault().Value; var warehouseDesc = p_list.Where(p => p.Name == "WarehouseDesc").FirstOrDefault().Value; + var _ls = _dapperRepository.GetInvoiceSettledDetailDiffReportList(version, materialCode, begin, end, materialGroup); + + //反向对比,有发货无结算 + var _reversels = _dapperRepository.GetReverseSettledDetailDiffReportList(version, materialCode, begin, end, materialGroup); + + var _lst = _dapperRepository.GetDiffQtyList(version); foreach (var itm in _lst) { @@ -109,7 +122,22 @@ namespace SettleAccount.Job.Services.Report _ls = _ls.Where(p => _groupList.Contains(p.Sap编码)).ToList(); } } - _outputService.Export(id, _filename, _ls); + + + + + //_outputService.Export(id, _filename, _ls); + ExcelExporter _exporter = new ExcelExporter();//导出Excel + var result = _exporter.Append(_ls.ToList(), "红旗工厂核对明细") + .SeparateBySheet() + .Append(_reversels.ToList(), "有发货无结算对比") + .ExportAppendDataAsByteArray(); + result.ShouldNotBeNull(); + _fileContainer.SaveAsync(_filename, result.Result, true); + + + + return id.ToString(); }