You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

535 lines
25 KiB

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 Volo.Abp.Uow;
using Win.Sfs.BaseData.ImportExcelCommon;
using Win.Sfs.SettleAccount;
using Win.Sfs.SettleAccount.Errors;
using Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report;
namespace SettleAccount.Job.Services.Report
{
public class UnSettledSum
{
[ExporterHeader(DisplayName = "版本")]
public string { set; get; }
[ExporterHeader(DisplayName = "库位 ")]
public string {set;get;}
[ExporterHeader(DisplayName = "物料组编码 ")]
public string {set;get;}
[ExporterHeader(DisplayName = "物料组车型")]
public string {set;get;}
[ExporterHeader(DisplayName = "物料号")]
public string {set;get;}
[ExporterHeader(DisplayName = "物料描述")]
public string {set;get;}
//[ExporterHeader(DisplayName = "客户物料")]
//public string 客户物料 {set;get;}
[ExporterHeader(DisplayName = "WMS期初库存")]
public string WMS期初库存 {set;get;}
[ExporterHeader(DisplayName = "本月增加")]
public string {set;get;}
[ExporterHeader(DisplayName = "本月减少")]
public string {set;get;}
[ExporterHeader(DisplayName = "WMS期末库存")]
public string WMS期末库存 {set;get;}
[ExporterHeader(DisplayName = "SAS未结明细汇总")]
public string SAS未结明细汇总 {set;get;}
[ExporterHeader(DisplayName = "差异")]
public string { set; get; }
}
public class UnSettledSumService : ITransientDependency, IExportJob
{
private readonly HQHSettledDetailDapperRepository _hqkanbanDapper;
private readonly KanbanUnSettledDapperRepository _kanbanDapper;
private readonly UnSettledDetailDapperRepository _dapper;
private readonly WmsDapperRepository _wmsDapper;
private readonly OutputService _outputService;
private readonly ErpPartDapperRepository _erpDapper;
private readonly SettleSparePartDapperReportRepository _sparepartdapper;
private readonly ISettleAccountBranchEfCoreRepository<ErrorBill, Guid> _errorListRepository;
private readonly IBlobContainer<MyFileContainer> _fileContainer;
public UnSettledSumService(
HQHSettledDetailDapperRepository hqkanbanDapper,
KanbanUnSettledDapperRepository kanbanDapper,
UnSettledDetailDapperRepository dapper,
OutputService outputService,
ErpPartDapperRepository erpDapper,
WmsDapperRepository wmsDapper,
SettleSparePartDapperReportRepository sparepartdapper,
IBlobContainer<MyFileContainer> fileContainer,
ISettleAccountBranchEfCoreRepository<ErrorBill, Guid> errorListRepository
)
{
_wmsDapper = wmsDapper;
_hqkanbanDapper = hqkanbanDapper;
_kanbanDapper = kanbanDapper;
_dapper = dapper;
_outputService = outputService;
_erpDapper = erpDapper;
_sparepartdapper = sparepartdapper;
_fileContainer = fileContainer;
_errorListRepository = errorListRepository;
}
[UnitOfWork(false)]
public string ExportFile(Guid id, List<string> exportName, List<CustomCondition> p_list)
{
var _lsExport= GetReport(id,exportName,p_list);
var _lsleft = GetLeftReport(id, exportName, p_list);
//ExcelExporter _exporter = new ExcelExporter();//导出Excel
//var result = _exporter.Append(_lsExport, "汇总核对表1")
////.SeparateBySheet()
////.Append(_lsleft, "汇总核对表2")
//.ExportAppendDataAsByteArray();
//result.ShouldNotBeNull();
//_fileContainer.SaveAsync(String.Format("结算未结寄售核对表{0}.xlsx",Guid.NewGuid().ToString("N")), result.Result, true);
var _first = exportName.FirstOrDefault();
_outputService.Export<UnSettledSum>(id, _first, _lsExport);
return id.ToString();
}
[UnitOfWork(false)]
public List<UnSettledSum> GetFisSum(Guid id, List<string> exportName, List<CustomCondition> p_list)
{
var _first = exportName.FirstOrDefault();
var version = p_list.Where(p => p.Name == "Version").FirstOrDefault().Value;
var materailCode = p_list.Where(p => p.Name == "MaterialCode").FirstOrDefault().Value;
var materialGroup = p_list.Where(p => p.Name == "MaterialGroup").FirstOrDefault().Value;
//var sapcode = p_list.Where(p => p.Name == "SapMaterialCode").FirstOrDefault().Value;
var begin = p_list.Where(p => p.Name == "Begin").FirstOrDefault().Value;
var end = p_list.Where(p => p.Name == "End").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 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 datestr = version.Substring(0, 4) + "-" + version.Substring(4, 2) + "-01";
var date = DateTime.Parse(datestr).AddMonths(1).AddDays(-1);
var datetime = date.ToShortDateString() + " 23:59:59 ";
var _list = _dapper.GetDiffReport(DateTime.Now.Year.ToString(), begin, datetime, "", version, materailCode, materialGroup, "");
var _checkList = _errorListRepository.ToList();
var query = from itm in _list
join itm1 in _checkList on new { ChassisNumber = itm.ChassisNumber, MaterialCode = itm.MaterialCode, WmsBillNum = itm.WmsBillNum }
equals new { ChassisNumber = itm1.BillNum, MaterialCode = itm1.MaterialCode, WmsBillNum = itm1.WmsBillNum } into temp1
from tm1 in temp1.DefaultIfEmpty()
where tm1 == null
select itm;
_list = query.ToList();
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 = _erpDapper.GetSapList(_ls, version, false);
_lst.ForEach(p =>
{
p.Qty = 1;
p.DiffAMT = Math.Round(p.Qty * p.Price, 2);
p.DiffQty = 1;
}
);
_list.AddRange(_lst);
_list = _list.Where(p => p.SapMaterialCode == p.ParentSapMaterialCode).ToList();
if (!string.IsNullOrEmpty(materialGroup))
{
var _groupList = materialGroup.Split(new char[] { ',' }).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();
// }
//}
if (!string.IsNullOrEmpty(materailCode))
{
var _groupList = materailCode.Split(new char[] { '\n' }).Distinct().ToList();
if (_groupList.Count() > 0)
{
_list = _list.Where(p => _groupList.Contains(p.SapMaterialCode)).ToList();
}
}
var _fislist =_list.GroupBy(p => new { p.SapMaterialCode, p.MaterialDesc, p.MaterialGroup, p.MaterialCode })
.Select(p => new UnSettledSum
{
= "PLJS",
= version,
= p.Key.SapMaterialCode,
//客户物料 = p.Key.MaterialCode,
= p.Key.MaterialDesc,
= p.Key.MaterialGroup,
SAS未结明细汇总 = p.Sum(p => p.Qty).ToString()
}).ToList();
return _fislist;
}
/// <summary>
/// 大众看板未结数据
/// </summary>
/// <param name="id"></param>
/// <param name="exportName"></param>
/// <param name="p_list"></param>
/// <returns></returns>
public List<UnSettledSum> GetKanbanSum(Guid id, List<string> exportName, List<CustomCondition> p_list)
{
var _filename = exportName.FirstOrDefault();
var version = p_list.Where(p => p.Name == "Version").FirstOrDefault().Value;
var begin = p_list.Where(p => p.Name == "Begin").FirstOrDefault().Value;
var end = p_list.Where(p => p.Name == "End").FirstOrDefault().Value;
var materailCode = p_list.Where(p => p.Name == "MaterialCode").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 iscontionversion = p_list.Where(p => p.Name == "IsContainVersion").FirstOrDefault().Value;
var iscontionversion = "1";//不分版本,全查
//var version = p_list.Where(p => p.Name == "Version").FirstOrDefault().Value;
//var customerCode = p_list.Where(p => p.Name == "CustomerCode").FirstOrDefault().Value;
//var materailCode = p_list.Where(p => p.Name == "MaterialCode").FirstOrDefault().Value;
//var materialGroup = p_list.Where(p => p.Name == "MaterialGroup").FirstOrDefault().Value;
//var sapcode = p_list.Where(p => p.Name == "SapMaterialCode").FirstOrDefault().Value;
//var begin = p_list.Where(p => p.Name == "Begin").FirstOrDefault().Value;
//var end = p_list.Where(p => p.Name == "End").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 sapCode = p_list.Where(p => p.Name == "SapCode").FirstOrDefault().Value;
var datestr = version.Substring(0, 4) + "-" + version.Substring(4, 2) + "-01";
var date = DateTime.Parse(datestr).AddMonths(1).AddDays(-1);
var datetime = date.ToShortDateString() + " 23:59:59 ";
var _ls = _kanbanDapper.GetKanbanReportList(version, begin, datetime, iscontionversion);
//if (!string.IsNullOrEmpty(sapCode))
//{
// var _groupList = sapCode.Split(new char[] { '\n' }).Distinct().ToList();
// if (_groupList.Count() > 0)
// {
// _ls = _ls.Where(p => _groupList.Contains(p.SapCode)).ToList();
// }
//}
if (!string.IsNullOrEmpty(materailCode))
{
var _groupList = materailCode.Split(new char[] { '\n' }).Distinct().ToList();
if (_groupList.Count() > 0)
{
_ls = _ls.Where(p => _groupList.Contains(p.CustomerPartCode)).ToList();
}
}
if (!string.IsNullOrEmpty(materialGroup))
{
var _groupList = materialGroup.Split(new char[] { ',' }).Distinct().ToList();
if (_groupList.Count() > 0)
{
_ls = _ls.Where(p => _groupList.Contains(p.MaterialGroup)).ToList();
}
}
//应用屏蔽错误信息功能,将其屏蔽的信息从生成的列表中排除掉,20220629
var _checkList = _errorListRepository.ToList();
var query = from itm in _ls
join itm1 in _checkList on new { ChassisNumber = itm.Kanban, MaterialCode = itm.CustomerPartCode, WmsBillNum = itm.WmsBillNum }
equals new { ChassisNumber = itm1.BillNum, MaterialCode = itm1.CustomerMaterialCode, WmsBillNum = itm1.WmsBillNum } into temp1
from tm1 in temp1.DefaultIfEmpty()
where tm1 == null
select itm;
_ls = query.ToList();
//DiffQty 为实际发货数量=发货数量-结算数量-退货数量 财务要求
var kanbanList = _ls.GroupBy(p => new { p.SapCode, p.MaterialDesc, p.MaterialGroup, p.CustomerPartCode })
.Select(p => new UnSettledSum
{
= "PLJS",
= version,
= p.Key.SapCode,
//客户物料 = p.Key.CustomerPartCode,
= p.Key.MaterialDesc,
= p.Key.MaterialGroup,
SAS未结明细汇总 = p.Sum(p => p.DiffQty).ToString()
}).ToList();
return kanbanList;
}
/// <summary>
/// 红旗看板未结明细
/// </summary>
/// <param name="id"></param>
/// <param name="exportName"></param>
/// <param name="p_list"></param>
/// <returns></returns>
public List<UnSettledSum> GetHQKanbanSum(Guid id, List<string> exportName, List<CustomCondition> p_list)
{
var _filename = exportName.FirstOrDefault();
var version = p_list.Where(p => p.Name == "Version").FirstOrDefault().Value;
var materialCode = p_list.Where(p => p.Name == "MaterialCode").FirstOrDefault().Value;
//var kanban = p_list.Where(p => p.Name == "Kanban").FirstOrDefault().Value;
var begin = p_list.Where(p => p.Name == "Begin").FirstOrDefault().Value;
var end = p_list.Where(p => p.Name == "End").FirstOrDefault().Value;
var materialGroup = p_list.Where(p => p.Name == "MaterialGroup").FirstOrDefault().Value;
//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 iscontionversion = p_list.Where(p => p.Name == "IsContainVersion").FirstOrDefault().Value;
var iscontionversion = "1";//不分区间,全查
//有发货无结算,单独拿出去,财务要求
var datestr = version.Substring(0, 4) + "-" + version.Substring(4, 2) + "-01";
var date = DateTime.Parse(datestr).AddMonths(1).AddDays(-1);
var datetime = date.ToShortDateString() + " 23:59:59 ";
var _ls = _hqkanbanDapper.GetReverseSettledDetailDiffReportList(version, materialCode, begin, datetime, materialGroup, iscontionversion);
if (!string.IsNullOrEmpty(sapCode))
{
var _groupList = sapCode.Split(new char[] { '\n' }).Distinct().ToList();
if (_groupList.Count() > 0)
{
_ls = _ls.Where(p => _groupList.Contains(p.Sap编码)).ToList();
}
}
//应用屏蔽错误信息功能,将其屏蔽的信息从生成的列表中排除掉,20220629
var _checkList = _errorListRepository.ToList();
var query = from itm in _ls
join itm1 in _checkList on new { ChassisNumber = itm., MaterialCode = itm., WmsBillNum = itm. }
equals new { ChassisNumber = itm1.BillNum, MaterialCode = itm1.CustomerMaterialCode, WmsBillNum = itm1.WmsBillNum } into temp1
from tm1 in temp1.DefaultIfEmpty()
where tm1 == null
select itm;
_ls = query.ToList();
var kanbanList = _ls.GroupBy(p => new { p.Sap编码, p., p., p. })
.Select(p => new UnSettledSum
{
="PLJS",
=version,
= p.Key.Sap编码,
//客户物料 = p.Key.客户物料号,
= p.Key.,
= p.Key.,
SAS未结明细汇总 = p.Sum(p => p.).ToString()
}).ToList();
return kanbanList;
}
/// <summary>
/// 大众备件未对
/// </summary>
/// <param name="id"></param>
/// <param name="exportName"></param>
/// <param name="p_list"></param>
/// <returns></returns>
public List<UnSettledSum> GetSparePartSum(Guid id, List<string> exportName, List<CustomCondition> p_list)
{
var fileName = exportName.FirstOrDefault();
//var purchaseOrderNo = p_list.Where(p => p.Name == "PurchaseOrderNo").FirstOrDefault().Value;
var version = p_list.Where(p => p.Name == "Version").FirstOrDefault().Value;
var sapCode = p_list.Where(p => p.Name == "SapCode").FirstOrDefault().Value;
var matialCode = p_list.Where(p => p.Name == "MaterialCode").FirstOrDefault().Value;
var beginTime = p_list.Where(p => p.Name == "Begin").FirstOrDefault().Value;
var endTime = p_list.Where(p => p.Name == "End").FirstOrDefault().Value;
var datestr = version.Substring(0, 4) + "-" + version.Substring(4, 2) + "-01";
var date = DateTime.Parse(datestr).AddMonths(1).AddDays(-1);
var datetime = date.ToShortDateString() + " 23:59:59 ";
//var _ls = _sparepartdapper.GetReverseWithCodeSettleSparePartReportList(purchaseOrderNo, version, sapCode, matialCode, beginTime, endTime);
var _ls = _sparepartdapper.GetReverseWithCodeSettleSparePartReportList("", version, sapCode, matialCode, beginTime, datetime);
if (!string.IsNullOrEmpty(sapCode))
{
var _groupList = sapCode.Split(new char[] { '\n' }).Distinct().ToList();
if (_groupList.Count() > 0)
{
_ls = _ls.Where(p => _groupList.Contains(p.SAP编码)).ToList();
}
}
//应用屏蔽错误信息功能,将其屏蔽的信息从生成的列表中排除掉,20220629
var _checkList = _errorListRepository.ToList();
var query = from itm in _ls
join itm1 in _checkList on new { ChassisNumber = itm., MaterialCode = itm., WmsBillNum = itm. }
equals new { ChassisNumber = itm1.BillNum, MaterialCode = itm1.CustomerMaterialCode, WmsBillNum = itm1.WmsBillNum } into temp1
from tm1 in temp1.DefaultIfEmpty()
where tm1 == null
select itm;
_ls = query.ToList();
//说明 为实际发货数量=发货数量-结算数量-退货数量 财务要求
var kanbanList = _ls.GroupBy(p => new { p.SAP编码, p., p. })
.Select(p => new UnSettledSum
{
= "BJJS",
= version,
= p.Key.SAP编码,
//客户物料 = p.Key.物料代码,
= p.Key.,
= string.Empty,
SAS未结明细汇总 = p.Sum(p =>Convert.ToDecimal(p.)).ToString()
}).ToList();
return kanbanList;
}
public List<UnSettledSum> GetReport(Guid id, List<string> exportName, List<CustomCondition> p_list)
{
var version = p_list.Where(p => p.Name == "Version").FirstOrDefault().Value;
List<UnSettledSum> _ls = new List<UnSettledSum>();
_ls.AddRange(GetFisSum(id, exportName, p_list));
_ls.AddRange(GetHQKanbanSum(id, exportName, p_list));
_ls.AddRange(GetKanbanSum(id, exportName, p_list));
_ls.AddRange(GetSparePartSum(id, exportName, p_list));//大众备件未结
var _lst = _wmsDapper.GetSalesStockSum(version);
var query = from itm in _lst
join itm1 in _ls
on new { Version = itm.Version, PartCode = itm.PartCode.Trim(), LocCode= itm.LocCode.ToUpper()} equals new { Version = itm1., PartCode = itm1..Trim(), LocCode = itm1.}
into temp
from tm in temp.DefaultIfEmpty()
select new UnSettledSum
{
= itm.Version,
= itm.PartCode,
= itm.PartDesc,
= itm.PartGroup,
= itm.PartGroupDesc,
SAS未结明细汇总 = tm == null ? "0" : tm.SAS未结明细汇总,
WMS期初库存 = itm.StartQty.ToString(),
WMS期末库存 = itm.EndQty.ToString(),
= itm.LocCode,
= itm.OutQty.ToString(),
= itm.InQty.ToString(),
= (itm.EndQty- decimal.Parse( tm == null ? "0" : tm.SAS未结明细汇总)).ToString()
};
return query.ToList();
}
public List<UnSettledSum> GetLeftReport(Guid id, List<string> exportName, List<CustomCondition> p_list)
{
var version = p_list.Where(p => p.Name == "Version").FirstOrDefault().Value;
List<UnSettledSum> _ls = new List<UnSettledSum>();
_ls.AddRange(GetFisSum(id, exportName, p_list));
_ls.AddRange(GetHQKanbanSum(id, exportName, p_list));
_ls.AddRange(GetKanbanSum(id, exportName, p_list));
_ls.AddRange(GetSparePartSum(id, exportName, p_list));//大众备件未结
var _lst = _wmsDapper.GetSalesStockSum(version);
var query = from itm in _ls
join itm1 in _lst
on new { Version = itm., PartCode = itm..Trim(), LocCode = itm. } equals
new { Version = itm1.Version, PartCode = itm1.PartCode.Trim(), LocCode = itm1.LocCode.ToUpper() }
into temp
from tm in temp.DefaultIfEmpty()
select new UnSettledSum
{
= itm.,
= itm.,
= itm.,
= itm.,
= itm.,
SAS未结明细汇总 = tm == null ? "0" : tm.EndQty.ToString(),
WMS期初库存 = tm == null ? "0" : tm.StartQty.ToString(),
WMS期末库存 = tm == null ? "0" : tm.EndQty.ToString(),
= itm.,
= tm == null ? "0" : tm.OutQty.ToString(),
= tm == null ? "0" : tm.InQty.ToString(),
= ((tm == null ? 0 : tm.EndQty) - decimal.Parse(tm == null ? "0" : itm.SAS未结明细汇总)).ToString()
};
return query.ToList();
}
}
}