|
|
@ -1,28 +1,67 @@ |
|
|
|
using System; |
|
|
|
using Magicodes.ExporterAndImporter.Core; |
|
|
|
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.Entities.UnSettle; |
|
|
|
using Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report; |
|
|
|
|
|
|
|
namespace SettleAccount.Job.Services.Report |
|
|
|
{ |
|
|
|
public class SumSettleDiffList |
|
|
|
{ |
|
|
|
// 物料组车型 SAP编码 零件号 结算数量 M100数量 差异总数 开票单价 差异金额
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[ExporterHeader(DisplayName = "SAP编码")] |
|
|
|
public string SapMaterialCode { set; get; } |
|
|
|
[ExporterHeader(DisplayName = "零件号")] |
|
|
|
public string MaterialCode { set; get; } |
|
|
|
[ExporterHeader(DisplayName = "零件描述")] |
|
|
|
public string MaterialDesc { set; get; } |
|
|
|
[ExporterHeader(DisplayName = "物料组车型")] |
|
|
|
public string MaterialGroup { set; get; } |
|
|
|
[ExporterHeader(DisplayName = "大众未结算数量")] |
|
|
|
public decimal Qty { set; get; } |
|
|
|
[ExporterHeader(DisplayName = "系统未结数量")] |
|
|
|
public decimal UnSettleQty { set; get; } |
|
|
|
[ExporterHeader(DisplayName = "差异总数")] |
|
|
|
public decimal DiffQty { set; get; } |
|
|
|
[ExporterHeader(DisplayName = "差异总金额")] |
|
|
|
public decimal DiffAmt { set; get; } |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class UnSettleDiffExportService : ITransientDependency, IExportJob |
|
|
|
{ |
|
|
|
private readonly UnSettleDiffDapperRepository _dapper; |
|
|
|
private readonly OutputService _outputService; |
|
|
|
private readonly ErpPartDapperRepository _erpdapperRepository; |
|
|
|
private readonly UnSettledDetailDapperRepository _dapper1; |
|
|
|
private readonly IBlobContainer<MyFileContainer> _fileContainer; |
|
|
|
|
|
|
|
public UnSettleDiffExportService(UnSettleDiffDapperRepository dapper, OutputService outputService, |
|
|
|
ErpPartDapperRepository erpdapperRepository |
|
|
|
UnSettledDetailDapperRepository dapper1, |
|
|
|
ErpPartDapperRepository erpdapperRepository, |
|
|
|
IBlobContainer<MyFileContainer> fileContainer |
|
|
|
) |
|
|
|
{ |
|
|
|
_erpdapperRepository = erpdapperRepository; |
|
|
|
_dapper = dapper; |
|
|
|
_outputService = outputService; |
|
|
|
_dapper1 = dapper1; |
|
|
|
_fileContainer = fileContainer; |
|
|
|
} |
|
|
|
|
|
|
|
public string ExportFile(Guid id, List<string> exportName, List<CustomCondition> p_list) |
|
|
@ -44,12 +83,25 @@ namespace SettleAccount.Job.Services.Report |
|
|
|
var _list = _ls.Where(p => p.ParentSapMaterialCode != p.SapMaterialCode && !string.IsNullOrEmpty(p.ParentSapMaterialCode)).GroupBy(p => new { p.ParentSapMaterialCode, p.ChassisNumber, p.KENNCode }) |
|
|
|
.Select(p => p.FirstOrDefault()).ToList(); |
|
|
|
|
|
|
|
|
|
|
|
var rangeList = _erpdapperRepository.GetSapList<UnSettleDiff>(_list, version, false); |
|
|
|
|
|
|
|
|
|
|
|
rangeList.ForEach(p => |
|
|
|
{ |
|
|
|
|
|
|
|
p.Qty = 1; |
|
|
|
p.DiffAmt = p.Qty * p.Price; |
|
|
|
p.DiffQty = -1; |
|
|
|
} |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
_ls.AddRange(rangeList); |
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(materialGroup)) |
|
|
|
{ |
|
|
|
var _groupList = materialGroup.Split(new char[] { ',' }).ToList(); |
|
|
|
var _groupList = materialGroup.Split(new char[] { '\n' }).Distinct().Distinct().ToList(); |
|
|
|
if (_groupList.Count() > 0) |
|
|
|
{ |
|
|
|
_ls = _ls.Where(p => _groupList.Contains(p.MaterialGroup)).ToList(); |
|
|
@ -57,7 +109,7 @@ namespace SettleAccount.Job.Services.Report |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(kenncode)) |
|
|
|
{ |
|
|
|
var _groupList = kenncode.Split(new char[] { ',' }).ToList(); |
|
|
|
var _groupList = kenncode.Split(new char[] { '\n' }).Distinct().ToList(); |
|
|
|
if (_groupList.Count() > 0) |
|
|
|
{ |
|
|
|
_ls = _ls.Where(p => _groupList.Contains(p.KENNCode)).ToList(); |
|
|
@ -65,7 +117,7 @@ namespace SettleAccount.Job.Services.Report |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(chassisNumber)) |
|
|
|
{ |
|
|
|
var _groupList = chassisNumber.Split(new char[] { ',' }).ToList(); |
|
|
|
var _groupList = chassisNumber.Split(new char[] { '\n' }).Distinct().ToList(); |
|
|
|
if (_groupList.Count() > 0) |
|
|
|
{ |
|
|
|
_ls = _ls.Where(p => _groupList.Contains(p.ChassisNumber)).ToList(); |
|
|
@ -73,7 +125,7 @@ namespace SettleAccount.Job.Services.Report |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(sapCode)) |
|
|
|
{ |
|
|
|
var _groupList = sapCode.Split(new char[] { ',' }).ToList(); |
|
|
|
var _groupList = sapCode.Split(new char[] { '\n' }).Distinct().ToList(); |
|
|
|
if (_groupList.Count() > 0) |
|
|
|
{ |
|
|
|
_ls = _ls.Where(p => _groupList.Contains(p.SapMaterialCode)).ToList(); |
|
|
@ -84,8 +136,129 @@ namespace SettleAccount.Job.Services.Report |
|
|
|
|
|
|
|
List<UnSettleDiff> _lsExport = new List<UnSettleDiff>(); |
|
|
|
_ls = _ls.OrderBy(p => p.ChassisNumber).ThenBy(p => p.SapMaterialCode).ToList(); |
|
|
|
_outputService.Export<UnSettleDiff>(id, _first, _ls); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var _lsSum= _ls.GroupBy(p => new { p.SapMaterialCode, p.MaterialCode, p.MaterialDesc, p.MaterialGroup }) |
|
|
|
.Select(p => |
|
|
|
new SumSettleDiffList |
|
|
|
{ |
|
|
|
SapMaterialCode = p.Key.SapMaterialCode, |
|
|
|
MaterialCode = p.Key.MaterialCode, |
|
|
|
MaterialDesc = p.Key.MaterialDesc, |
|
|
|
MaterialGroup = p.Key.MaterialGroup, |
|
|
|
Qty = p.Sum(p => p.Qty), |
|
|
|
UnSettleQty = p.Sum(p => p.UNSettleQty), |
|
|
|
DiffQty = p.Sum(p => p.DiffQty), |
|
|
|
DiffAmt=p.Sum(p=>p.DiffAmt) |
|
|
|
}) ; |
|
|
|
|
|
|
|
var _ls1= ExportList(p_list); |
|
|
|
|
|
|
|
var _lsSum1= _ls1.GroupBy(p => new { p.SapMaterialCode, p.MaterialCode, p.MaterialDesc, p.MaterialGroup }) |
|
|
|
.Select(p => |
|
|
|
new SumSettleDiffList |
|
|
|
{ |
|
|
|
SapMaterialCode = p.Key.SapMaterialCode, |
|
|
|
MaterialCode = p.Key.MaterialCode, |
|
|
|
MaterialDesc = p.Key.MaterialDesc, |
|
|
|
MaterialGroup = p.Key.MaterialGroup, |
|
|
|
Qty = p.Sum(p => p.Qty), |
|
|
|
UnSettleQty = p.Sum(p => p.UnSettleQty), |
|
|
|
DiffQty = p.Sum(p => p.DiffQty), |
|
|
|
DiffAmt = p.Sum(p => p.DiffAMT) |
|
|
|
}); |
|
|
|
|
|
|
|
ExcelExporter _exporter = new ExcelExporter();//导出Excel
|
|
|
|
var result = _exporter.Append(_ls, "R3大众未结对比系统未结") |
|
|
|
.SeparateBySheet() |
|
|
|
.Append(_ls1.ToList(),"系统未结对比R3大众未结") |
|
|
|
.SeparateBySheet() |
|
|
|
.Append(_lsSum.ToList(), "大众R3未结对比结算系统差异汇总") |
|
|
|
.SeparateBySheet() |
|
|
|
.Append(_lsSum1.ToList(),"结算系统对比大众R3未结差异汇总") |
|
|
|
.ExportAppendDataAsByteArray(); |
|
|
|
result.ShouldNotBeNull(); |
|
|
|
_fileContainer.SaveAsync(string.Format("大众准时化未结差异比对表_{0}.xlsx", Guid.NewGuid().ToString()), result.Result, true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return id.ToString(); |
|
|
|
} |
|
|
|
|
|
|
|
public List<UnSettleDetailReport> ExportList( List<CustomCondition> p_list) |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var version = p_list.Where(p => p.Name == "Version").FirstOrDefault().Value; |
|
|
|
var materialCode = p_list.Where(p => p.Name == "MaterialCode").FirstOrDefault().Value; |
|
|
|
var begin = p_list.Where(p => p.Name == "BeginTime").FirstOrDefault().Value; |
|
|
|
var end = p_list.Where(p => p.Name == "EndTime").FirstOrDefault().Value; |
|
|
|
var kenncode = p_list.Where(p => p.Name == "KennCode").FirstOrDefault().Value; |
|
|
|
var chassisNumber = p_list.Where(p => p.Name == "ChassisNumber").FirstOrDefault().Value; |
|
|
|
var materialGroup = p_list.Where(p => p.Name == "MaterialGroup").FirstOrDefault().Value; |
|
|
|
var sapCode = p_list.Where(p => p.Name == "SapCode").FirstOrDefault().Value; |
|
|
|
|
|
|
|
|
|
|
|
//var cp7begin = p_list.Where(p => p.Name == "CP7Begin").FirstOrDefault().Value;
|
|
|
|
//var cp7end = p_list.Where(p => p.Name == "CP7End").FirstOrDefault().Value;
|
|
|
|
|
|
|
|
|
|
|
|
var _list = _dapper1.GetDiffReport(DateTime.Now.Year.ToString(), begin, end, string.Empty, version, materialCode, materialGroup, sapCode); |
|
|
|
var _ls = _list.Where(p => p.Flag != "L").Where(p => p.ParentSapMaterialCode != p.SapMaterialCode).GroupBy(p => new { p.KENNCode, p.ChassisNumber, p.ParentSapMaterialCode }).Select(p => p.FirstOrDefault()).ToList(); |
|
|
|
var _lst = _erpdapperRepository.GetSapList(_ls, version, false); |
|
|
|
_lst.ForEach(p => |
|
|
|
{ |
|
|
|
p.Qty = 1; |
|
|
|
p.DiffAMT = p.Qty * p.Price; |
|
|
|
p.DiffQty = 1; |
|
|
|
} |
|
|
|
); |
|
|
|
_list.AddRange(_lst); |
|
|
|
if (!string.IsNullOrEmpty(materialGroup)) |
|
|
|
{ |
|
|
|
var _groupList = materialGroup.Split(new char[] { '\n' }).Distinct().ToList(); |
|
|
|
if (_groupList.Count() > 0) |
|
|
|
{ |
|
|
|
_list = _list.Where(p => _groupList.Contains(p.MaterialGroup)).ToList(); |
|
|
|
} |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(kenncode)) |
|
|
|
{ |
|
|
|
var _groupList = kenncode.Split(new char[] { '\n' }).Distinct().ToList(); |
|
|
|
if (_groupList.Count() > 0) |
|
|
|
{ |
|
|
|
_list = _list.Where(p => _groupList.Contains(p.KENNCode)).ToList(); |
|
|
|
} |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(chassisNumber)) |
|
|
|
{ |
|
|
|
var _groupList = chassisNumber.Split(new char[] { '\n' }).Distinct().ToList(); |
|
|
|
if (_groupList.Count() > 0) |
|
|
|
{ |
|
|
|
_list = _list.Where(p => _groupList.Contains(p.ChassisNumber)).ToList(); |
|
|
|
} |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(sapCode)) |
|
|
|
{ |
|
|
|
var _groupList = sapCode.Split(new char[] { '\n' }).Distinct().ToList(); |
|
|
|
if (_groupList.Count() > 0) |
|
|
|
{ |
|
|
|
_list = _list.Where(p => _groupList.Contains(p.SapMaterialCode)).ToList(); |
|
|
|
} |
|
|
|
} |
|
|
|
_list = _list.OrderBy(p => p.ChassisNumber).ThenBy(p => p.SapMaterialCode).ThenBy(p => p.Flag).ToList(); |
|
|
|
return _list; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|