Browse Source

更新版本

master
zhaoxinyu 1 year ago
parent
commit
2156577bcf
  1. 69
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/NOT_SA_SERVICE.cs
  2. 73
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_CAN_SA_SERVICE.cs
  3. 40
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_NOT_SA_SERVICE.cs
  4. 14
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_CAN_SA_SERVICE.cs
  5. 40
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_NOT_SA_SERVICE.cs
  6. 399
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MakeCanSettlementService.cs
  7. 4
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs
  8. 7
      code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationModule.cs
  9. 65
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/BBAC_NOT_SA_MNG.cs
  10. 294
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs

69
code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/NOT_SA_SERVICE.cs

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -57,6 +58,25 @@ namespace Win.Sfs.SettleAccount.Bases
var dtos = ObjectMapper.Map<List<TEntityDetail>, List<TEntityDetailDto>>(entitys); var dtos = ObjectMapper.Map<List<TEntityDetail>, List<TEntityDetailDto>>(entitys);
return new PagedResultDto<TEntityDetailDto>(totalCount, dtos); return new PagedResultDto<TEntityDetailDto>(totalCount, dtos);
} }
public List<T> GetPagedData<T>(List<T> 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;
}
/// <summary> /// <summary>
/// 导出 /// 导出
/// </summary> /// </summary>
@ -66,24 +86,45 @@ namespace Win.Sfs.SettleAccount.Bases
//[Route("export")] //[Route("export")]
public virtual async Task<string> ExportAsync(TRequestDetailInput input) public virtual async Task<string> 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<TEntityDetail>, List<TEntityDetailExportDto>>(entities);
// var pageint = CalculatePageCount(dtoDetails.Count, 50000);
// List<Action> actionlist = new List<Action>();
// 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(); IExporter _excel = new ExcelExporter();
Stopwatch sw = Stopwatch.StartNew();
var entities = await _detailRepository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, 0, true).ConfigureAwait(false); var entities = await _detailRepository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, 0, true).ConfigureAwait(false);
var dtoDetails = ObjectMapper.Map<List<TEntityDetail>, List<TEntityDetailExportDto>>(entities); var dtoDetails = ObjectMapper.Map<List<TEntityDetail>, List<TEntityDetailExportDto>>(entities);
var classDisplayName = typeof(TEntityDetailExportDto).GetCustomAttribute<DisplayAttribute>()?.Name ?? typeof(TEntityDetailExportDto).Name; var classDisplayName = typeof(TEntityDetailExportDto).GetCustomAttribute<DisplayAttribute>()?.Name ?? typeof(TEntityDetailExportDto).Name;
string _fileName = $"{classDisplayName}_{Guid.NewGuid().ToString()}.xlsx"; string _fileName = $"{classDisplayName}_{Guid.NewGuid().ToString()}.xlsx";
byte[] result = null; 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 = await _excel.ExportAsByteArray(dtoDetails).ConfigureAwait(false);
result.ShouldNotBeNull(); result.ShouldNotBeNull();
@ -95,7 +136,13 @@ namespace Win.Sfs.SettleAccount.Bases
Content = result Content = result
} }
).ConfigureAwait(false); ).ConfigureAwait(false);
sw.Stop();
// var a= sw.ElapsedMilliseconds / 1000 / 60;
return _fileName; return _fileName;
//#endif
} }
/// <summary> /// <summary>
/// 生成可计算单 /// 生成可计算单

73
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 = "已创建发票不能重复创建" }); 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);//可结算 var entitys = await _bbacMng.GetDetalListAsync(invbillNum).ConfigureAwait(false);//可结算
List<ERR_EXP_DTO> errors = new List<ERR_EXP_DTO>(); List<ERR_EXP_DTO> errors = new List<ERR_EXP_DTO>();
var settleBillList = entitys.Select(p => p.SettleBillNum).Distinct().ToList(); var settleBillList = entitys.Select(p => p.SettleBillNum).Distinct().ToList();
var checklist = _saRepository.Where(p => settleBillList.Contains(p.BillNum)).ToList(); var checklist = _saRepository.Where(p => settleBillList.Contains(p.BillNum)).ToList();
var jischeck = checklist.Where(p => p.State == "0" && p.BusinessType==EnumBusinessType.JisBBAC).ToList(); var jischeck = checklist.Where(p => p.State == "0" && p.BusinessType==EnumBusinessType.JisBBAC).ToList();
foreach (var itm in jischeck) foreach (var itm in jischeck)
{ {
errors.Add(new ERR_EXP_DTO() { Remark = $"版本:{itm.Version},结算单:{itm.BillNum}+此结算单JIS未比对,结算数据需要比对后才能开票!" }); 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) }); return new JsonResult(new { Code = ApplicationConsts.ImportFailCode, Message = "错误提示文件已下载,请打开文件查看", fileName = await ExportErrorReportAsync(errorList).ConfigureAwait(false) });
} }
List<CustomCondition> customConditionList = new List<CustomCondition>(); List<CustomCondition> customConditionList = new List<CustomCondition>();
customConditionList.Add(new CustomCondition() { Name = "BillNum", Value = invbillNum }); customConditionList.Add(new CustomCondition() { Name = "BillNum", Value = invbillNum });
customConditionList.Add(new CustomCondition() { Name = "BussinessType", Value = main.BusinessType.ToString() }); customConditionList.Add(new CustomCondition() { Name = "BussinessType", Value = main.BusinessType.ToString() });
await _bbacMng.SetWaitingState(invbillNum); await _bbacMng.SetWaitingState(invbillNum);
var _taskid = await _service.ExportEnqueueAsync("生成发票任务", ExportExtentsion.Excel, string.Empty, string.Empty, CurrentUser, typeof(GenerateJisInvoiceService), customConditionList, (rs) => var _taskid = await _service.ExportEnqueueAsync("生成发票任务", ExportExtentsion.Excel, string.Empty, string.Empty, CurrentUser, typeof(GenerateJisInvoiceService), customConditionList, (rs) =>
{ {
}).ConfigureAwait(false); }).ConfigureAwait(false);
return new JsonResult(new { Code = 200, Message = "生成发票任务" }); 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<BBAC_CAN_SA_DETAIL>, List<BBAC_CAN_SA_DETAIL_DTO>>(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<PUB_ADJ_DETAIL>(), dtos, notlist, main.Version, main.InvGroupNum, string.Empty, main.BusinessType).ConfigureAwait(false);
// }
// else//二次开票
// {
// await SecInvoice(entitys, new List<PUB_ADJ_DETAIL>(), dtos, main.Version, main.InvGroupNum, string.Empty, main.BusinessType).ConfigureAwait(false);
// }
// }
//}
} }
else else
{ {

40
code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_NOT_SA_SERVICE.cs

@ -1,9 +1,14 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq.Dynamic.Core;
using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using SettleAccount.Domain.BQ; using SettleAccount.Domain.BQ;
using SettleAccount.Job.Services;
using TaskJob.EventArgs;
using Volo.Abp;
using Win.Abp.Snowflakes; using Win.Abp.Snowflakes;
using Win.Sfs.BaseData.ImportExcelCommon; using Win.Sfs.BaseData.ImportExcelCommon;
using Win.Sfs.SettleAccount.Bases; using Win.Sfs.SettleAccount.Bases;
@ -12,6 +17,8 @@ using Win.Sfs.SettleAccount.CommonManagers;
using Win.Sfs.SettleAccount.Constant; using Win.Sfs.SettleAccount.Constant;
using Win.Sfs.SettleAccount.Entities.BQ.Dtos; using Win.Sfs.SettleAccount.Entities.BQ.Dtos;
using Win.Sfs.SettleAccount.Entities.BQ.Managers; 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.SettleAccount.ExportReports;
using Win.Sfs.Shared.RepositoryBase; using Win.Sfs.Shared.RepositoryBase;
@ -30,35 +37,38 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
BBAC_NOT_SA_DETAIL_EXP_DTO> BBAC_NOT_SA_DETAIL_EXP_DTO>
{ {
private readonly BBAC_NOT_SA_MNG _bbacNotMng; private readonly BBAC_NOT_SA_MNG _bbacNotMng;
private readonly TaskJobService _service;
public BBAC_NOT_SA_SERVICE(IExcelImportAppService excelImportService, public BBAC_NOT_SA_SERVICE(IExcelImportAppService excelImportService,
ISnowflakeIdGenerator snowflakeIdGenerator, ISnowflakeIdGenerator snowflakeIdGenerator,
ICommonManager commonManager, INormalEfCoreRepository<BBAC_NOT_SA_DETAIL, Guid> detailRepository, BBAC_NOT_SA_MNG bbacNotMng, BaseDomainService baseservice) : ICommonManager commonManager, INormalEfCoreRepository<BBAC_NOT_SA_DETAIL, Guid> detailRepository, BBAC_NOT_SA_MNG bbacNotMng, BaseDomainService baseservice, TaskJobService service) :
base(excelImportService, snowflakeIdGenerator, commonManager, detailRepository,baseservice) base(excelImportService, snowflakeIdGenerator, commonManager, detailRepository,baseservice)
{ {
_bbacNotMng = bbacNotMng; _bbacNotMng = bbacNotMng;
_service = service;
} }
[HttpPost] [HttpPost]
public override async Task<IActionResult> GenerateSettlementOrder(BBAC_NOT_SA_DETAIL_REQ_DTO input) public override async Task<IActionResult> GenerateSettlementOrder(BBAC_NOT_SA_DETAIL_REQ_DTO input)
{ {
List<ERR_EXP_DTO> errorlist = new List<ERR_EXP_DTO>();
var entitys = await _detailRepository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, input.SkipCount).ConfigureAwait(false); //_detailRepository.DbContext.Set<BBAC_NOT_SA_DETAIL>().Where(p=>p.)
if (entitys == null) var flag= await _bbacNotMng.IsCompleted().ConfigureAwait(false);
if (flag == false)
{ {
errorlist.Add(new ERR_EXP_DTO() { Message = "查询条件无记录" }); throw new UserFriendlyException("任务生成中请等待", "400");
} }
else else
{ {
var errors = await _bbacNotMng.GenerateSettlementOrder(entitys).ConfigureAwait(false);
if (errors.Count > 0) var filters = JsonSerializer.Serialize(input.Filters);
{ List<CustomCondition> customConditionList = new List<CustomCondition>();
foreach (var itm in errors) customConditionList.Add(new CustomCondition() { Name = "condition", Value = filters });
{ customConditionList.Add(new CustomCondition() { Name = "businesstype", Value = EnumBusinessType.JisBBAC.ToString() });
errorlist.Add(new ERR_EXP_DTO() { Message = itm }); 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 = ApplicationConsts.ImportFailCode, Message = "错误提示文件已下载,请打开文件查看", fileName = await ExportErrorReportAsync(errorlist).ConfigureAwait(false) });
}
} }
return new JsonResult(new { Code = 200, Message = "生成成功" }); return new JsonResult(new { Code = 200, Message = "正在生成" });
} }
} }

14
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) }); return new JsonResult(new { Code = ApplicationConsts.ImportFailCode, Message = "错误提示文件已下载,请打开文件查看", fileName = await ExportErrorReportAsync(errorList).ConfigureAwait(false) });
} }
List<CustomCondition> customConditionList = new List<CustomCondition>(); List<CustomCondition> customConditionList = new List<CustomCondition>();
customConditionList.Add(new CustomCondition() { Name = "BillNum", Value = invbillnum }); customConditionList.Add(new CustomCondition() { Name = "BillNum", Value = invbillnum });
customConditionList.Add(new CustomCondition() { Name = "BussinessType", Value = main.BusinessType.ToString() }); customConditionList.Add(new CustomCondition() { Name = "BussinessType", Value = main.BusinessType.ToString() });
if (main.BusinessType == EnumBusinessType.MaiDanJianHBPO) if (main.BusinessType == EnumBusinessType.MaiDanJianHBPO)
{ {
var groupNumList = entitys.Select(p => p.GroupNum).Distinct().ToList(); 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<PUB_ADJ_DETAIL>(), dtos, main.Version, main.InvGroupNum, string.Empty, main.BusinessType).ConfigureAwait(false); var flag = await SecInvoice(entitys, new List<PUB_ADJ_DETAIL>(), dtos, main.Version, main.InvGroupNum, string.Empty, main.BusinessType).ConfigureAwait(false);
} }
} }
} }
else else
{ {
@ -188,18 +180,12 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
}).ConfigureAwait(false); }).ConfigureAwait(false);
} }
return new JsonResult(new { Code = 200, Message = "生成发票任务" }); return new JsonResult(new { Code = 200, Message = "生成发票任务" });
} }
else else
{ {
return new JsonResult(new { Code = 400, Message = "不存在可结算单记录" }); return new JsonResult(new { Code = 400, Message = "不存在可结算单记录" });
} }
} }
} }
} }

40
code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_NOT_SA_SERVICE.cs

@ -1,9 +1,14 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq.Dynamic.Core;
using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using DocumentFormat.OpenXml.Bibliography;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using SettleAccount.Domain.BQ; using SettleAccount.Domain.BQ;
using SettleAccount.Job.Services;
using TaskJob.EventArgs;
using Win.Abp.Snowflakes; using Win.Abp.Snowflakes;
using Win.Sfs.BaseData.ImportExcelCommon; using Win.Sfs.BaseData.ImportExcelCommon;
using Win.Sfs.SettleAccount.Bases; using Win.Sfs.SettleAccount.Bases;
@ -12,6 +17,8 @@ using Win.Sfs.SettleAccount.CommonManagers;
using Win.Sfs.SettleAccount.Constant; using Win.Sfs.SettleAccount.Constant;
using Win.Sfs.SettleAccount.Entities.BQ.Dtos; using Win.Sfs.SettleAccount.Entities.BQ.Dtos;
using Win.Sfs.SettleAccount.Entities.BQ.Managers; 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.SettleAccount.ExportReports;
using Win.Sfs.Shared.RepositoryBase; using Win.Sfs.Shared.RepositoryBase;
@ -30,39 +37,32 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
{ {
private readonly HBPO_NOT_SA_MNG _hbpoNotMng; private readonly HBPO_NOT_SA_MNG _hbpoNotMng;
private readonly TaskJobService _service;
public HBPO_NOT_SA_SERVICE(IExcelImportAppService excelImportService, public HBPO_NOT_SA_SERVICE(IExcelImportAppService excelImportService,
ISnowflakeIdGenerator snowflakeIdGenerator, ISnowflakeIdGenerator snowflakeIdGenerator,
ICommonManager commonManager, ICommonManager commonManager,
INormalEfCoreRepository<HBPO_NOT_SA_DETAIL, Guid> detailRepository, INormalEfCoreRepository<HBPO_NOT_SA_DETAIL, Guid> detailRepository,
HBPO_NOT_SA_MNG hbpoNotMng, BaseDomainService baseservice HBPO_NOT_SA_MNG hbpoNotMng, BaseDomainService baseservice,
TaskJobService service
) : base(excelImportService, snowflakeIdGenerator, commonManager, detailRepository,baseservice) ) : base(excelImportService, snowflakeIdGenerator, commonManager, detailRepository,baseservice)
{ {
_service = service;
_hbpoNotMng = hbpoNotMng; _hbpoNotMng = hbpoNotMng;
} }
public override async Task<IActionResult> GenerateSettlementOrder(HBPO_NOT_SA_DETAIL_REQ_DTO input) public override async Task<IActionResult> GenerateSettlementOrder(HBPO_NOT_SA_DETAIL_REQ_DTO input)
{ {
var entitys = await _detailRepository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, input.SkipCount).ConfigureAwait(false);
List<ERR_EXP_DTO> errorlist = new List<ERR_EXP_DTO>();
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<CustomCondition> customConditionList = new List<CustomCondition>();
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 = "生成成功" });
} }
} }
} }

399
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<string> exportName, List<CustomCondition> 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<List<FilterCondition>>(conditions);
if (businesstype == "JisBBAC")
{
List<BBAC_CAN_SA> billList = new List<BBAC_CAN_SA>();
List<BBAC_CAN_SA_DETAIL> billDetails = new List<BBAC_CAN_SA_DETAIL>();
var bbacquery = _dbcontext.Set<BBAC_NOT_SA_DETAIL>().AsQueryable();
if (filers.Count > 0)
{
bbacquery = bbacquery.Where(filers.ToLambda<BBAC_NOT_SA_DETAIL>());
}
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<BBAC_NOT_SA_DETAIL> notlist = new List<BBAC_NOT_SA_DETAIL>();
if (jis1.Count > 0)//1040
{
var pricelist = _dbcontext.Set<PriceList>().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<PriceList>().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<BBAC_NOT_SA_DETAIL>().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<BBAC_SA_DETAIL>()
join b in _dbcontext.Set<BBAC_CAN_SA_DETAIL>() 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<HBPO_NOT_SA_DETAIL> notlist = new List<HBPO_NOT_SA_DETAIL>();
List<HBPO_CAN_SA> billList = new List<HBPO_CAN_SA>();
List<HBPO_CAN_SA_DETAIL> billDetails = new List<HBPO_CAN_SA_DETAIL>();
var bbacquery = _dbcontext.Set<HBPO_NOT_SA_DETAIL>().AsQueryable();
if (filers.Count > 0)
{
bbacquery = bbacquery.Where(filers.ToLambda<HBPO_NOT_SA_DETAIL>());
}
var p_list = bbacquery.ToList();
var jis1 = p_list.Where(p => p.Site == "104T").ToList();
if (jis1.Count > 0)
{
var pricelist = _dbcontext.Set<PriceList>().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<HBPO_SA_DETAIL>()
join b in _dbcontext.Set<HBPO_CAN_SA_DETAIL>() 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<BBAC_SA_DETAIL>()
join b in _dbcontext.Set<BBAC_CAN_SA_DETAIL>() 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();
}
}
}

4
code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs

@ -398,11 +398,8 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
[HttpPost] [HttpPost]
public async Task<PagedResultDto<VmiLog>> Log(LogRequestDto input) public async Task<PagedResultDto<VmiLog>> Log(LogRequestDto input)
{ {
var entities = await _logRepository.GetListByFilterAsync(input.Filters, input.Sorting, input.MaxResultCount, input.SkipCount).ConfigureAwait(false); var entities = await _logRepository.GetListByFilterAsync(input.Filters, input.Sorting, input.MaxResultCount, input.SkipCount).ConfigureAwait(false);
var totalCount = await _logRepository.GetCountByFilterAsync(input.Filters).ConfigureAwait(false); var totalCount = await _logRepository.GetCountByFilterAsync(input.Filters).ConfigureAwait(false);
return new PagedResultDto<VmiLog>(totalCount, entities); return new PagedResultDto<VmiLog>(totalCount, entities);
} }
@ -969,7 +966,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
seDetails.Add(seDetail); seDetails.Add(seDetail);
} }
} }
var result = await CheckBusinessJISLocation(seDetails, businessType).ConfigureAwait(false); var result = await CheckBusinessJISLocation(seDetails, businessType).ConfigureAwait(false);
if (result != "ok") if (result != "ok")
{ {

7
code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationModule.cs

@ -110,9 +110,10 @@ namespace Win.Sfs.SettleAccount
{ {
return implementationFactory.GetService<PDMakeService>(); return implementationFactory.GetService<PDMakeService>();
} }
if (key.Equals(typeof(MakeCanSettlementService).FullName))
{
return implementationFactory.GetService<MakeCanSettlementService>();
}
else else
{ {
throw new ArgumentException($"Not Support key:{key}"); throw new ArgumentException($"Not Support key:{key}");

65
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.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using EFCore.BulkExtensions; using EFCore.BulkExtensions;
using Microsoft.EntityFrameworkCore;
using NPOI.SS.Formula.Functions;
using SettleAccount.Domain.BQ; using SettleAccount.Domain.BQ;
using Volo.Abp.Domain.Services; using Volo.Abp.Domain.Services;
using Win.Sfs.SettleAccount.Bases; using Win.Sfs.SettleAccount.Bases;
@ -23,6 +25,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
{ {
private readonly INormalEfCoreRepository<BBAC_CAN_SA, Guid> _repository; private readonly INormalEfCoreRepository<BBAC_CAN_SA, Guid> _repository;
private readonly INormalEfCoreRepository<BBAC_CAN_SA_DETAIL, Guid> _detailRepository; private readonly INormalEfCoreRepository<BBAC_CAN_SA_DETAIL, Guid> _detailRepository;
private readonly INormalEfCoreRepository<BBAC_SA_DETAIL, Guid> _sadetailRepository;
private readonly INormalEfCoreRepository<BBAC_NOT_SA_DETAIL, Guid> _notRepository; private readonly INormalEfCoreRepository<BBAC_NOT_SA_DETAIL, Guid> _notRepository;
private readonly INormalEfCoreRepository<PriceList, Guid> _priceRepository; private readonly INormalEfCoreRepository<PriceList, Guid> _priceRepository;
private readonly BaseDomainService _service; private readonly BaseDomainService _service;
@ -35,33 +38,71 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
INormalEfCoreRepository<BBAC_CAN_SA, Guid> repository, INormalEfCoreRepository<BBAC_CAN_SA, Guid> repository,
INormalEfCoreRepository<BBAC_CAN_SA_DETAIL, Guid> detailRepository, INormalEfCoreRepository<BBAC_CAN_SA_DETAIL, Guid> detailRepository,
INormalEfCoreRepository<BBAC_NOT_SA_DETAIL, Guid> notRepository, INormalEfCoreRepository<BBAC_NOT_SA_DETAIL, Guid> notRepository,
INormalEfCoreRepository<PriceList, Guid> priceRepository INormalEfCoreRepository<PriceList, Guid> priceRepository,
INormalEfCoreRepository<BBAC_SA_DETAIL, Guid> sadetailRepository
) )
{ {
_priceRepository = priceRepository; _priceRepository = priceRepository;
_repository = repository; _repository = repository;
_detailRepository = detailRepository; _detailRepository = detailRepository;
_notRepository = notRepository; _notRepository = notRepository;
_sadetailRepository= sadetailRepository;
_service = service; _service = service;
} }
public virtual async Task<List<string>> GenerateSettlementOrder(List<BBAC_NOT_SA_DETAIL> p_list)
{
var first = p_list.FirstOrDefault();
List<string> errors = new List<string>();
var priceErrors = await _service.CheckPriceList(p_list, first.Site).ConfigureAwait(false);
if (priceErrors.Count > 0) public virtual async Task<bool> IsCompleted()
{ {
foreach (var itm in priceErrors) var list=await _notRepository.Where(p=>p.IsReturn==true).ToListAsync().ConfigureAwait(false);
if (list.Count > 0)
{ {
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<BBAC_NOT_SA_DETAIL>() { first});
} }
return true;
}
public virtual async Task<List<string>> GenerateSettlementOrder(List<BBAC_NOT_SA_DETAIL> p_list)
{
var first = p_list.FirstOrDefault();
List<string> errors = new List<string>();
//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 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 billNumber = OrderNumberGenerator.GenerateOrderNumber("N");
var _entity = new BBAC_CAN_SA(); var _entity = new BBAC_CAN_SA();

294
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs

@ -1,16 +1,20 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Security.Cryptography;
using System.Security.Policy; using System.Security.Policy;
using System.Threading.Tasks; using System.Threading.Tasks;
using EFCore.BulkExtensions; using EFCore.BulkExtensions;
using Microsoft.EntityFrameworkCore;
using SettleAccount.Domain.BQ; using SettleAccount.Domain.BQ;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Services; using Volo.Abp.Domain.Services;
using Win.Sfs.SettleAccount.Bases; using Win.Sfs.SettleAccount.Bases;
using Win.Sfs.SettleAccount.Bases.DomainServices; using Win.Sfs.SettleAccount.Bases.DomainServices;
using Win.Sfs.SettleAccount.Entities.Prices; using Win.Sfs.SettleAccount.Entities.Prices;
using Win.Sfs.Shared.RepositoryBase; using Win.Sfs.Shared.RepositoryBase;
using static Dapper.SqlMapper;
namespace Win.Sfs.SettleAccount.Entities.BQ.Managers namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
{ {
@ -31,12 +35,10 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
private readonly BaseDomainService _service; private readonly BaseDomainService _service;
private readonly INormalEfCoreRepository<PriceList, Guid> _priceRepository; private readonly INormalEfCoreRepository<PriceList, Guid> _priceRepository;
private readonly INormalEfCoreRepository<PriceListBJ, Guid> _pricebjRepository; private readonly INormalEfCoreRepository<PriceListBJ, Guid> _pricebjRepository;
private readonly INormalEfCoreRepository<PriceListYinDu, Guid> _priceydRepository;
public PUB_NOT_SA_MNG() public PUB_NOT_SA_MNG()
{ {
} }
public PUB_NOT_SA_MNG public PUB_NOT_SA_MNG
( (
INormalEfCoreRepository<PUB_CAN_SA, Guid> repository, INormalEfCoreRepository<PUB_CAN_SA, Guid> repository,
@ -44,9 +46,8 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
INormalEfCoreRepository<PUB_NOT_SA_DETAIL, Guid> notRepository, INormalEfCoreRepository<PUB_NOT_SA_DETAIL, Guid> notRepository,
BaseDomainService service, BaseDomainService service,
INormalEfCoreRepository<PriceList, Guid> priceRepository, INormalEfCoreRepository<PriceList, Guid> priceRepository,
INormalEfCoreRepository<PriceListBJ, Guid> pricebjRepository INormalEfCoreRepository<PriceListBJ, Guid> pricebjRepository,
INormalEfCoreRepository<PriceListYinDu, Guid> priceydRepository
) )
{ {
_priceRepository = priceRepository; _priceRepository = priceRepository;
@ -55,16 +56,15 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
_repository = repository; _repository = repository;
_detailRepository = detailRepository; _detailRepository = detailRepository;
_notRepository = notRepository; _notRepository = notRepository;
_priceydRepository = priceydRepository;
} }
public virtual async Task<List<string>> GenerateSettlementOrder(List<PUB_NOT_SA_DETAIL> p_list) public virtual async Task<List<string>> GenerateSettlementOrder(List<PUB_NOT_SA_DETAIL> p_list)
{ {
var first = p_list.FirstOrDefault(); var first = p_list.FirstOrDefault();
var site = first.Site;
List<string> errors = new List<string>(); List<string> errors = new List<string>();
var entityList = new List<PUB_CAN_SA_DETAIL>();
var notList = new List<PUB_NOT_SA_DETAIL>();
var billList = new List<PUB_CAN_SA>();
var query = p_list.Select(p => p.BusinessType).Distinct().ToList(); var query = p_list.Select(p => p.BusinessType).Distinct().ToList();
if (query.Count > 1) if (query.Count > 1)
{ {
@ -83,63 +83,125 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
var priceListbj = _pricebjRepository.Where(p => p.IsCancel == false).ToList(); //价格单 var priceListbj = _pricebjRepository.Where(p => p.IsCancel == false).ToList(); //价格单
foreach (var itm in priceListbj) 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 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.YinDuJian)
if (first.BusinessType == EnumBusinessType.ZhiGongJianBBAC
|| first.BusinessType == EnumBusinessType.BeiJian || first.BusinessType == EnumBusinessType.YinDuJian
)
{ {
var ls = p_list.Select(p => p.GroupNum).Distinct().ToList(); var ls = p_list.Select(p => p.GroupNum).Distinct().ToList();
var notlist = _notRepository.Where(p => ls.Contains(p.GroupNum)).ToList();//JIT_ASN整发 var notlist = _notRepository.Where(p => ls.Contains(p.GroupNum) && p.BusinessType==first.BusinessType).ToList();//JIT_ASN整发
List<PUB_NOT_SA_DETAIL> priceErrors = new List<PUB_NOT_SA_DETAIL>(); if (first.BusinessType == EnumBusinessType.ZhiGongJianBBAC)
string name = "ASN单号或发运ID";
if (first.BusinessType == EnumBusinessType.BeiJian)
{ {
name = "备件"; var subqueryA = (from a in notlist
priceErrors = await _service.CheckPriceList(notlist, first.Site, true).ConfigureAwait(false); where a.BusinessType == first.BusinessType
} group a by new { a.GroupNum, a.SettleBillNum, a.Version, a.Site } into groupedData
else select new
{ {
priceErrors = await _service.CheckPriceList(notlist, first.Site).ConfigureAwait(false); Number = groupedData.Count(),
} groupedData.Key.GroupNum,
if (priceErrors.Count > 0) 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
{ {
foreach (var itm in priceErrors) Number = groupedData.Count(),
groupedData.Key.GroupNum,
groupedData.Key.SettleBillNum,
groupedData.Key.Version,
groupedData.Key.Site
}).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
{ {
errors.Add($"{name}{itm.GroupNum}零件{itm.LU}结算日期{itm.SettleDate}无价格区间数据"); a.GroupNum,
} a.SettleBillNum,
} a.Version,
if (errors.Count > 0) 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)
{ {
return errors;
}
notlist.AddRange(jit1);
var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); var billNumber = OrderNumberGenerator.GenerateOrderNumber("N");
var _entity = new PUB_CAN_SA(); var entity = new PUB_CAN_SA();
_entity.SetId(Guid.NewGuid()); entity.SetId(Guid.NewGuid());
_entity.BillNum = billNumber; entity.BillNum = billNumber;
_entity.InvGroupNum = billNumber; entity.InvGroupNum = billNumber;
_entity.Version = int.Parse(DateTime.Now.ToString("yyyyMM")); entity.Version = int.Parse(DateTime.Now.ToString("yyyyMM"));
_entity.State = SettleBillState.; entity.State = SettleBillState.;
_entity.SettleBillNum = string.Empty; entity.SettleBillNum = string.Empty;
_entity.BusinessType = first.BusinessType; entity.BusinessType = first.BusinessType;
_entity.Site = site; entity.Site = "1040";
// var pricelist = _priceRepository.Where(p => p.ClientCode == site && p.IsCancel == false).ToList(); billList.Add(entity);
foreach (var itm in jit1)
var _entityList = new List<PUB_CAN_SA_DETAIL>();
if (first.BusinessType == EnumBusinessType.BeiJian)
{ {
//var bjdetailList = new List<PUB_CAN_SA_DETAIL>(); var detailEntity = new PUB_CAN_SA_DETAIL(
guid: GuidGenerator.Create(),
foreach (var itm in notlist) 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 (jit2.Count > 0)
{ {
var _detailEntity = new PUB_CAN_SA_DETAIL( 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(), guid: GuidGenerator.Create(),
keyCode: itm.KeyCode, keyCode: itm.KeyCode,
version: itm.Version, version: itm.Version,
@ -149,7 +211,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
pN: itm.PN, pN: itm.PN,
site: itm.Site, site: itm.Site,
qty: itm.Qty, qty: itm.Qty,
price: itm.Price, price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price,
businessType: itm.BusinessType, businessType: itm.BusinessType,
settleDate: itm.SettleDate, settleDate: itm.SettleDate,
groupNum: itm.GroupNum, groupNum: itm.GroupNum,
@ -158,27 +220,28 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
partcode: itm.PartCode, partcode: itm.PartCode,
pobillnum: string.Empty pobillnum: string.Empty
); );
_detailEntity.IndexNum = itm.IndexNum; detailEntity.IndexNum = itm.IndexNum;
_detailEntity.RealPartCode = itm.RealPartCode; 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; entityList.Add(detailEntity);
_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);
} }
} }
else if (jit3.Count > 0)
{ {
foreach (var itm in notlist) 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( var detailEntity = new PUB_CAN_SA_DETAIL(
guid: GuidGenerator.Create(), guid: GuidGenerator.Create(),
keyCode: itm.KeyCode, keyCode: itm.KeyCode,
version: itm.Version, version: itm.Version,
@ -197,33 +260,67 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
partcode: itm.PartCode, partcode: itm.PartCode,
pobillnum: string.Empty pobillnum: string.Empty
); );
_detailEntity.IndexNum = itm.IndexNum; detailEntity.IndexNum = itm.IndexNum;
_detailEntity.RealPartCode = itm.RealPartCode; detailEntity.RealPartCode = itm.RealPartCode;
_entityList.Add(_detailEntity); entityList.Add(detailEntity);
} }
} }
await _repository.DbContext.BulkDeleteAsync(notlist).ConfigureAwait(false);
await _repository.DbContext.BulkDeleteAsync(p_list).ConfigureAwait(false); await _repository.DbContext.BulkInsertAsync(billList).ConfigureAwait(false);
await _repository.DbContext.BulkInsertAsync(new List<PUB_CAN_SA>() { _entity }).ConfigureAwait(false); await _repository.DbContext.BulkInsertAsync(entityList).ConfigureAwait(false);
await _repository.DbContext.BulkInsertAsync(_entityList).ConfigureAwait(false); }
} }
else else
{
if (first.BusinessType == EnumBusinessType.ZhiGongJianHBPO)
{ {
var _first = p_list.FirstOrDefault(); var _first = p_list.FirstOrDefault();
var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); var pricelist = priceList.Where(p => p.ClientCode == "104T" && p.IsCancel == false).ToList();
var _entity = new PUB_CAN_SA(); var query1 = from d in p_list
_entity.SetId(Guid.NewGuid()); join p in pricelist
_entity.BillNum = billNumber; on d.LU equals p.LU
_entity.InvGroupNum = billNumber; where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == "104T"
_entity.Version = int.Parse(DateTime.Now.ToString("yyyymm")); select
_entity.State = SettleBillState.; new
_entity.SettleBillNum = string.Empty; {
_entity.BusinessType=_first.BusinessType; a = new PUB_CAN_SA_DETAIL()
_entity.Site = _first.Site; {
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 _entityList = new List<PUB_CAN_SA_DETAIL>(); var pub_can_list = query1.Select(p => p.a).ToList();
foreach (var itm in p_list) 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( var _detailEntity = new PUB_CAN_SA_DETAIL(
guid: GuidGenerator.Create(), guid: GuidGenerator.Create(),
@ -235,7 +332,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
pN: itm.PN, pN: itm.PN,
site: itm.Site, site: itm.Site,
qty: itm.Qty, qty: itm.Qty,
price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price, price: itm.Price,
businessType: itm.BusinessType, businessType: itm.BusinessType,
settleDate: itm.SettleDate, settleDate: itm.SettleDate,
groupNum: itm.GroupNum, groupNum: itm.GroupNum,
@ -245,17 +342,16 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
pobillnum: string.Empty pobillnum: string.Empty
); );
_detailEntity.RealPartCode = string.IsNullOrEmpty(itm.RealPartCode) ? itm.PartCode : itm.RealPartCode; _detailEntity.RealPartCode = string.IsNullOrEmpty(itm.RealPartCode) ? itm.PartCode : itm.RealPartCode;
_entityList.Add(_detailEntity); entityList.Add(_detailEntity);
} }
// _repository.DbContext.Database.BeginTransaction(); await _repository.DbContext.BulkDeleteAsync(notList).ConfigureAwait(false);
await _repository.DbContext.BulkDeleteAsync(p_list).ConfigureAwait(false); await _repository.DbContext.BulkInsertAsync(new List<PUB_CAN_SA>() { entity }).ConfigureAwait(false);
await _repository.DbContext.BulkInsertAsync(new List<PUB_CAN_SA>() { _entity }).ConfigureAwait(false); await _repository.DbContext.BulkInsertAsync(pub_can_list).ConfigureAwait(false);
await _repository.DbContext.BulkInsertAsync(_entityList).ConfigureAwait(false);
//_repository.DbContext.Database.CommitTransaction();
} }
return errors;
} }
} }
return errors;
}
}
} }

Loading…
Cancel
Save