This commit is contained in:
tongfei
2024-03-12 10:53:05 +08:00
parent 6c6c0e7472
commit 28cdb9e9b1
4 changed files with 243 additions and 59 deletions

View File

@@ -134,7 +134,10 @@ namespace WMS.Web.Api.Controllers
var sourcesBillNos = tasks.Select(x => x.SourceBillNo).ToList(); var sourcesBillNos = tasks.Select(x => x.SourceBillNo).ToList();
//2.同步金蝶 //2.同步金蝶
return await _inStockTaskService.Sysn(sourcesBillNos); await _inStockTaskService.Sysn(sourcesBillNos);
//再刷新3天内所有的
return await _inStockTaskService.Sysn(null);
} }
/// <summary> /// <summary>

View File

@@ -4531,7 +4531,15 @@
</member> </member>
<member name="M:WMS.Web.Domain.Services.InStockTaskService.SysnData(System.Collections.Generic.List{WMS.Web.Core.Dto.Erp.ErpInStockResultDto},System.Boolean)"> <member name="M:WMS.Web.Domain.Services.InStockTaskService.SysnData(System.Collections.Generic.List{WMS.Web.Core.Dto.Erp.ErpInStockResultDto},System.Boolean)">
<summary> <summary>
ERP数据同步到WMS数据库 ERP数据同步到WMS数据库-旧代码
</summary>
<param name="erp_list"></param>
<param name="isTransaction"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Services.InStockTaskService.SysnDataNew(System.Collections.Generic.List{WMS.Web.Core.Dto.Erp.ErpInStockResultDto},System.Boolean)">
<summary>
ERP数据同步到WMS数据库-新代码
</summary> </summary>
<param name="erp_list"></param> <param name="erp_list"></param>
<param name="isTransaction"></param> <param name="isTransaction"></param>

View File

@@ -1140,8 +1140,8 @@ namespace WMS.Web.Domain.Services
var isAllNoInventory = update_entity.Details.All(x => x.Qty == 0); var isAllNoInventory = update_entity.Details.All(x => x.Qty == 0);
if (isAllNoInventory) if (isAllNoInventory)
{ {
//给改箱服务用按箱的话就要把明细里的数量修改为0 //给改箱服务用按箱的话就要把明细里的数量修改为0;备注当数量为0后就不要改箱了
changeBox_inventoryList.Add(GenerateBoxInventory(update_entity.Clone())); //changeBox_inventoryList.Add(GenerateBoxInventory(update_entity.Clone()));
delete_ids.Add(update_entity.Id); delete_ids.Add(update_entity.Id);
} }

View File

@@ -114,7 +114,7 @@ namespace WMS.Web.Domain.Services
return Result.ReFailure(erp_result.Message, erp_result.Status); return Result.ReFailure(erp_result.Message, erp_result.Status);
var erp_list = erp_result.Data; var erp_list = erp_result.Data;
return await this.SysnData(erp_list.ToList(), isTransaction); return await this.SysnDataNew(erp_list.ToList(), isTransaction);
} }
/// <summary> /// <summary>
@@ -131,7 +131,7 @@ namespace WMS.Web.Domain.Services
return Result.ReFailure(erp_result.Message, erp_result.Status); return Result.ReFailure(erp_result.Message, erp_result.Status);
var erp_list = erp_result.Data; var erp_list = erp_result.Data;
return await this.SysnData(erp_list.ToList(), isTransaction); return await this.SysnDataNew(erp_list.ToList(), isTransaction);
} }
/// <summary> /// <summary>
@@ -148,7 +148,7 @@ namespace WMS.Web.Domain.Services
return Result.ReFailure(erp_result.Message, erp_result.Status); return Result.ReFailure(erp_result.Message, erp_result.Status);
var erp_list = erp_result.Data; var erp_list = erp_result.Data;
return await this.SysnData(erp_list.ToList(), isTransaction); return await this.SysnDataNew(erp_list.ToList(), isTransaction);
} }
/// <summary> /// <summary>
@@ -164,7 +164,7 @@ namespace WMS.Web.Domain.Services
if (!erp_result.IsSuccess) if (!erp_result.IsSuccess)
return Result.ReFailure(erp_result.Message, erp_result.Status); return Result.ReFailure(erp_result.Message, erp_result.Status);
var erp_list = erp_result.Data; var erp_list = erp_result.Data;
return await this.SysnData(erp_list.ToList(), isTransaction); return await this.SysnDataNew(erp_list.ToList(), isTransaction);
} }
/// <summary> /// <summary>
@@ -190,7 +190,7 @@ namespace WMS.Web.Domain.Services
var erp_list_disass = erp_result_disass.Data; var erp_list_disass = erp_result_disass.Data;
erp_list.AddRange(erp_list_disass); erp_list.AddRange(erp_list_disass);
return await this.SysnData(erp_list, isTransaction); return await this.SysnDataNew(erp_list, isTransaction);
} }
/// <summary> /// <summary>
@@ -223,38 +223,99 @@ namespace WMS.Web.Domain.Services
/// <param name="billNos"></param> /// <param name="billNos"></param>
/// <param name="isTransaction"></param> /// <param name="isTransaction"></param>
/// <returns></returns> /// <returns></returns>
public async Task<Result> InStock(List<string> billNos,bool isTransaction) public async Task<Result> InStock(List<string> billNos, bool isTransaction)
{
if (billNos == null || billNos.Count == 0)
{ {
//1.同步数据:采购订单 //1.同步数据:采购订单
var purchase_result = await this.SsynPurchaseInStock(billNos, isTransaction); var purchase_result = await this.SsynPurchaseInStock(null, isTransaction);
if (!purchase_result.IsSuccess) if (!purchase_result.IsSuccess)
return Result.ReFailure(purchase_result.Message, purchase_result.Status); return Result.ReFailure(purchase_result.Message, purchase_result.Status);
//2.同步数据:其他入库单 //2.同步数据:其他入库单
var miscellaneou_result = await this.SysnMiscellaneous(billNos, isTransaction); var miscellaneou_result = await this.SysnMiscellaneous(null, isTransaction);
if (!miscellaneou_result.IsSuccess) if (!miscellaneou_result.IsSuccess)
return Result.ReFailure(miscellaneou_result.Message, miscellaneou_result.Status); return Result.ReFailure(miscellaneou_result.Message, miscellaneou_result.Status);
//3.同步数据:直接调拨入库单 //3.同步数据:直接调拨入库单
var TransferDirect_result = await this.SysnTransferDirect(billNos, isTransaction); var TransferDirect_result = await this.SysnTransferDirect(null, isTransaction);
if (!TransferDirect_result.IsSuccess) if (!TransferDirect_result.IsSuccess)
return Result.ReFailure(TransferDirect_result.Message, TransferDirect_result.Status); return Result.ReFailure(TransferDirect_result.Message, TransferDirect_result.Status);
//4.同步数据:分步式入库单 //4.同步数据:分步式入库单
var Transferin_result = await this.SysnTransferin(billNos, isTransaction); var Transferin_result = await this.SysnTransferin(null, isTransaction);
if (!Transferin_result.IsSuccess) if (!Transferin_result.IsSuccess)
return Result.ReFailure(Transferin_result.Message, Transferin_result.Status); return Result.ReFailure(Transferin_result.Message, Transferin_result.Status);
//5.同步数据:组装拆卸单 //5.同步数据:组装拆卸单
var AssembledApp_result = await this.SysnAssembledApp(billNos, isTransaction); var AssembledApp_result = await this.SysnAssembledApp(null, isTransaction);
if (!AssembledApp_result.IsSuccess) if (!AssembledApp_result.IsSuccess)
return Result.ReFailure(AssembledApp_result.Message, AssembledApp_result.Status); return Result.ReFailure(AssembledApp_result.Message, AssembledApp_result.Status);
}
else
{
List<string> Instock_sourceBillNos = new List<string>();
List<string> Miscellaneous_sourceBillNos = new List<string>();
List<string> TransferDirect_sourceBillNos = new List<string>();
List<string> Transferin_sourceBillNos = new List<string>();
List<string> AssembledApp_sourceBillNos = new List<string>();
var taskList = await _inStockTaskRepositories.GetListBy(billNos);
foreach (var entity in taskList)
{
if (entity.Type == InstockType.Purchase)
Instock_sourceBillNos.Add(entity.SourceBillNo);
else if (entity.Type == InstockType.Stkdirecttransfers)
TransferDirect_sourceBillNos.Add(entity.SourceBillNo);
else if (entity.Type == InstockType.StktransferInst)
Transferin_sourceBillNos.Add(entity.SourceBillNo);
else if (entity.Type == InstockType.Assembled)
AssembledApp_sourceBillNos.Add(entity.SourceBillNo);
else if (entity.Type == InstockType.Miscellaneous)
Miscellaneous_sourceBillNos.Add(entity.SourceBillNo);
}
if (Instock_sourceBillNos.Count() > 0)
{
//1.同步数据:采购订单
var purchase_result = await this.SsynPurchaseInStock(Instock_sourceBillNos, isTransaction);
if (!purchase_result.IsSuccess)
return Result.ReFailure(purchase_result.Message, purchase_result.Status);
}
if (Miscellaneous_sourceBillNos.Count() > 0)
{
//2.同步数据:其他入库单
var miscellaneou_result = await this.SysnMiscellaneous(Miscellaneous_sourceBillNos, isTransaction);
if (!miscellaneou_result.IsSuccess)
return Result.ReFailure(miscellaneou_result.Message, miscellaneou_result.Status);
}
if (TransferDirect_sourceBillNos.Count() > 0)
{
//3.同步数据:直接调拨入库单
var TransferDirect_result = await this.SysnTransferDirect(TransferDirect_sourceBillNos, isTransaction);
if (!TransferDirect_result.IsSuccess)
return Result.ReFailure(TransferDirect_result.Message, TransferDirect_result.Status);
}
if (Transferin_sourceBillNos.Count() > 0)
{
//4.同步数据:分步式入库单
var Transferin_result = await this.SysnTransferin(Transferin_sourceBillNos, isTransaction);
if (!Transferin_result.IsSuccess)
return Result.ReFailure(Transferin_result.Message, Transferin_result.Status);
}
if (AssembledApp_sourceBillNos.Count() > 0)
{
//5.同步数据:组装拆卸单
var AssembledApp_result = await this.SysnAssembledApp(AssembledApp_sourceBillNos, isTransaction);
if (!AssembledApp_result.IsSuccess)
return Result.ReFailure(AssembledApp_result.Message, AssembledApp_result.Status);
}
}
return Result.ReSuccess(); return Result.ReSuccess();
} }
/// <summary> /// <summary>
/// ERP数据同步到WMS数据库 /// ERP数据同步到WMS数据库-旧代码
/// </summary> /// </summary>
/// <param name="erp_list"></param> /// <param name="erp_list"></param>
/// <param name="isTransaction"></param> /// <param name="isTransaction"></param>
@@ -273,12 +334,12 @@ namespace WMS.Web.Domain.Services
{ {
data_list.ForEach(x => data_list.ForEach(x =>
{ {
var erp_list_dets= erp_list.Where(t => t.BillNo == x.SourceBillNo).ToList(); var erp_list_dets = erp_list.Where(t => t.BillNo == x.SourceBillNo).ToList();
if (erp_list_dets != null && erp_list_dets.Count != 0 && erp_list_dets.Count > x.Details.Count) if (erp_list_dets != null && erp_list_dets.Count != 0 && erp_list_dets.Count > x.Details.Count)
{ {
var xd_detids=x.Details.Select(xd => xd.ErpDetailId).ToList(); var xd_detids = x.Details.Select(xd => xd.ErpDetailId).ToList();
var task_no_materials= erp_list_dets.Where(ed => !xd_detids.Contains(ed.ErpDetailId)).ToList(); var task_no_materials = erp_list_dets.Where(ed => !xd_detids.Contains(ed.ErpDetailId)).ToList();
var Add_task_no_materials= _mapper.Map<List<InStockTaskDetails>>(task_no_materials); var Add_task_no_materials = _mapper.Map<List<InStockTaskDetails>>(task_no_materials);
x.Details.AddRange(Add_task_no_materials); x.Details.AddRange(Add_task_no_materials);
} }
}); });
@@ -292,13 +353,13 @@ namespace WMS.Web.Domain.Services
continue; continue;
//2.1.1对比erp的物料信息 //2.1.1对比erp的物料信息
var erp_data = erp_list.Where(x =>x.ErpDetailId==item.ErpDetailId).FirstOrDefault(); var erp_data = erp_list.Where(x => x.ErpDetailId == item.ErpDetailId).FirstOrDefault();
if (erp_data != null) if (erp_data != null)
{ {
//2.1.2修改数量 //2.1.2修改数量
if (erp_data.Qty > item.AccruedQty && (erp_data.Qty>item.RealityQty && item.RealityQty!=0)) if (erp_data.Qty > item.AccruedQty && (erp_data.Qty > item.RealityQty && item.RealityQty != 0))
data.Status = InstockStatus.Part; data.Status = InstockStatus.Part;
else if(erp_data.Qty<=item.AccruedQty && erp_data.Qty<=item.RealityQty) else if (erp_data.Qty <= item.AccruedQty && erp_data.Qty <= item.RealityQty)
data.Status = InstockStatus.Already; data.Status = InstockStatus.Already;
item.Remark = erp_data.Remark; item.Remark = erp_data.Remark;
item.AccruedQty = erp_data.Qty; item.AccruedQty = erp_data.Qty;
@@ -324,7 +385,7 @@ namespace WMS.Web.Domain.Services
x.AccruedQty = 0; x.AccruedQty = 0;
} }
} }
else if(erp_data==null) else if (erp_data == null)
{ {
x.AccruedQty = 0; x.AccruedQty = 0;
} }
@@ -336,9 +397,9 @@ namespace WMS.Web.Domain.Services
if (local_data_order != null) if (local_data_order != null)
{ {
var local_data = data_list_details_new.Where(t => t.ErpDetailId == item.ErpDetailId).ToList(); var local_data = data_list_details_new.Where(t => t.ErpDetailId == item.ErpDetailId).ToList();
if (local_data != null && local_data.Count!=0) if (local_data != null && local_data.Count != 0)
{ {
var isHaveMater_detail= local_data.Where(t => t.MaterialId == item.MaterialId).Any(); var isHaveMater_detail = local_data.Where(t => t.MaterialId == item.MaterialId).Any();
if (!isHaveMater_detail) if (!isHaveMater_detail)
{ {
//明细的物料改变了:新的物料重新添加一条明细 //明细的物料改变了:新的物料重新添加一条明细
@@ -364,7 +425,7 @@ namespace WMS.Web.Domain.Services
//要剔除的来源单据编号:去重 //要剔除的来源单据编号:去重
erp_remove_billNo= erp_remove_billNo.GroupBy(x => x).Select(x => x.Key).ToList(); erp_remove_billNo = erp_remove_billNo.GroupBy(x => x).Select(x => x.Key).ToList();
//2.3剔除:已修改的单据 //2.3剔除:已修改的单据
foreach (var item in erp_remove_billNo) foreach (var item in erp_remove_billNo)
{ {
@@ -386,7 +447,7 @@ namespace WMS.Web.Domain.Services
foreach (var item in current_billNos) foreach (var item in current_billNos)
{ {
var current_order= erp_list.Where(x => x.BillNo == item).FirstOrDefault(); var current_order = erp_list.Where(x => x.BillNo == item).FirstOrDefault();
var dto = new InStockTask(); var dto = new InStockTask();
dto.Create((InstockType)current_order.Type, current_order.BillNo, current_order.CreateTime); dto.Create((InstockType)current_order.Type, current_order.BillNo, current_order.CreateTime);
@@ -405,6 +466,118 @@ namespace WMS.Web.Domain.Services
return Result.ReSuccess(); return Result.ReSuccess();
} }
/// <summary>
/// ERP数据同步到WMS数据库-新代码
/// </summary>
/// <param name="erp_list"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<Result> SysnDataNew(List<ErpInStockResultDto> erp_list, bool isTransaction)
{
//1.通过单据编号找到wms系统现有的任务单并修改
var erp_removeList = new List<ErpInStockResultDto>();
var SourceBillNo_list = erp_list.GroupBy(x => x.BillNo).Select(x => x.Key).ToList();
var data_list = await _inStockTaskRepositories.GetListBy(SourceBillNo_list);
//要新增的明细
var erp_addDetailsList = new List<ErpInStockResultDto>();
//2.遍历已有的任务单
if (data_list.Count != 0)
{
//2.1遍历任务单明细:改变已有的值和要添加的明细
data_list.SelectMany(s => s.Details).ToList().ForEach(det =>
{
//2.1去当前erp的明细
var erp_data = erp_list.Where(x => x.ErpDetailId == det.ErpDetailId).FirstOrDefault();
if (erp_data != null)
{
//2.1.1当物料相同,仓库不同或者物料不同,就新增一条明细
//2.1.2物料相同的,就改变数值
if (det.MaterialId != erp_data.MaterialId || (det.MaterialId == erp_data.MaterialId && det.StockCode != erp_data.StockCode))
{
//老物料应收数量修改为0
det.AccruedQty = 0;
//当物料相同,仓库不同或者物料不同,就新增一条明细
erp_addDetailsList.Add(erp_data);
}
else if (det.MaterialId == erp_data.MaterialId)
{
//物料相同的,就改变数值
det.Remark = erp_data.Remark;
det.AccruedQty = erp_data.Qty;
det.FactoryPrice = erp_data.FactoryPrice;
det.DeliveredQty = erp_data.DeliveredQty;
}
//操作完后剔除
erp_removeList.Add(erp_data);
}
});
//2.2遍历任务单:添加新的明细
data_list.ForEach(order =>
{
//2.1.任务单添加明细
var addErpDetails= erp_addDetailsList.Where(x => x.BillNo == order.SourceBillNo).ToList();
if (addErpDetails.Count != 0)
{
var addDetails = _mapper.Map<List<InStockTaskDetails>>(addErpDetails);
order.Details.AddRange(addDetails);
}
});
//2.3遍历任务单:改变任务单的状态
data_list.ForEach(order =>
{
//当应入库数量大于实际入库数量:状态就部分入库
//当应入库数量小于等于实际入库数量:状态就已入库
var AccruedQtyTotal = order.Details.Sum(x => x.AccruedQty);
var RealityQtyTotal = order.Details.Sum(x => x.RealityQty);
if(AccruedQtyTotal> RealityQtyTotal)
order.Status = InstockStatus.Part;
else if(AccruedQtyTotal<= RealityQtyTotal)
order.Status = InstockStatus.Already;
});
}
//2.3.提交任务单的修改
var isSuccess = await _inStockTaskRepositories.UpdateRange(data_list, isTransaction);
if (!isSuccess)
return Result.ReFailure(ResultCodes.DateWriteError);
//2.4剔除:已修改的单据
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 current_billNos = erp_list.GroupBy(x => x.BillNo).Select(x => x.Key).ToList();
foreach (var item in current_billNos)
{
var current_order = erp_list.Where(x => x.BillNo == item).FirstOrDefault();
var dto = new InStockTask();
dto.Create((InstockType)current_order.Type, current_order.BillNo, current_order.CreateTime);
//找到当前对应来源单据编号的集合数据
var current_erp_details = erp_list.Where(x => x.BillNo == item).ToList();
//给到dto的实体明细中
dto.Details = _mapper.Map<List<InStockTaskDetails>>(current_erp_details);
add_entitys.Add(dto);
}
//3.1提交新增
isSuccess = await _inStockTaskRepositories.AddRange(add_entitys, isTransaction);
if (!isSuccess)
return Result.ReFailure(ResultCodes.DateWriteError);
}
return Result.ReSuccess();
}
/// <summary> /// <summary>
/// 作废 /// 作废
/// </summary> /// </summary>
@@ -432,9 +605,9 @@ namespace WMS.Web.Domain.Services
/// <param name="totalCount"></param> /// <param name="totalCount"></param>
/// <param name="updateCount"></param> /// <param name="updateCount"></param>
/// <param name="addCount"></param> /// <param name="addCount"></param>
public void LogInfomation(InstockType type, int totalCount,int updateCount,int addCount) public void LogInfomation(InstockType type, int totalCount, int updateCount, int addCount)
{ {
_logger.LogInformation($"《{type.GetRemark()}总条数:" + totalCount+",修改条数:"+updateCount+",新增条数:"+addCount+"》"); _logger.LogInformation($"《{type.GetRemark()}总条数:" + totalCount + ",修改条数:" + updateCount + ",新增条数:" + addCount + "》");
} }
} }
} }