diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/NOT_SA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/NOT_SA_SERVICE.cs index 2d2ab663..26102046 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/NOT_SA_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/NOT_SA_SERVICE.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.Diagnostics; using System.Linq; using System.Reflection; using System.Threading.Tasks; @@ -57,6 +58,25 @@ namespace Win.Sfs.SettleAccount.Bases var dtos = ObjectMapper.Map, List>(entitys); return new PagedResultDto(totalCount, dtos); } + + public List GetPagedData(List dataList, int pageNumber, int pageSize) + { + int startIndex = (pageNumber - 1) * pageSize; + + return dataList.Skip(startIndex).Take(pageSize).ToList(); + } + public int CalculatePageCount(int totalCount, int pageSize) + { + int pageCount = totalCount / pageSize; + if (totalCount % pageSize != 0) + { + pageCount += 1; + } + return pageCount; + } + + + /// /// 导出 /// @@ -66,24 +86,45 @@ namespace Win.Sfs.SettleAccount.Bases //[Route("export")] public virtual async Task ExportAsync(TRequestDetailInput input) { - IExporter _csv = new CsvExporter(); +//#if DEBUG +// Stopwatch sw = Stopwatch.StartNew(); +// var entities = await _detailRepository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, 0, true).ConfigureAwait(false); +// var dtoDetails = ObjectMapper.Map, List>(entities); +// var pageint = CalculatePageCount(dtoDetails.Count, 50000); +// List actionlist = new List(); +// for (int i = 0; i < pageint; i++) +// { +// actionlist.Add(async () => +// { +// var pagelist = GetPagedData(dtoDetails, i, 50000); +// IExporter _excel = new ExcelExporter(); +// byte[] result = null; +// result = await _excel.ExportAsByteArray(pagelist).ConfigureAwait(false); +// result.ShouldNotBeNull(); +// await _excelImportService.SaveBlobAsync( +// new SaveExcelImportInputDto +// { +// Name = "test1" + Guid.NewGuid().ToString(), +// Content = result +// } +// ).ConfigureAwait(false); +// }); +// } +// Parallel.Invoke(actionlist.ToArray()); +// Task.WaitAll(); +// sw.Stop(); +// var a = sw.ElapsedMilliseconds / 1000 / 60; +// return ""; +// #else + //IExporter _csv = new CsvExporter(); IExporter _excel = new ExcelExporter(); + Stopwatch sw = Stopwatch.StartNew(); var entities = await _detailRepository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, 0, true).ConfigureAwait(false); var dtoDetails = ObjectMapper.Map, List>(entities); var classDisplayName = typeof(TEntityDetailExportDto).GetCustomAttribute()?.Name ?? typeof(TEntityDetailExportDto).Name; string _fileName = $"{classDisplayName}_{Guid.NewGuid().ToString()}.xlsx"; byte[] result = null; - //switch (input.FileType) - //{ - // case 0: - // result = await _csv.ExportAsByteArray(dtoDetails).ConfigureAwait(false); - // break; - // case 1: - // result = await _excel.ExportAsByteArray(dtoDetails).ConfigureAwait(false); - // break; - //} - result = await _excel.ExportAsByteArray(dtoDetails).ConfigureAwait(false); result.ShouldNotBeNull(); @@ -95,7 +136,13 @@ namespace Win.Sfs.SettleAccount.Bases Content = result } ).ConfigureAwait(false); + + sw.Stop(); + // var a= sw.ElapsedMilliseconds / 1000 / 60; + return _fileName; + //#endif + } /// /// 生成可计算单 diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_CAN_SA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_CAN_SA_SERVICE.cs index 886fe64e..210bf5cb 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_CAN_SA_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_CAN_SA_SERVICE.cs @@ -96,17 +96,11 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { return new JsonResult(new { Code = 400, Message = "已创建发票不能重复创建" }); } - //var talbe1 = _priceRepository.Select(p => new { BeginTime = p.BeginTime, EndTime = p.EndTime, LU = p.LU }).ToList(); - - - var entitys = await _bbacMng.GetDetalListAsync(invbillNum).ConfigureAwait(false);//可结算 List errors = new List(); var settleBillList = entitys.Select(p => p.SettleBillNum).Distinct().ToList(); var checklist = _saRepository.Where(p => settleBillList.Contains(p.BillNum)).ToList(); - var jischeck = checklist.Where(p => p.State == "0" && p.BusinessType==EnumBusinessType.JisBBAC).ToList(); - foreach (var itm in jischeck) { errors.Add(new ERR_EXP_DTO() { Remark = $"版本:{itm.Version},结算单:{itm.BillNum}+此结算单JIS未比对,结算数据需要比对后才能开票!" }); @@ -127,83 +121,16 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { return new JsonResult(new { Code = ApplicationConsts.ImportFailCode, Message = "错误提示文件已下载,请打开文件查看", fileName = await ExportErrorReportAsync(errorList).ConfigureAwait(false) }); } - List customConditionList = new List(); customConditionList.Add(new CustomCondition() { Name = "BillNum", Value = invbillNum }); customConditionList.Add(new CustomCondition() { Name = "BussinessType", Value = main.BusinessType.ToString() }); await _bbacMng.SetWaitingState(invbillNum); var _taskid = await _service.ExportEnqueueAsync("生成发票任务", ExportExtentsion.Excel, string.Empty, string.Empty, CurrentUser, typeof(GenerateJisInvoiceService), customConditionList, (rs) => - { - - - - + { }).ConfigureAwait(false); return new JsonResult(new { Code = 200, Message = "生成发票任务" }); - - //if (await _bbacMng.SetForwardState(main, SettleBillState.已开票).ConfigureAwait(false)) - //{ - // var groupNumList = entitys.Select(p => p.GroupNum).Distinct().ToList(); - // var notQuery = await _notRepository.Where(p => p.SettleBillNum == main.SettleBillNum).ToListAsync().ConfigureAwait(false); - // var dto1s = ObjectMapper.Map, List>(entitys); - // var q = from d in dto1s - // join p in priceList on d.LU equals p.LU - // where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == main.Site - // select new TEMP_CAN_SA_DETAIL - // { - // SettleBillNum = d.SettleBillNum, - // Site = d.Site, - // Version = d.Version, - // Price = p.Price, - // BillNum = d.BillNum, - // SettleDate = d.SettleDate, - // InvGroupNum = d.InvGroupNum, - // LU = d.LU, - // MaterialDesc = d.MaterialDesc, - // PN = d.PN, - // Qty = d.Qty, - // GroupNum = d.GroupNum, - // Amt = Math.Round(d.Qty * p.Price, 2), - // ContractDocID = d.ContractDocID, - // BeginDate = p.BeginTime, - // EndDate = p.EndTime, - // PartCode = d.PartCode - // }; - // var dtos = q.ToList(); - - // if (dtos != null && dtos.Count > 0) - // { - // if (invbillNum.Substring(0, 1) == "C")//一次开票 - // { - // var notlist = notQuery.Select(p => new TEMP_NOT_SA_DETAIL - // { - // KeyCode = p.KeyCode, - // Version = p.Version, - // SettleBillNum = p.SettleBillNum, - // LU = p.LU, - // PN = p.PN, - // Site = p.Site, - // Qty = p.Qty, - // Price = p.Price, - // BusinessType = p.BusinessType, - // IsReturn = "", - // InvGroupNum = p.InvGroupNum, - // SettleDate = p.SettleDate, - // GroupNum = p.GroupNum, - // ContractDocID = string.Empty, - // PartCode = p.PartCode - - // }).ToList();//不能结算 - // await FirstInvoice(entitys, new List(), dtos, notlist, main.Version, main.InvGroupNum, string.Empty, main.BusinessType).ConfigureAwait(false); - // } - // else//二次开票 - // { - // await SecInvoice(entitys, new List(), dtos, main.Version, main.InvGroupNum, string.Empty, main.BusinessType).ConfigureAwait(false); - // } - // } - //} } else { diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_NOT_SA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_NOT_SA_SERVICE.cs index 4a481eac..0f3c16cb 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_NOT_SA_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_NOT_SA_SERVICE.cs @@ -1,9 +1,14 @@ using System; using System.Collections.Generic; +using System.Linq.Dynamic.Core; +using System.Text.Json; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SettleAccount.Domain.BQ; +using SettleAccount.Job.Services; +using TaskJob.EventArgs; +using Volo.Abp; using Win.Abp.Snowflakes; using Win.Sfs.BaseData.ImportExcelCommon; using Win.Sfs.SettleAccount.Bases; @@ -12,6 +17,8 @@ using Win.Sfs.SettleAccount.CommonManagers; using Win.Sfs.SettleAccount.Constant; using Win.Sfs.SettleAccount.Entities.BQ.Dtos; using Win.Sfs.SettleAccount.Entities.BQ.Managers; +using Win.Sfs.SettleAccount.Entities.BQ.Syncs; +using Win.Sfs.SettleAccount.Entities.TaskJobs; using Win.Sfs.SettleAccount.ExportReports; using Win.Sfs.Shared.RepositoryBase; @@ -30,35 +37,38 @@ namespace Win.Sfs.SettleAccount.Entities.BQ BBAC_NOT_SA_DETAIL_EXP_DTO> { private readonly BBAC_NOT_SA_MNG _bbacNotMng; + + private readonly TaskJobService _service; public BBAC_NOT_SA_SERVICE(IExcelImportAppService excelImportService, ISnowflakeIdGenerator snowflakeIdGenerator, - ICommonManager commonManager, INormalEfCoreRepository detailRepository, BBAC_NOT_SA_MNG bbacNotMng, BaseDomainService baseservice) : + ICommonManager commonManager, INormalEfCoreRepository detailRepository, BBAC_NOT_SA_MNG bbacNotMng, BaseDomainService baseservice, TaskJobService service) : base(excelImportService, snowflakeIdGenerator, commonManager, detailRepository,baseservice) { _bbacNotMng = bbacNotMng; + _service = service; } [HttpPost] public override async Task GenerateSettlementOrder(BBAC_NOT_SA_DETAIL_REQ_DTO input) { - List errorlist = new List(); - var entitys = await _detailRepository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, input.SkipCount).ConfigureAwait(false); - if (entitys == null) + + //_detailRepository.DbContext.Set().Where(p=>p.) + var flag= await _bbacNotMng.IsCompleted().ConfigureAwait(false); + + if (flag == false) { - errorlist.Add(new ERR_EXP_DTO() { Message = "查询条件无记录" }); + throw new UserFriendlyException("任务生成中请等待", "400"); } else { - var errors = await _bbacNotMng.GenerateSettlementOrder(entitys).ConfigureAwait(false); - if (errors.Count > 0) - { - foreach (var itm in errors) - { - errorlist.Add(new ERR_EXP_DTO() { Message = itm }); - } - return new JsonResult(new { Code = ApplicationConsts.ImportFailCode, Message = "错误提示文件已下载,请打开文件查看", fileName = await ExportErrorReportAsync(errorlist).ConfigureAwait(false) }); - } + + var filters = JsonSerializer.Serialize(input.Filters); + List customConditionList = new List(); + customConditionList.Add(new CustomCondition() { Name = "condition", Value = filters }); + customConditionList.Add(new CustomCondition() { Name = "businesstype", Value = EnumBusinessType.JisBBAC.ToString() }); + var _taskid = await _service.ExportEnqueueAsync($"{EnumBusinessType.JisBBAC.ToString()}生成可结算单任务", ExportExtentsion.Excel, DateTime.Now.ToString("yyyyMM"), string.Empty, CurrentUser, typeof(MakeCanSettlementService), customConditionList, (rs) => + { }).ConfigureAwait(false); } - return new JsonResult(new { Code = 200, Message = "生成成功" }); + return new JsonResult(new { Code = 200, Message = "正在生成" }); } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_CAN_SA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_CAN_SA_SERVICE.cs index b0d56e20..c2a7e60c 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_CAN_SA_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_CAN_SA_SERVICE.cs @@ -108,12 +108,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { return new JsonResult(new { Code = ApplicationConsts.ImportFailCode, Message = "错误提示文件已下载,请打开文件查看", fileName = await ExportErrorReportAsync(errorList).ConfigureAwait(false) }); } - List customConditionList = new List(); customConditionList.Add(new CustomCondition() { Name = "BillNum", Value = invbillnum }); customConditionList.Add(new CustomCondition() { Name = "BussinessType", Value = main.BusinessType.ToString() }); - - if (main.BusinessType == EnumBusinessType.MaiDanJianHBPO) { var groupNumList = entitys.Select(p => p.GroupNum).Distinct().ToList(); @@ -173,12 +170,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { var flag = await SecInvoice(entitys, new List(), dtos, main.Version, main.InvGroupNum, string.Empty, main.BusinessType).ConfigureAwait(false); } - - } - - - } else { @@ -188,18 +180,12 @@ namespace Win.Sfs.SettleAccount.Entities.BQ }).ConfigureAwait(false); } - - return new JsonResult(new { Code = 200, Message = "生成发票任务" }); - - - } else { return new JsonResult(new { Code = 400, Message = "不存在可结算单记录" }); } - } } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_NOT_SA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_NOT_SA_SERVICE.cs index bcda4f67..bf3328c5 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_NOT_SA_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_NOT_SA_SERVICE.cs @@ -1,9 +1,14 @@ using System; using System.Collections.Generic; +using System.Linq.Dynamic.Core; +using System.Text.Json; using System.Threading.Tasks; +using DocumentFormat.OpenXml.Bibliography; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SettleAccount.Domain.BQ; +using SettleAccount.Job.Services; +using TaskJob.EventArgs; using Win.Abp.Snowflakes; using Win.Sfs.BaseData.ImportExcelCommon; using Win.Sfs.SettleAccount.Bases; @@ -12,6 +17,8 @@ using Win.Sfs.SettleAccount.CommonManagers; using Win.Sfs.SettleAccount.Constant; using Win.Sfs.SettleAccount.Entities.BQ.Dtos; using Win.Sfs.SettleAccount.Entities.BQ.Managers; +using Win.Sfs.SettleAccount.Entities.BQ.Syncs; +using Win.Sfs.SettleAccount.Entities.TaskJobs; using Win.Sfs.SettleAccount.ExportReports; using Win.Sfs.Shared.RepositoryBase; @@ -30,39 +37,32 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { private readonly HBPO_NOT_SA_MNG _hbpoNotMng; + private readonly TaskJobService _service; public HBPO_NOT_SA_SERVICE(IExcelImportAppService excelImportService, ISnowflakeIdGenerator snowflakeIdGenerator, ICommonManager commonManager, INormalEfCoreRepository detailRepository, - HBPO_NOT_SA_MNG hbpoNotMng, BaseDomainService baseservice + HBPO_NOT_SA_MNG hbpoNotMng, BaseDomainService baseservice, + TaskJobService service ) : base(excelImportService, snowflakeIdGenerator, commonManager, detailRepository,baseservice) { + _service = service; _hbpoNotMng = hbpoNotMng; } public override async Task GenerateSettlementOrder(HBPO_NOT_SA_DETAIL_REQ_DTO input) { - var entitys = await _detailRepository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, input.SkipCount).ConfigureAwait(false); - List errorlist = new List(); - if (entitys == null) - { - errorlist.Add(new ERR_EXP_DTO() { Message = "查询条件无记录" }); - } - else - { - var errors = await _hbpoNotMng.GenerateSettlementOrder(entitys).ConfigureAwait(false); - if (errors.Count > 0) - { - foreach (var itm in errors) - { - errorlist.Add(new ERR_EXP_DTO() { Message = itm }); - } - return new JsonResult(new { Code = ApplicationConsts.ImportFailCode, Message = "错误提示文件已下载,请打开文件查看", fileName = await ExportErrorReportAsync(errorlist).ConfigureAwait(false) }); - } - } - return new JsonResult(new { Code = 200, Message = "生成成功" }); + + + var filters= JsonSerializer.Serialize(input.Filters); + List customConditionList = new List(); + customConditionList.Add(new CustomCondition() { Name = "condition", Value = filters }); + customConditionList.Add(new CustomCondition() { Name = "businesstype", Value = EnumBusinessType.JisHBPO.ToString() }); + var _taskid = await _service.ExportEnqueueAsync($"{EnumBusinessType.JisHBPO.ToString()}生成可结算单任务", ExportExtentsion.Excel, DateTime.Now.ToString("yyyyMM"), string.Empty, CurrentUser, typeof(MakeCanSettlementService), customConditionList, (rs) => + {}).ConfigureAwait(false); + return new JsonResult(new { Code = 200, Message = "生成成功" }); } } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MakeCanSettlementService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MakeCanSettlementService.cs new file mode 100644 index 00000000..372d701d --- /dev/null +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MakeCanSettlementService.cs @@ -0,0 +1,399 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Policy; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; +using DocumentFormat.OpenXml.Bibliography; +using EFCore.BulkExtensions; +using Minio.DataModel; +using SettleAccount.Domain.BQ; +using TaskJob.EventArgs; +using TaskJob.Interfaces; +using Volo.Abp.Application.Services; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Uow; +using Win.Sfs.SettleAccount.Bases; +using Win.Sfs.SettleAccount.Entities.BQ.Vmi; +using Win.Sfs.SettleAccount.Entities.Prices; +using Win.Sfs.Shared.Filter; +using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData; + +namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs +{ + public class MakeCanSettlementService : ApplicationService, ITransientDependency, IExportJob + { + protected readonly SettleAccountDbContext _dbcontext; + + public MakeCanSettlementService( + SettleAccountDbContext dbcontext + ) + { + _dbcontext = dbcontext; + } + [UnitOfWork(false)] + public string ExportFile(Guid id, List exportName, List property) + { + var conditions = property.Where(p => p.Name == "condition").FirstOrDefault().Value; + var businesstype = property.Where(p => p.Name == "businesstype").FirstOrDefault().Value; + var filers = JsonSerializer.Deserialize>(conditions); + if (businesstype == "JisBBAC") + { + List billList = new List(); + List billDetails = new List(); + var bbacquery = _dbcontext.Set().AsQueryable(); + if (filers.Count > 0) + { + bbacquery = bbacquery.Where(filers.ToLambda()); + } + var p_list = bbacquery.ToList(); + var jis1 = p_list.Where(p => p.Site == "1040").ToList(); + var jis2 = p_list.Where(p => p.Site == "1046").ToList(); + List notlist = new List(); + if (jis1.Count > 0)//1040 + { + var pricelist = _dbcontext.Set().Where(p => p.ClientCode == "1040" && p.IsCancel == false).ToList(); + var query = from d in jis1 + join p in pricelist + on d.LU equals p.LU + where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == "1040" + select new + { + a = + new BBAC_CAN_SA_DETAIL() + { + ContractDocID = d.ContractDocID, + IsMaiDan = d.IsMaiDan, + Version = d.Version, + KeyCode = d.KeyCode, + Site = "1040", + BusinessType = d.BusinessType, + ErpLoc = d.ErpLoc, + CreationTime = d.CreationTime, + GroupNum = d.GroupNum, + InvGroupNum = d.InvGroupNum, + LU = d.LU, + PN = d.PN, + SettleBillNum = d.SettleBillNum, + Price = p.Price, + SettleDate = d.SettleDate, + RealPartCode = d.RealPartCode, + PartCode = d.PartCode, + Qty = d.Qty + }, + b=d + }; + var bbac_can_list= query.Select(p => p.a).ToList(); + var bbac_not_list= query.Select(p => p.b).ToList(); + if(bbac_can_list.Count>0) + { + notlist.AddRange(bbac_not_list); + var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); + var entity = new BBAC_CAN_SA(); + entity.SetId(Guid.NewGuid()); + entity.BillNum = billNumber; + entity.InvGroupNum = billNumber; + entity.Version = int.Parse(DateTime.Now.ToString("yyyyMM")); + entity.State = SettleBillState.未结状态; + entity.SettleBillNum = string.Empty; + entity.Site = "1040"; + entity.BusinessType = EnumBusinessType.JisBBAC; + billList.Add(entity); + + foreach (var itm in bbac_can_list) + { + var _detailEntity = new BBAC_CAN_SA_DETAIL( + guid: GuidGenerator.Create(), + keyCode: itm.KeyCode, + version: itm.Version, + billNum: billNumber, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: itm.Price, + category: itm.BusinessType, + isReturn: itm.IsReturn, + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: billNumber, + contactid: itm.ContractDocID, + invbillnum: string.Empty, + partcode: itm.PartCode + ); + _detailEntity.RealPartCode = itm.RealPartCode; + billDetails.Add(_detailEntity); + } + } + } + if (jis2.Count > 0) + { + var pricelist = _dbcontext.Set().Where(p => p.ClientCode == "1046" && p.IsCancel == false).ToList(); + var query = from d in jis2 + join p in pricelist + on d.LU equals p.LU + where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == "1046" + select new + { + a =new BBAC_CAN_SA_DETAIL() + { + ContractDocID = d.ContractDocID, + IsMaiDan = d.IsMaiDan, + Version = d.Version, + KeyCode = d.KeyCode, + Site = "1046", + BusinessType = d.BusinessType, + ErpLoc = d.ErpLoc, + CreationTime = d.CreationTime, + GroupNum = d.GroupNum, + InvGroupNum = d.InvGroupNum, + LU = d.LU, + PN = d.PN, + SettleBillNum = d.SettleBillNum, + Price = p.Price, + SettleDate = d.SettleDate, + RealPartCode = d.RealPartCode, + PartCode = d.PartCode, + Qty = d.Qty + }, + b = d + }; + var bbac_can_list = query.Select(p => p.a).ToList(); + var bbac_not_list = query.Select(p => p.b).ToList(); + if (bbac_can_list.Count > 0) + { + notlist.AddRange(bbac_not_list); + var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); + var entity = new BBAC_CAN_SA(); + entity.SetId(Guid.NewGuid()); + entity.BillNum = billNumber; + entity.InvGroupNum = billNumber; + entity.Version = int.Parse(DateTime.Now.ToString("yyyyMM")); + entity.State = SettleBillState.未结状态; + entity.SettleBillNum = string.Empty; + entity.Site = "1046"; + entity.BusinessType = EnumBusinessType.JisBBAC; + billList.Add(entity); + + foreach (var itm in bbac_can_list) + { + var _detailEntity = new BBAC_CAN_SA_DETAIL( + guid: GuidGenerator.Create(), + keyCode: itm.KeyCode, + version: itm.Version, + billNum: billNumber, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: itm.Price, + category: itm.BusinessType, + isReturn: itm.IsReturn, + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: billNumber, + contactid: itm.ContractDocID, + invbillnum: string.Empty, + partcode: itm.PartCode + ); + _detailEntity.RealPartCode = itm.RealPartCode; + billDetails.Add(_detailEntity); + } + } + } + bool issucess = true; + using (var transaction = _dbcontext.Database.BeginTransaction()) + { + try + { + if (billDetails.Count > 0) + { + _dbcontext.BulkDelete(notlist);//删除不可结数据 + _dbcontext.BulkInsert(billDetails);//插入可结主表 + _dbcontext.BulkInsert(billList);//插入可结明细 + var flaglist= _dbcontext.Set().Where(p => p.IsReturn == true).ToList(); + foreach (var flag in flaglist) { + flag.IsReturn = false; + } + _dbcontext.BulkUpdate(flaglist);//插入可结明细 + issucess = true; + transaction.Commit(); + } + } + catch (Exception) + { + issucess = false; + // 回滚事务 + transaction.Rollback(); + } + } + if (issucess == true) + { + var result = from a in _dbcontext.Set() + join b in _dbcontext.Set() on new { a.KeyCode, a.BusinessType } equals new { b.KeyCode, b.BusinessType } + where a.Price == 0 + select new + { + a, + b.Price + }; + foreach (var item in result) + { + item.a.Price = item.Price; + } + var salist = result.Select(p => p.a).ToList(); + _dbcontext.BulkUpdate(salist);//更新结算数据 + } + } + if (businesstype == "JisHBPO") + { + List notlist = new List(); + List billList = new List(); + List billDetails = new List(); + var bbacquery = _dbcontext.Set().AsQueryable(); + if (filers.Count > 0) + { + bbacquery = bbacquery.Where(filers.ToLambda()); + } + var p_list = bbacquery.ToList(); + var jis1 = p_list.Where(p => p.Site == "104T").ToList(); + if (jis1.Count > 0) + { + var pricelist = _dbcontext.Set().Where(p => p.ClientCode == "104T" && p.IsCancel == false).ToList(); + var query = from d in jis1 + join p in pricelist + on d.LU equals p.LU + where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == "104T" + select new + { + a = new HBPO_CAN_SA_DETAIL() + { + Version = d.Version, + KeyCode = d.KeyCode, + Site = "104T", + BusinessType = d.BusinessType, + ErpLoc = d.ErpLoc, + CreationTime = d.CreationTime, + GroupNum = d.GroupNum, + InvGroupNum = d.InvGroupNum, + LU = d.LU, + PN = d.PN, + SettleBillNum = d.SettleBillNum, + Price = p.Price, + SettleDate = d.SettleDate, + RealPartCode = d.RealPartCode, + PartCode = d.PartCode, + Qty = d.Qty + }, + b = d + }; + + var hbpo_can_list = query.Select(p => p.a).ToList(); + var hbpo_not_list = query.Select(p => p.b).ToList(); + if (hbpo_can_list.Count > 0) + { + var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); + var entity = new HBPO_CAN_SA(); + entity.SetId(Guid.NewGuid()); + entity.BillNum = billNumber; + entity.InvGroupNum = billNumber; + entity.Version = int.Parse(DateTime.Now.ToString("yyyyMM")); + entity.State = SettleBillState.未结状态; + entity.SettleBillNum = string.Empty; + entity.Site = "104T"; + entity.BusinessType = EnumBusinessType.JisBBAC; + billList.Add(entity); + notlist.AddRange(hbpo_not_list); + foreach (var itm in hbpo_can_list) + { + var _detailEntity = new HBPO_CAN_SA_DETAIL( + guid: GuidGenerator.Create(), + keyCode: itm.KeyCode, + version: itm.Version, + billNum: billNumber, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: itm.Price, + businessType: itm.BusinessType, + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: billNumber, + invbillnum: string.Empty, + partcode: itm.PartCode + ); + _detailEntity.RealPartCode = itm.RealPartCode; + billDetails.Add(_detailEntity); + } + } + } + bool issucess = true; + using (var transaction = _dbcontext.Database.BeginTransaction()) + { + try + { + if (billDetails.Count > 0) + { + _dbcontext.BulkDelete(p_list);//删除不可结数据 + _dbcontext.BulkInsert(billDetails);//插入可结明细 + _dbcontext.BulkInsert(billList);//插入可结主表 + var result = from a in _dbcontext.Set() + join b in _dbcontext.Set() on new { a.KeyCode, a.BusinessType } equals new { b.KeyCode, b.BusinessType } + where a.Price == 0 + select new + { + a, + b.Price + }; + foreach (var item in result) + { + item.a.Price = item.Price; + } + var salist = result.Select(p => p.a).ToList(); + _dbcontext.BulkUpdate(salist);//更新结算数据 + transaction.Commit(); + } + else + { + issucess = false;// 回滚事务 + transaction.Rollback(); + } + + } + catch (Exception) + { + issucess = false;// 回滚事务 + transaction.Rollback(); + } + } + if (issucess == true) + { + var result = from a in _dbcontext.Set() + join b in _dbcontext.Set() on new { a.KeyCode, a.BusinessType } equals new { b.KeyCode, b.BusinessType } + where a.Price == 0 + select new + { + a, + b.Price + }; + foreach (var item in result) + { + item.a.Price = item.Price; + } + var salist = result.Select(p => p.a).ToList(); + _dbcontext.BulkUpdate(salist);//更新结算数据 + } + } + + return id.ToString(); + + } + } +} diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs index 9a6d3b95..9b75dd55 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs @@ -398,11 +398,8 @@ namespace Win.Sfs.SettleAccount.Entities.BQ [HttpPost] public async Task> Log(LogRequestDto input) { - - var entities = await _logRepository.GetListByFilterAsync(input.Filters, input.Sorting, input.MaxResultCount, input.SkipCount).ConfigureAwait(false); var totalCount = await _logRepository.GetCountByFilterAsync(input.Filters).ConfigureAwait(false); - return new PagedResultDto(totalCount, entities); } @@ -969,7 +966,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ seDetails.Add(seDetail); } } - var result = await CheckBusinessJISLocation(seDetails, businessType).ConfigureAwait(false); if (result != "ok") { diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationModule.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationModule.cs index f226dea0..4c4931a7 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationModule.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationModule.cs @@ -110,9 +110,10 @@ namespace Win.Sfs.SettleAccount { return implementationFactory.GetService(); } - - - + if (key.Equals(typeof(MakeCanSettlementService).FullName)) + { + return implementationFactory.GetService(); + } else { throw new ArgumentException($"Not Support key:{key}"); diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/BBAC_NOT_SA_MNG.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/BBAC_NOT_SA_MNG.cs index 56637e34..fe61a306 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/BBAC_NOT_SA_MNG.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/BBAC_NOT_SA_MNG.cs @@ -3,6 +3,8 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using EFCore.BulkExtensions; +using Microsoft.EntityFrameworkCore; +using NPOI.SS.Formula.Functions; using SettleAccount.Domain.BQ; using Volo.Abp.Domain.Services; using Win.Sfs.SettleAccount.Bases; @@ -23,6 +25,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers { private readonly INormalEfCoreRepository _repository; private readonly INormalEfCoreRepository _detailRepository; + private readonly INormalEfCoreRepository _sadetailRepository; private readonly INormalEfCoreRepository _notRepository; private readonly INormalEfCoreRepository _priceRepository; private readonly BaseDomainService _service; @@ -35,33 +38,71 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers INormalEfCoreRepository repository, INormalEfCoreRepository detailRepository, INormalEfCoreRepository notRepository, - INormalEfCoreRepository priceRepository + INormalEfCoreRepository priceRepository, + INormalEfCoreRepository sadetailRepository ) { _priceRepository = priceRepository; _repository = repository; _detailRepository = detailRepository; _notRepository = notRepository; + _sadetailRepository= sadetailRepository; _service = service; } - public virtual async Task> GenerateSettlementOrder(List p_list) - { - var first = p_list.FirstOrDefault(); - List errors = new List(); - var priceErrors = await _service.CheckPriceList(p_list, first.Site).ConfigureAwait(false); - if (priceErrors.Count > 0) + + + + public virtual async Task IsCompleted() + { + var list=await _notRepository.Where(p=>p.IsReturn==true).ToListAsync().ConfigureAwait(false); + if (list.Count > 0) { - foreach (var itm in priceErrors) - { - errors.Add($"生产号{itm.PN}零件{itm.LU}结算日期{itm.SettleDate}无价格区间数据"); - } + return false; + } - if (errors.Count > 0) + var first=_notRepository.FirstOrDefault(); + if (first != null) { - return errors; + first.IsReturn = true; + _repository.DbContext.BulkUpdate(new List() { first}); } + + return true; + + + + } + + + public virtual async Task> GenerateSettlementOrder(List p_list) + { + + var first = p_list.FirstOrDefault(); + List errors = new List(); + //var priceErrors = await _service.CheckPriceList(p_list, first.Site).ConfigureAwait(false); + //if (priceErrors.Count > 0) + //{ + // foreach (var itm in priceErrors) + // { + // errors.Add($"生产号{itm.PN}零件{itm.LU}结算日期{itm.SettleDate}无价格区间数据"); + // } + //} + //if (errors.Count > 0) + //{ + // return errors; + //} var site = first.Site; + //var pricelist = _priceRepository.Where(p => p.ClientCode == first.Site && p.IsCancel == false).ToList(); + //var inner = from d in p_list + // join p in pricelist on d.LU equals p.LU + // where + // d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime + // select d; + //var left = from d in p_list + // join p in inner on new { d.LU, d.PN } equals new { p.LU, p.PN } + // select d; + var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); var _entity = new BBAC_CAN_SA(); @@ -79,7 +120,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers var query = from d in p_list join p in pricelist on d.LU equals p.LU - where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site + where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site select new BBAC_CAN_SA_DETAIL() { ContractDocID = d.ContractDocID, diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs index 2adccc6f..46f458cc 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs @@ -1,16 +1,20 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Security.Cryptography; using System.Security.Policy; using System.Threading.Tasks; using EFCore.BulkExtensions; +using Microsoft.EntityFrameworkCore; using SettleAccount.Domain.BQ; using Volo.Abp.Data; +using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Services; using Win.Sfs.SettleAccount.Bases; using Win.Sfs.SettleAccount.Bases.DomainServices; using Win.Sfs.SettleAccount.Entities.Prices; using Win.Sfs.Shared.RepositoryBase; +using static Dapper.SqlMapper; namespace Win.Sfs.SettleAccount.Entities.BQ.Managers { @@ -31,12 +35,10 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers private readonly BaseDomainService _service; private readonly INormalEfCoreRepository _priceRepository; private readonly INormalEfCoreRepository _pricebjRepository; - - + private readonly INormalEfCoreRepository _priceydRepository; public PUB_NOT_SA_MNG() { } - public PUB_NOT_SA_MNG ( INormalEfCoreRepository repository, @@ -44,9 +46,8 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers INormalEfCoreRepository notRepository, BaseDomainService service, INormalEfCoreRepository priceRepository, - INormalEfCoreRepository pricebjRepository - - + INormalEfCoreRepository pricebjRepository, + INormalEfCoreRepository priceydRepository ) { _priceRepository = priceRepository; @@ -55,16 +56,15 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers _repository = repository; _detailRepository = detailRepository; _notRepository = notRepository; + _priceydRepository = priceydRepository; } public virtual async Task> GenerateSettlementOrder(List p_list) { - var first= p_list.FirstOrDefault(); - - - var site = first.Site; - - + var first = p_list.FirstOrDefault(); List errors = new List(); + var entityList = new List(); + var notList = new List(); + var billList = new List(); var query = p_list.Select(p => p.BusinessType).Distinct().ToList(); if (query.Count > 1) { @@ -83,179 +83,275 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers var priceListbj = _pricebjRepository.Where(p => p.IsCancel == false).ToList(); //价格单 foreach (var itm in priceListbj) { - priceList.Add(new PriceList() { LU = itm.LU, BeginTime = itm.BeginDate, EndTime = itm.EndDate, Price = itm.Price}); + priceList.Add(new PriceList() { LU = itm.LU, BeginTime = itm.BeginDate, EndTime = itm.EndDate, Price = itm.Price, ClientCode = itm.ClientCode }); + } + } + else if (first.BusinessType == EnumBusinessType.YinDuJian) + { + var priceListyd = _priceydRepository.Where(p => p.IsCancel == false).ToList(); //价格单 + foreach (var itm in priceListyd) + { + priceList.Add(new PriceList() { LU = itm.LU, BeginTime = itm.BeginDate, EndTime = itm.EndDate, Price = itm.Price, ClientCode = itm.ClientCode }); } } else { - priceList = _priceRepository.Where(p => p.IsCancel == false && p.ClientCode==site).ToList();//价格单 + priceList = _priceRepository.Where(p => p.IsCancel == false).ToList();//价格单 } - - if (first.BusinessType == EnumBusinessType.ZhiGongJianBBAC - || first.BusinessType == EnumBusinessType.BeiJian || first.BusinessType == EnumBusinessType.YinDuJian - ) + if (first.BusinessType == EnumBusinessType.ZhiGongJianBBAC || first.BusinessType == EnumBusinessType.YinDuJian) { var ls = p_list.Select(p => p.GroupNum).Distinct().ToList(); - var notlist = _notRepository.Where(p => ls.Contains(p.GroupNum)).ToList();//JIT_ASN整发 - List priceErrors = new List(); - string name = "ASN单号或发运ID"; - if (first.BusinessType == EnumBusinessType.BeiJian) - { - name = "备件"; - priceErrors = await _service.CheckPriceList(notlist, first.Site, true).ConfigureAwait(false); - } - else - { - priceErrors = await _service.CheckPriceList(notlist, first.Site).ConfigureAwait(false); - } - if (priceErrors.Count > 0) - { - foreach (var itm in priceErrors) - { - errors.Add($"{name}{itm.GroupNum}零件{itm.LU}结算日期{itm.SettleDate}无价格区间数据"); - } - } - if (errors.Count > 0) + var notlist = _notRepository.Where(p => ls.Contains(p.GroupNum) && p.BusinessType==first.BusinessType).ToList();//JIT_ASN整发 + if (first.BusinessType == EnumBusinessType.ZhiGongJianBBAC) { - return errors; - } - - var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); - var _entity = new PUB_CAN_SA(); - _entity.SetId(Guid.NewGuid()); - _entity.BillNum = billNumber; - _entity.InvGroupNum = billNumber; - _entity.Version = int.Parse(DateTime.Now.ToString("yyyyMM")); - _entity.State = SettleBillState.未结状态; - _entity.SettleBillNum = string.Empty; - _entity.BusinessType = first.BusinessType; - _entity.Site = site; - // var pricelist = _priceRepository.Where(p => p.ClientCode == site && p.IsCancel == false).ToList(); + var subqueryA = (from a in notlist + where a.BusinessType == first.BusinessType + group a by new { a.GroupNum, a.SettleBillNum, a.Version, a.Site } into groupedData + select new + { + Number = groupedData.Count(), + groupedData.Key.GroupNum, + groupedData.Key.SettleBillNum, + groupedData.Key.Version, + groupedData.Key.Site + }).AsQueryable(); + var subqueryB = (from a in notlist + join b in priceList on new { LU = a.LU, Site = a.Site } equals new { LU = b.LU, Site = b.ClientCode } + where a.SettleDate >= b.BeginTime && a.SettleDate <= b.EndTime && b.IsCancel == false + group a by new { a.GroupNum, a.SettleBillNum, a.Version, a.Site } into groupedData + select new + { + Number = groupedData.Count(), + groupedData.Key.GroupNum, + groupedData.Key.SettleBillNum, + groupedData.Key.Version, + groupedData.Key.Site - var _entityList = new List(); - if (first.BusinessType == EnumBusinessType.BeiJian) - { - //var bjdetailList = new List(); - - foreach (var itm in notlist) + }).AsQueryable(); + var result = from tmp1 in notlist + join tmp2 in (from a in subqueryA + join b in subqueryB on new { a.GroupNum, a.SettleBillNum, a.Version, a.Site } equals new { b.GroupNum, b.SettleBillNum, b.Version, b.Site } + where a.Number == b.Number + select new + { + a.GroupNum, + a.SettleBillNum, + a.Version, + a.Number + }) + on new { tmp1.GroupNum, tmp1.SettleBillNum } equals new { tmp2.GroupNum, tmp2.SettleBillNum } + select tmp1;//不可结 + var jit1 = result.Where(p => p.Site == "1040").ToList(); + var jit2 = result.Where(p => p.Site == "1046").ToList(); + var jit3 = result.Where(p => p.Site == "1041").ToList(); + if (jit1.Count > 0) { - var _detailEntity = new PUB_CAN_SA_DETAIL( - guid: GuidGenerator.Create(), - keyCode: itm.KeyCode, - version: itm.Version, - billNum: billNumber, - settleBillNum: itm.SettleBillNum, - lU: itm.LU, - pN: itm.PN, - site: itm.Site, - qty: itm.Qty, - price: itm.Price, - businessType: itm.BusinessType, - settleDate: itm.SettleDate, - groupNum: itm.GroupNum, - invGroupNum: billNumber, - invbillnum: string.Empty, - partcode: itm.PartCode, - pobillnum: string.Empty - ); - _detailEntity.IndexNum = itm.IndexNum; - _detailEntity.RealPartCode = itm.RealPartCode; - _detailEntity.Price = priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price; - _detailEntity.SetProperty("DeliveryNumber", itm.GetProperty("DeliveryNumber", ""));//交货号 - _detailEntity.SetProperty("InvoiceNumber", itm.GetProperty("InvoiceNumber", ""));//发票号 - _detailEntity.SetProperty("VendorCode", itm.GetProperty("VendorCode", ""));//供应商代码 - _detailEntity.SetProperty("VendorName", itm.GetProperty("VendorName", ""));//供应商名称 - _detailEntity.SetProperty("PO", itm.GetProperty("PO", "")); - _detailEntity.SetProperty("DeliveryIndexNumber", itm.GetProperty("DeliveryIndexNumber", ""));//交付索引号 - _detailEntity.SetProperty("PartName", itm.GetProperty("PartName", ""));//零件名称 - _detailEntity.SetProperty("PartGroup", itm.GetProperty("CommodityGroup", "")); - //_detailEntity.ExtraProperties = itm.ExtraProperties; - _entityList.Add(_detailEntity); + notlist.AddRange(jit1); + var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); + var entity = new PUB_CAN_SA(); + entity.SetId(Guid.NewGuid()); + entity.BillNum = billNumber; + entity.InvGroupNum = billNumber; + entity.Version = int.Parse(DateTime.Now.ToString("yyyyMM")); + entity.State = SettleBillState.未结状态; + entity.SettleBillNum = string.Empty; + entity.BusinessType = first.BusinessType; + entity.Site = "1040"; + billList.Add(entity); + foreach (var itm in jit1) + { + var detailEntity = new PUB_CAN_SA_DETAIL( + guid: GuidGenerator.Create(), + keyCode: itm.KeyCode, + version: itm.Version, + billNum: billNumber, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price, + businessType: itm.BusinessType, + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: billNumber, + invbillnum: string.Empty, + partcode: itm.PartCode, + pobillnum: string.Empty + ); + detailEntity.IndexNum = itm.IndexNum; + detailEntity.RealPartCode = itm.RealPartCode; + entityList.Add(detailEntity); + } } - } - else - { - foreach (var itm in notlist) + if (jit2.Count > 0) { - var _detailEntity = new PUB_CAN_SA_DETAIL( - guid: GuidGenerator.Create(), - keyCode: itm.KeyCode, - version: itm.Version, - billNum: billNumber, - settleBillNum: itm.SettleBillNum, - lU: itm.LU, - pN: itm.PN, - site: itm.Site, - qty: itm.Qty, - price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price, - businessType: itm.BusinessType, - settleDate: itm.SettleDate, - groupNum: itm.GroupNum, - invGroupNum: billNumber, - invbillnum: string.Empty, - partcode: itm.PartCode, - pobillnum: string.Empty - ); - _detailEntity.IndexNum = itm.IndexNum; - _detailEntity.RealPartCode = itm.RealPartCode; - _entityList.Add(_detailEntity); - + notlist.AddRange(jit2); + var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); + var entity = new PUB_CAN_SA(); + entity.SetId(Guid.NewGuid()); + entity.BillNum = billNumber; + entity.InvGroupNum = billNumber; + entity.Version = int.Parse(DateTime.Now.ToString("yyyyMM")); + entity.State = SettleBillState.未结状态; + entity.SettleBillNum = string.Empty; + entity.BusinessType = first.BusinessType; + entity.Site = "1046"; + billList.Add(entity); + foreach (var itm in jit2) + { + var detailEntity = new PUB_CAN_SA_DETAIL( + guid: GuidGenerator.Create(), + keyCode: itm.KeyCode, + version: itm.Version, + billNum: billNumber, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price, + businessType: itm.BusinessType, + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: billNumber, + invbillnum: string.Empty, + partcode: itm.PartCode, + pobillnum: string.Empty + ); + detailEntity.IndexNum = itm.IndexNum; + detailEntity.RealPartCode = itm.RealPartCode; + entityList.Add(detailEntity); + } } + if (jit3.Count > 0) + { + notlist.AddRange(jit3); + var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); + var entity = new PUB_CAN_SA(); + entity.SetId(Guid.NewGuid()); + entity.BillNum = billNumber; + entity.InvGroupNum = billNumber; + entity.Version = int.Parse(DateTime.Now.ToString("yyyyMM")); + entity.State = SettleBillState.未结状态; + entity.SettleBillNum = string.Empty; + entity.BusinessType = first.BusinessType; + entity.Site = "1041"; + billList.Add(entity); + foreach (var itm in jit3) + { + var detailEntity = new PUB_CAN_SA_DETAIL( + guid: GuidGenerator.Create(), + keyCode: itm.KeyCode, + version: itm.Version, + billNum: billNumber, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price, + businessType: itm.BusinessType, + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: billNumber, + invbillnum: string.Empty, + partcode: itm.PartCode, + pobillnum: string.Empty + ); + detailEntity.IndexNum = itm.IndexNum; + detailEntity.RealPartCode = itm.RealPartCode; + entityList.Add(detailEntity); + } + } + await _repository.DbContext.BulkDeleteAsync(notlist).ConfigureAwait(false); + await _repository.DbContext.BulkInsertAsync(billList).ConfigureAwait(false); + await _repository.DbContext.BulkInsertAsync(entityList).ConfigureAwait(false); } - - await _repository.DbContext.BulkDeleteAsync(p_list).ConfigureAwait(false); - await _repository.DbContext.BulkInsertAsync(new List() { _entity }).ConfigureAwait(false); - await _repository.DbContext.BulkInsertAsync(_entityList).ConfigureAwait(false); } else { - var _first=p_list.FirstOrDefault(); - var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); - var _entity = new PUB_CAN_SA(); - _entity.SetId(Guid.NewGuid()); - _entity.BillNum = billNumber; - _entity.InvGroupNum = billNumber; - _entity.Version = int.Parse(DateTime.Now.ToString("yyyymm")); - _entity.State = SettleBillState.未结状态; - _entity.SettleBillNum = string.Empty; - _entity.BusinessType=_first.BusinessType; - _entity.Site = _first.Site; - - var _entityList = new List(); - foreach (var itm in p_list) + if (first.BusinessType == EnumBusinessType.ZhiGongJianHBPO) { - var _detailEntity = new PUB_CAN_SA_DETAIL( - guid: GuidGenerator.Create(), - keyCode: itm.KeyCode, - version: itm.Version, - billNum: billNumber, - settleBillNum: itm.SettleBillNum, - lU: itm.LU, - pN: itm.PN, - site: itm.Site, - qty: itm.Qty, - price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price, - businessType: itm.BusinessType, - settleDate: itm.SettleDate, - groupNum: itm.GroupNum, - invGroupNum: billNumber, - invbillnum: string.Empty, - partcode: itm.PartCode, - pobillnum: string.Empty - ); - _detailEntity.RealPartCode = string.IsNullOrEmpty(itm.RealPartCode) ? itm.PartCode : itm.RealPartCode; - _entityList.Add(_detailEntity); + var _first = p_list.FirstOrDefault(); + var pricelist = priceList.Where(p => p.ClientCode == "104T" && p.IsCancel == false).ToList(); + var query1 = from d in p_list + join p in pricelist + on d.LU equals p.LU + where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == "104T" + select + new + { + a = new PUB_CAN_SA_DETAIL() + { + Version = d.Version, + KeyCode = d.KeyCode, + Site = "104T", + BusinessType = d.BusinessType, + ErpLoc = d.ErpLoc, + CreationTime = d.CreationTime, + GroupNum = d.GroupNum, + InvGroupNum = d.InvGroupNum, + LU = d.LU, + PN = d.PN, + SettleBillNum = d.SettleBillNum, + Price = p.Price, + SettleDate = d.SettleDate, + RealPartCode = d.RealPartCode, + PartCode = d.PartCode, + Qty = d.Qty + }, + b = d + }; + + + var pub_can_list = query1.Select(p => p.a).ToList(); + var pub_not_list = query1.Select(p => p.b).ToList(); + if (pub_can_list.Count > 0) + { + var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); + var entity = new PUB_CAN_SA(); + entity.SetId(Guid.NewGuid()); + entity.BillNum = billNumber; + entity.InvGroupNum = billNumber; + entity.Version = int.Parse(DateTime.Now.ToString("yyyymm")); + entity.State = SettleBillState.未结状态; + entity.SettleBillNum = string.Empty; + entity.BusinessType = _first.BusinessType; + entity.Site = _first.Site; + foreach (var itm in pub_can_list) + { + var _detailEntity = new PUB_CAN_SA_DETAIL( + guid: GuidGenerator.Create(), + keyCode: itm.KeyCode, + version: itm.Version, + billNum: billNumber, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: itm.Price, + businessType: itm.BusinessType, + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: billNumber, + invbillnum: string.Empty, + partcode: itm.PartCode, + pobillnum: string.Empty + ); + _detailEntity.RealPartCode = string.IsNullOrEmpty(itm.RealPartCode) ? itm.PartCode : itm.RealPartCode; + entityList.Add(_detailEntity); + } + await _repository.DbContext.BulkDeleteAsync(notList).ConfigureAwait(false); + await _repository.DbContext.BulkInsertAsync(new List() { entity }).ConfigureAwait(false); + await _repository.DbContext.BulkInsertAsync(pub_can_list).ConfigureAwait(false); + } } - // _repository.DbContext.Database.BeginTransaction(); - await _repository.DbContext.BulkDeleteAsync(p_list).ConfigureAwait(false); - await _repository.DbContext.BulkInsertAsync(new List() { _entity }).ConfigureAwait(false); - await _repository.DbContext.BulkInsertAsync(_entityList).ConfigureAwait(false); - //_repository.DbContext.Database.CommitTransaction(); + } return errors; - } - } }