Files
WMS-Api/src/WMS.Web.Domain/Services/InStockTaskService.cs
2023-11-01 12:02:20 +08:00

115 lines
4.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Core.Dto.Erp.Purchase;
using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Entitys;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Values;
namespace WMS.Web.Domain.Services
{
/// <summary>
/// 入库任务单-服务
/// </summary>
public class InStockTaskService: IInStockTaskService
{
private readonly IMapper _mapper;
private readonly IErpService _erpService;
private readonly ILoginService _loginService;
private readonly ITransactionRepositories _transactionRepositories;
private readonly IInStockRepositories _inStockRepositories;
private readonly IInStockTaskRepositories _inStockTaskRepositories;
public InStockTaskService(IMapper mapper, IErpService erpService, ILoginService loginService,
ITransactionRepositories transactionRepositories,
IInStockRepositories inStockRepositories, IInStockTaskRepositories inStockTaskRepositories)
{
_mapper = mapper;
_erpService = erpService;
_loginService = loginService;
_transactionRepositories = transactionRepositories;
_inStockRepositories = inStockRepositories;
_inStockTaskRepositories = inStockTaskRepositories;
}
/// <summary>
/// 同步:采购入库类型单据
/// </summary>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<Result> SsynPurchaseInStock(bool isTransaction)
{
//1.获取金蝶数据:采购订单数据
var erp_result= await _erpService.BillQueryForPurchaseInStock();
if (!erp_result.IsSuccess)
return Result.ReFailure(erp_result.Message,erp_result.Status);
var erp_list = erp_result.Data;
//2.通过单据编号找到wms系统现有的任务单并修改
var erp_removeList = new List<ErpPurchaseInStockResultDto>();
var SourceBillNo_list = erp_list.GroupBy(x => x.FBillNo).Select(x => x.Key).ToList();
var data_list = await _inStockTaskRepositories.GetListBy(SourceBillNo_list);
if (data_list.Count != 0)
{
//2.1提取出wms任务单明细信息
var data_list_details = data_list.SelectMany(x => x.Details).ToList();
foreach (var item in data_list_details)
{
var data= data_list.Where(x => x.Id == item.Fid).FirstOrDefault();
//2.1.1对比erp的物料信息
var erp_data = erp_list.Where(x =>x.FBillNo==data.SourceBillNo && x.FMaterialId == item.MaterialId).FirstOrDefault();
if (erp_data != null)
{
//2.1.2修改数量
item.AccruedQty = erp_data.FQty;
erp_removeList.Add(erp_data);
}
}
//2.2.提交修改
var isSuccess = await _inStockTaskRepositories.UpdateRange(data_list, isTransaction);
if (!isSuccess)
return ResultList<ErpPurchaseInStockResultDto>.ReFailure(ResultCodes.DateWriteError);
//2.3剔除:已修改的单据
foreach (var item in erp_removeList)
{
erp_list.Remove(item);
}
}
//3.wms任务单的来源单据编号不存在于erp中那么就新增
if (erp_list.Count != 0)
{
var add_entitys = new List<InStockTask>();
var billNos = erp_list.GroupBy(x => x.FBillNo).Select(x => x.Key).ToList();
foreach (var item in billNos)
{
var dto = new InStockTask();
dto.SourceBillNo = item;
dto.Create(InstockType.Purchase);
//找到当前对应来源单据编号的集合数据
var current_erp_details= erp_list.Where(x => x.FBillNo == item).ToList();
//给到dto的实体明细中
dto.Details = _mapper.Map<List<InStockTaskDetails>>(current_erp_details);
add_entitys.Add(dto);
}
//3.1提交新增
var isSuccess = await _inStockTaskRepositories.AddRange(add_entitys, isTransaction);
if (!isSuccess)
return ResultList<ErpPurchaseInStockResultDto>.ReFailure(ResultCodes.DateWriteError);
}
return Result.ReSuccess();
}
}
}