同步
This commit is contained in:
@@ -5692,6 +5692,14 @@
|
|||||||
<param name="loginInfo"></param>
|
<param name="loginInfo"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:WMS.Web.Domain.Services.InStockService.ProduceInStock(WMS.Web.Domain.Entitys.InStock,WMS.Web.Core.Dto.Login.LoginInDto)">
|
||||||
|
<summary>
|
||||||
|
生产入库:同步金蝶
|
||||||
|
</summary>
|
||||||
|
<param name="entity"></param>
|
||||||
|
<param name="loginInfo"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:WMS.Web.Domain.Services.InStockService.Push(WMS.Web.Core.Dto.Erp.ErpPushDto,WMS.Web.Domain.Entitys.InStockErpDetails,System.String,WMS.Web.Domain.IService.Public.IErpService,WMS.Web.Domain.Infrastructure.IInStockRepositories)">
|
<member name="M:WMS.Web.Domain.Services.InStockService.Push(WMS.Web.Core.Dto.Erp.ErpPushDto,WMS.Web.Domain.Entitys.InStockErpDetails,System.String,WMS.Web.Domain.IService.Public.IErpService,WMS.Web.Domain.Infrastructure.IInStockRepositories)">
|
||||||
<summary>
|
<summary>
|
||||||
下推
|
下推
|
||||||
@@ -7378,7 +7386,7 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="F:WMS.Web.Domain.Values.Erp.FormIdParam.PRD_MORPT">
|
<member name="F:WMS.Web.Domain.Values.Erp.FormIdParam.PRD_MORPT">
|
||||||
<summary>
|
<summary>
|
||||||
生产入库单(来源于生产汇报单)
|
生产汇报单
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="F:WMS.Web.Domain.Values.Erp.FormIdParam.PRD_PickMtrl">
|
<member name="F:WMS.Web.Domain.Values.Erp.FormIdParam.PRD_PickMtrl">
|
||||||
@@ -7386,6 +7394,11 @@
|
|||||||
领料出库单(来源于普通领料出库单)
|
领料出库单(来源于普通领料出库单)
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="F:WMS.Web.Domain.Values.Erp.FormIdParam.PRD_INSTOCK">
|
||||||
|
<summary>
|
||||||
|
生产入库单(汇报)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:WMS.Web.Domain.Values.ExportStatus">
|
<member name="T:WMS.Web.Domain.Values.ExportStatus">
|
||||||
<summary>
|
<summary>
|
||||||
文件导出状态
|
文件导出状态
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ namespace WMS.Web.Domain.IService.Public
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<Result<List<ErpPurchaseInStockDetailsDto>>> BillQueryForPurchaseInStockBy(string purchaseDetailId, List<string> sourceBillNos);
|
Task<Result<List<ErpPurchaseInStockDetailsDto>>> BillQueryForPurchaseInStockBy(string purchaseDetailId, List<string> sourceBillNos);
|
||||||
|
|
||||||
|
Task<Result<List<ErpPurchaseInStockDetailsDto>>> BillQueryForProduceInStockBy(string purchaseDetailId, List<string> sourceBillNos);
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// erp:单据查询-采购入库单
|
/// erp:单据查询-采购入库单
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -103,11 +103,21 @@ namespace WMS.Web.Domain.Services
|
|||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
foreach (var entity in list)
|
foreach (var entity in list)
|
||||||
|
{
|
||||||
|
if (entity.Type.ToString() == "ProduceSotck")//走生产下推
|
||||||
|
{
|
||||||
|
var res = await this.ProduceInStock(entity, loginInfo);
|
||||||
|
if (!res.IsSuccess)
|
||||||
|
_logger.LogError($"入库单同步失败:{res.Message}");
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
var res = await this.PurchaseInStock(entity, loginInfo);
|
var res = await this.PurchaseInStock(entity, loginInfo);
|
||||||
if (!res.IsSuccess)
|
if (!res.IsSuccess)
|
||||||
_logger.LogError($"入库单同步失败:{res.Message}");
|
_logger.LogError($"入库单同步失败:{res.Message}");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return Task.FromResult(Result.ReSuccess());
|
return Task.FromResult(Result.ReSuccess());
|
||||||
}
|
}
|
||||||
@@ -887,6 +897,9 @@ namespace WMS.Web.Domain.Services
|
|||||||
return Result<ContrastMaterialsResponse>.ReSuccess(response);
|
return Result<ContrastMaterialsResponse>.ReSuccess(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 采购:同步金蝶
|
/// 采购:同步金蝶
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -975,6 +988,96 @@ namespace WMS.Web.Domain.Services
|
|||||||
return Result.ReSuccess();
|
return Result.ReSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生产入库:同步金蝶
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity"></param>
|
||||||
|
/// <param name="loginInfo"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task<Result> ProduceInStock(InStock entity, LoginInDto loginInfo)
|
||||||
|
{
|
||||||
|
_logger.LogInformation($"生产入库下推-同步:{JsonConvert.SerializeObject(entity)} 操作人:{loginInfo.UserInfo.StaffId}");
|
||||||
|
var scope = _serviceScopeFactory.CreateScope();
|
||||||
|
var sc_InStockRepositories = scope.ServiceProvider.GetRequiredService<IInStockRepositories>();
|
||||||
|
|
||||||
|
if (entity.Type != InstockType.ProduceSotck) return Result.ReSuccess();
|
||||||
|
if (entity.SuccessSync == SyncStatus.Success) return Result.ReSuccess();
|
||||||
|
var erpDetails_tags = entity.ErpDetails.Where(w => w.SuccessSync == SyncStatus.SyncIng).ToList();
|
||||||
|
|
||||||
|
//要下推的明细
|
||||||
|
var erpDetails = new List<InStockErpDetails>();
|
||||||
|
var sc_erpService = scope.ServiceProvider.GetRequiredService<IErpService>();
|
||||||
|
var sc_inStockRepositories = scope.ServiceProvider.GetRequiredService<IInStockRepositories>();
|
||||||
|
|
||||||
|
//找到金蝶最新的生产汇报单
|
||||||
|
var erp_purchase_result = await sc_erpService.BillQueryForProduceSotckin(entity.ErpDetails.GroupBy(x => x.SourceBillNo).Select(x => x.Key).ToList());
|
||||||
|
if (!erp_purchase_result.IsSuccess)
|
||||||
|
return erp_purchase_result;
|
||||||
|
//然后刷选出对应金蝶明细和物料和wms的任务单的明细和物料是一致的就同步下推
|
||||||
|
foreach (var item in erpDetails_tags)
|
||||||
|
{
|
||||||
|
var isHave = erp_purchase_result.Data.Where(x => x.ErpDetailId == item.ErpDetailId && x.MaterialNumber == item.MaterialNumber).Any();
|
||||||
|
if (isHave)
|
||||||
|
erpDetails.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
var sourceBillNos = entity.ErpDetails.GroupBy(x => x.SourceBillNo).Select(x => x.Key).ToList();
|
||||||
|
var erp_InStockErpDetails = await sc_inStockRepositories.GetErpDetails(sourceBillNos);
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var det in erpDetails)
|
||||||
|
{
|
||||||
|
var erpDto = new ErpPushDto()
|
||||||
|
{
|
||||||
|
// RuleId = "PUR_PurchaseOrder-STK_InStock",//转换规则内码 汇报单下推汇报入库单
|
||||||
|
RuleId = "PRD_MORPT2INSTOCK",//转换规则内码 汇报单下推汇报入库单
|
||||||
|
FormId = FormIdParam.PRD_MORPT.ToString(),
|
||||||
|
TargetFormId = FormIdParam.PRD_INSTOCK.ToString(),
|
||||||
|
DetailsId = det.ErpDetailId.ToString(),
|
||||||
|
IsDraftWhenSaveFail = true//是否需要暂存
|
||||||
|
};
|
||||||
|
|
||||||
|
var erp_InStockBillNos = erp_InStockErpDetails.Where(x => x.SourceBillNo == det.SourceBillNo).Select(x => x.ErpSyncBillNo).ToList();
|
||||||
|
List<ErpPurchaseInStockDetailsDto> details = new List<ErpPurchaseInStockDetailsDto>();
|
||||||
|
var resPurchaseInStockDetails_result = await sc_erpService.BillQueryForProduceInStockBy(det.ErpDetailId.ToString(), erp_InStockBillNos);
|
||||||
|
if (resPurchaseInStockDetails_result.IsSuccess)
|
||||||
|
details = resPurchaseInStockDetails_result.Data;
|
||||||
|
|
||||||
|
//金蝶已有的单;进行金蝶不同操作处理:保存,提交,审核
|
||||||
|
ErpPurchaseInStockDetailsDto currentDet = null;
|
||||||
|
if (det.ErpInStockDetailId.HasValue)
|
||||||
|
currentDet = details.Where(x => x.DetailId == det.ErpInStockDetailId.Value.ToString()).FirstOrDefault();
|
||||||
|
if (currentDet != null)
|
||||||
|
{
|
||||||
|
var res = await this.QueryFirst(currentDet, erpDto.TargetFormId, entity.BillNo, det, sc_erpService);
|
||||||
|
if (res.result.IsSuccess)
|
||||||
|
entity.SyncSuccess(det.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo);
|
||||||
|
else
|
||||||
|
entity.SyncFail(res.result.Message, det.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus);
|
||||||
|
//记录金蝶入库单明细ID
|
||||||
|
det.RecodErpInStockDetailId(res.instockDetailId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//下推金蝶
|
||||||
|
var res = await this.Push(erpDto, det, entity.BillNo, sc_erpService, sc_inStockRepositories);
|
||||||
|
if (res.result.IsSuccess)
|
||||||
|
entity.SyncSuccess(det.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo);
|
||||||
|
else
|
||||||
|
entity.SyncFail(res.result.Message, det.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus);
|
||||||
|
//记录金蝶入库单明细ID
|
||||||
|
det.RecodErpInStockDetailId(res.instockDetailId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
//最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱
|
||||||
|
var isSuccess = await sc_InStockRepositories.Update(entity, true);
|
||||||
|
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
|
||||||
|
return Result.ReSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 下推
|
/// 下推
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -2971,6 +2971,72 @@ namespace WMS.Web.Domain.Services.Public
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<Result<List<ErpPurchaseInStockDetailsDto>>> BillQueryForProduceInStockBy(string purchaseDetailId, List<string> sourceBillNos)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//1.先登录金蝶-拿到token
|
||||||
|
var token_result = await this.Init();
|
||||||
|
if (!token_result.IsSuccess)
|
||||||
|
return Result<List<ErpPurchaseInStockDetailsDto>>.ReFailure(token_result);
|
||||||
|
|
||||||
|
|
||||||
|
//3.获取金蝶采购订单:拼接参数和条件
|
||||||
|
var query = new ErpBillQueryDto(token_result.Data);
|
||||||
|
var param = new ErpBillQueryParamDto(FormIdParam.PRD_INSTOCK.ToString());
|
||||||
|
param.FieldKeys = "FID,FInStockEntry_FEntryID,FRealQty,FMoBillNo,FBillNo,FDocumentStatus";
|
||||||
|
param.Limit = 10000;
|
||||||
|
param.FilterString = $"FMoEntryId={purchaseDetailId}";
|
||||||
|
|
||||||
|
//根据原订单号查询
|
||||||
|
if (sourceBillNos != null && sourceBillNos.Count() > 0)
|
||||||
|
{
|
||||||
|
param.FilterString = param.FilterString + " and FBillNo not in (";
|
||||||
|
|
||||||
|
var bill_str = "";
|
||||||
|
int bill_index = 0;
|
||||||
|
//var srt_b = JsonConvert.SerializeObject(sourceBillNos);
|
||||||
|
foreach (var bill in sourceBillNos)
|
||||||
|
{
|
||||||
|
bill_index++;
|
||||||
|
if (bill_index == sourceBillNos.Count)
|
||||||
|
bill_str = bill_str + $"'{bill}'";
|
||||||
|
else
|
||||||
|
bill_str = bill_str + $"'{bill}'" + ",";
|
||||||
|
}
|
||||||
|
param.FilterString = param.FilterString + bill_str + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
query.Data = JsonConvert.SerializeObject(param);
|
||||||
|
var json = JsonConvert.SerializeObject(query);
|
||||||
|
|
||||||
|
//4.请求查询接口
|
||||||
|
var result_json = await _client.ExecuteBillQueryAsync(json);
|
||||||
|
var result = JsonConvert.DeserializeObject<List<List<string>>>(result_json);
|
||||||
|
|
||||||
|
//5.返回数据的组装
|
||||||
|
var erp_list = new List<ErpPurchaseInStockDetailsDto>();
|
||||||
|
foreach (var item in result)
|
||||||
|
{
|
||||||
|
var lis = new ErpPurchaseInStockDetailsDto();
|
||||||
|
lis.OrderId = item[0];
|
||||||
|
lis.DetailId = item[1];
|
||||||
|
lis.Qty = Convert.ToDecimal(item[2]);
|
||||||
|
lis.PurchaseBillNo = item[3];
|
||||||
|
lis.OrderBillNo = item[4];
|
||||||
|
lis.DocumentStatus = item[5];
|
||||||
|
lis.PurchaseDetailId = purchaseDetailId;
|
||||||
|
erp_list.Add(lis);
|
||||||
|
}
|
||||||
|
return Result<List<ErpPurchaseInStockDetailsDto>>.ReSuccess(erp_list);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return Result<List<ErpPurchaseInStockDetailsDto>>.ReFailure(ResultCodes.Erp_BillQuery_Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<ResultList<ErpInventoryDto>> BillQueryForInventory(List<(string orgCode, string stockCode)> request)
|
public async Task<ResultList<ErpInventoryDto>> BillQueryForInventory(List<(string orgCode, string stockCode)> request)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ namespace WMS.Web.Domain.Values.Erp
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
STK_Inventory = 18,
|
STK_Inventory = 18,
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 生产入库单(来源于生产汇报单)
|
/// 生产汇报单
|
||||||
/// </summary>
|
/// </summary>
|
||||||
PRD_MORPT = 19,
|
PRD_MORPT = 19,
|
||||||
|
|
||||||
@@ -90,6 +90,10 @@ namespace WMS.Web.Domain.Values.Erp
|
|||||||
/// 领料出库单(来源于普通领料出库单)
|
/// 领料出库单(来源于普通领料出库单)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
PRD_PickMtrl = 20,
|
PRD_PickMtrl = 20,
|
||||||
|
/// <summary>
|
||||||
|
/// 生产入库单(汇报)
|
||||||
|
/// </summary>
|
||||||
|
PRD_INSTOCK=21,
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -408,7 +408,7 @@ namespace WMS.Web.Repositories
|
|||||||
Qty = s.detail.Qty,
|
Qty = s.detail.Qty,
|
||||||
Creator = _singleDataService.GetSingleData(SingleAction.Staffs, companyId, s.order.CreatorId),
|
Creator = _singleDataService.GetSingleData(SingleAction.Staffs, companyId, s.order.CreatorId),
|
||||||
CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
|
CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
|
||||||
SuccessSync = (s.order.Type != InstockType.Purchase ? "--" : (s.order.SuccessSync == SyncStatus.Success ? "成功" : (s.order.SuccessSync == SyncStatus.SyncIng ? "同步中" : "失败"))),
|
SuccessSync = ((s.order.Type != InstockType.Purchase && s.order.Type != InstockType.ProduceSotck) ? "--" : (s.order.SuccessSync == SyncStatus.Success ? "成功" : (s.order.SuccessSync == SyncStatus.SyncIng ? "同步中" : "失败"))),
|
||||||
SuccessSyncStatus= (int)s.order.SuccessSync,
|
SuccessSyncStatus= (int)s.order.SuccessSync,
|
||||||
Remark = s.order.Remark
|
Remark = s.order.Remark
|
||||||
}).OrderByDescending(x => x.Id).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync();
|
}).OrderByDescending(x => x.Id).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync();
|
||||||
|
|||||||
Reference in New Issue
Block a user