优化接口

This commit is contained in:
tongfei
2024-04-24 10:27:56 +08:00
parent 7f110d3dfd
commit f2e2ae8aa0
10 changed files with 350 additions and 21 deletions

View File

@@ -416,5 +416,13 @@ namespace WMS.Web.Api.Controllers
Console.WriteLine("redis1:" + tt2); Console.WriteLine("redis1:" + tt2);
return Result<bool>.ReSuccess(tt2); return Result<bool>.ReSuccess(tt2);
} }
[HttpGet]
[Route("lst3")]
public async Task<bool> lst3()
{
var data=await _erpService.BillQueryForPurchaseInStockBy("1541693");
return true;
}
} }
} }

View File

@@ -1076,6 +1076,41 @@
批号 批号
</summary> </summary>
</member> </member>
<member name="P:WMS.Web.Core.Dto.Erp.ErpPurchaseInStockDetailsDto.OrderId">
<summary>
入库订单ID
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Erp.ErpPurchaseInStockDetailsDto.DocumentStatus">
<summary>
状态
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Erp.ErpPurchaseInStockDetailsDto.OrderBillNo">
<summary>
入库单订单号
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Erp.ErpPurchaseInStockDetailsDto.PurchaseBillNo">
<summary>
采购订单号
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Erp.ErpPurchaseInStockDetailsDto.DetailId">
<summary>
入库单明细Id
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Erp.ErpPurchaseInStockDetailsDto.PurchaseDetailId">
<summary>
采购订单明细Id
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Erp.ErpPurchaseInStockDetailsDto.Qty">
<summary>
入库数量
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.Erp.ErpPushDto"> <member name="T:WMS.Web.Core.Dto.Erp.ErpPushDto">
<summary> <summary>
下推 下推

View File

@@ -3917,6 +3917,13 @@
<param name="id"></param> <param name="id"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WMS.Web.Domain.IService.Public.IErpService.BillQueryForPurchaseInStockBy(System.String)">
<summary>
</summary>
<param name="purchaseDetailId"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.IService.Public.IErpService.BillQueryForPurchaseInStock(System.Collections.Generic.List{System.String})"> <member name="M:WMS.Web.Domain.IService.Public.IErpService.BillQueryForPurchaseInStock(System.Collections.Generic.List{System.String})">
<summary> <summary>
erp:单据查询-采购入库单 erp:单据查询-采购入库单
@@ -5156,6 +5163,17 @@
<param name="billNo"></param> <param name="billNo"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WMS.Web.Domain.Services.InStockService.QueryFirst(WMS.Web.Core.Dto.Erp.ErpPurchaseInStockDetailsDto,System.String,System.String,WMS.Web.Domain.Entitys.InStockErpDetails,WMS.Web.Domain.IService.Public.IErpService)">
<summary>
金蝶已有的入库单进行不同处理:保存、提交、审核
</summary>
<param name="currentDet"></param>
<param name="formId"></param>
<param name="billNo"></param>
<param name="erpDetail"></param>
<param name="sc_erpService"></param>
<returns></returns>
</member>
<member name="T:WMS.Web.Domain.Services.InStockTaskBoxService"> <member name="T:WMS.Web.Domain.Services.InStockTaskBoxService">
<summary> <summary>
任务单的箱收货记录服务 任务单的箱收货记录服务
@@ -6421,6 +6439,36 @@
出库单 出库单
</summary> </summary>
</member> </member>
<member name="T:WMS.Web.Domain.Values.ErpOrderStatus">
<summary>
erp订单状态
</summary>
</member>
<member name="F:WMS.Web.Domain.Values.ErpOrderStatus.A">
<summary>
创建
</summary>
</member>
<member name="F:WMS.Web.Domain.Values.ErpOrderStatus.B">
<summary>
审核中
</summary>
</member>
<member name="F:WMS.Web.Domain.Values.ErpOrderStatus.C">
<summary>
已审核
</summary>
</member>
<member name="F:WMS.Web.Domain.Values.ErpOrderStatus.D">
<summary>
重新审核
</summary>
</member>
<member name="F:WMS.Web.Domain.Values.ErpOrderStatus.Z">
<summary>
暂存
</summary>
</member>
<member name="T:WMS.Web.Domain.Values.Erp.FormIdParam"> <member name="T:WMS.Web.Domain.Values.Erp.FormIdParam">
<summary> <summary>
业务对象表单Id对应erp的单据表的名称 业务对象表单Id对应erp的单据表的名称

View File

@@ -68,4 +68,40 @@ namespace WMS.Web.Core.Dto.Erp
[JsonProperty("FNumber")] [JsonProperty("FNumber")]
public string Number { get; set; } public string Number { get; set; }
} }
public class ErpPurchaseInStockDetailsDto
{
/// <summary>
/// 入库订单ID
/// </summary>
public string OrderId { get; set; }
/// <summary>
/// 状态
/// </summary>
public string DocumentStatus { get; set; }
/// <summary>
/// 入库单订单号
/// </summary>
public string OrderBillNo { get; set; }
/// <summary>
/// 采购订单号
/// </summary>
public string PurchaseBillNo { get; set; }
/// <summary>
/// 入库单明细Id
/// </summary>
public string DetailId { get; set; }
/// <summary>
/// 采购订单明细Id
/// </summary>
public string PurchaseDetailId { get; set; }
/// <summary>
/// 入库数量
/// </summary>
public decimal Qty { get; set; }
}
} }

View File

@@ -27,6 +27,13 @@ namespace WMS.Web.Domain.IService.Public
/// <returns></returns> /// <returns></returns>
Task<Result<ErpPurchaseInStockSaveDto>> BillQueryForPurchaseInStock(string id); Task<Result<ErpPurchaseInStockSaveDto>> BillQueryForPurchaseInStock(string id);
/// <summary>
///
/// </summary>
/// <param name="purchaseDetailId"></param>
/// <returns></returns>
Task<Result<List<ErpPurchaseInStockDetailsDto>>> BillQueryForPurchaseInStockBy(string purchaseDetailId);
/// <summary> /// <summary>
/// erp:单据查询-采购入库单 /// erp:单据查询-采购入库单
/// </summary> /// </summary>

View File

@@ -856,30 +856,50 @@ namespace WMS.Web.Domain.Services
if (erpDetails.Count != 0) if (erpDetails.Count != 0)
{ {
foreach (var s in erpDetails) foreach (var det in erpDetails)
{ {
var erp_details = entity.ErpDetails var erp_details = entity.ErpDetails
.Where(w => w.SourceBillNo.Equals(s)).Select(s => s.ErpDetailId).ToList(); .Where(w => w.SourceBillNo.Equals(det)).Select(t => t.ErpDetailId).ToList();
var erpDto = new ErpPushDto() var erpDto = new ErpPushDto()
{ {
RuleId = "PUR_PurchaseOrder-STK_InStock",//转换规则内码 采购订单下推采购入库单 RuleId = "PUR_PurchaseOrder-STK_InStock",//转换规则内码 采购订单下推采购入库单
FormId = FormIdParam.PUR_PurchaseOrder.ToString(), FormId = FormIdParam.PUR_PurchaseOrder.ToString(),
TargetFormId = FormIdParam.STK_InStock.ToString(), TargetFormId = FormIdParam.STK_InStock.ToString(),
DetailsId = s.ErpDetailId.ToString(), DetailsId = det.ErpDetailId.ToString(),
IsDraftWhenSaveFail = true//是否需要暂存 IsDraftWhenSaveFail = true//是否需要暂存
}; };
//下推金蝶
var res = await this.Push(erpDto, s, entity.BillNo, sc_erpService, sc_inStockRepositories); List<ErpPurchaseInStockDetailsDto> details = new List<ErpPurchaseInStockDetailsDto>();
var resPurchaseInStockDetails_result = await sc_erpService.BillQueryForPurchaseInStockBy(det.ErpDetailId.ToString());
if (resPurchaseInStockDetails_result.IsSuccess)
details = resPurchaseInStockDetails_result.Data;
//金蝶已有的单;进行金蝶不同操作处理:保存,提交,审核
var currentDet = details.Where(x => x.Qty == det.Qty).FirstOrDefault();
if (currentDet != null)
{
var res= await this.QueryFirst(currentDet, erpDto.FormId, entity.BillNo, det, sc_erpService);
if (res.result.IsSuccess) if (res.result.IsSuccess)
entity.SyncSuccess(s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo); entity.SyncSuccess(det.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo);
else else
entity.SyncFail(res.result.Message, s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus); entity.SyncFail(res.result.Message, det.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus);
}
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);
}
} }
} }
else else
{ {
erpDetails_tags.ForEach(x => { x.SuccessSync = SyncStatus.Fail; }); erpDetails_tags.ForEach(x => { x.SuccessSync = SyncStatus.Fail; });
entity.SyncFailAll("同步金蝶失败,金蝶存在已审核的采购入库单", loginInfo?.UserInfo?.StaffId ?? 0); entity.SyncFailAll("同步金蝶失败,该采购单已存在采购入库单", loginInfo?.UserInfo?.StaffId ?? 0);
} }
//最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱 //最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱
var isSuccess = await sc_InStockRepositories.Update(entity, true); var isSuccess = await sc_InStockRepositories.Update(entity, true);
@@ -975,6 +995,102 @@ namespace WMS.Web.Domain.Services
} }
/// <summary>
/// 金蝶已有的入库单进行不同处理:保存、提交、审核
/// </summary>
/// <param name="currentDet"></param>
/// <param name="formId"></param>
/// <param name="billNo"></param>
/// <param name="erpDetail"></param>
/// <param name="sc_erpService"></param>
/// <returns></returns>
private async Task<(Result result, SyncStatus syncStatus, string erpBillNo)> QueryFirst(ErpPurchaseInStockDetailsDto currentDet, string formId, string billNo, InStockErpDetails erpDetail, IErpService sc_erpService)
{
try
{
var purchaseInstock = new ErpPurchaseInStockSaveDto(currentDet.OrderId);
var det = new ErpPurchaseInStockDetailsSaveDto();
det.DetailId = currentDet.DetailId;
det.Qty = currentDet.Qty;
purchaseInstock.Details.Add(det);
ErpOperateDto o_dto = new ErpOperateDto(formId, currentDet.OrderBillNo);//res_s.Data
if (currentDet.DocumentStatus == ErpOrderStatus.Z.ToString())
{
//保存
_logger.LogInformation($"入库单->查询到已有暂存的入库单 开始保存 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 数据: {JsonConvert.SerializeObject(purchaseInstock)}");
var res_s = await sc_erpService.Save<ErpPurchaseInStockSaveDto>(purchaseInstock, formId);
if (!res_s.IsSuccess)
{
_logger.LogInformation($"入库单->保存失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{res_s.Message}");
return (Result.ReFailure(res_s.Message, res_s.Status), SyncStatus.SubmitFail, currentDet.OrderId);
}
//提交
_logger.LogInformation($"入库单->保存成功 开始提交 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}");
var resSubmit = await sc_erpService.Submit(o_dto, formId);
if (!resSubmit.IsSuccess)
{
_logger.LogInformation($"入库单->提交失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}");
return (resSubmit, SyncStatus.SubmitFail, o_dto.Numbers.First());
}
//审核
_logger.LogInformation($"入库单->提交成功 开始审核 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}");
resSubmit = await sc_erpService.Audit(o_dto, formId);
if (!resSubmit.IsSuccess)
{
_logger.LogInformation($"入库单->审核失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}");
return (resSubmit, SyncStatus.CheckFail, o_dto.Numbers.First());
}
}
else if (currentDet.DocumentStatus == ErpOrderStatus.A.ToString())
{
//提交
_logger.LogInformation($"入库单->查询到已有保存的入库单 开始提交 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}");
var resSubmit = await sc_erpService.Submit(o_dto, formId);
if (!resSubmit.IsSuccess)
{
_logger.LogInformation($"入库单->提交失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}");
return (resSubmit, SyncStatus.SubmitFail, o_dto.Numbers.First());
}
//审核
_logger.LogInformation($"入库单->提交成功 开始审核 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}");
resSubmit = await sc_erpService.Audit(o_dto, formId);
if (!resSubmit.IsSuccess)
{
_logger.LogInformation($"入库单->审核失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}");
return (resSubmit, SyncStatus.CheckFail, o_dto.Numbers.First());
}
}
else if (currentDet.DocumentStatus == ErpOrderStatus.B.ToString())
{
//审核
_logger.LogInformation($"入库单->查询到已有提交的入库单 开始审核 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}");
var resSubmit = await sc_erpService.Audit(o_dto, formId);
if (!resSubmit.IsSuccess)
{
_logger.LogInformation($"入库单->审核失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}");
return (resSubmit, SyncStatus.CheckFail, o_dto.Numbers.First());
}
}
else if (currentDet.DocumentStatus == ErpOrderStatus.C.ToString())
{
_logger.LogInformation($"入库单->存在已审核的ERP入库单 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:存在已审核的ERP入库单");
return (Result.ReFailure("存在已审核的ERP入库单", 2001), SyncStatus.CheckFail, o_dto.Numbers.First());
}
_logger.LogInformation($"入库单->同步金蝶成功->单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}");
return (Result.ReSuccess(), SyncStatus.Success, o_dto.Numbers.First());
}
catch (Exception ex)
{
_logger.LogInformation($"入库单-同步:错误:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{ex.Message}");
var result = Result.ReFailure(ex.Message, 50001);
return (result, SyncStatus.Fail, "");
}
}
} }
} }

View File

@@ -2510,6 +2510,52 @@ namespace WMS.Web.Domain.Services.Public
} }
} }
public async Task<Result<List<ErpPurchaseInStockDetailsDto>>> BillQueryForPurchaseInStockBy(string purchaseDetailId)
{
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.STK_InStock.ToString());
param.FieldKeys = "FID,FInStockEntry_FEntryID,FRealQty,FPOOrderNo,FBillNo,FDocumentStatus";
param.Limit = 10000;
param.FilterString = $"FPOORDERENTRYID={purchaseDetailId}";
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 materialNumber, string orgCode, string stockCode, int subStockId)> request) public async Task<ResultList<ErpInventoryDto>> BillQueryForInventory(List<(string materialNumber, string orgCode, string stockCode, int subStockId)> request)
{ {
try try

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace WMS.Web.Domain.Values
{
/// <summary>
/// erp订单状态
/// </summary>
public enum ErpOrderStatus
{
/// <summary>
/// 创建
/// </summary>
A,
/// <summary>
/// 审核中
/// </summary>
B,
/// <summary>
/// 已审核
/// </summary>
C,
/// <summary>
/// 重新审核
/// </summary>
D,
/// <summary>
/// 暂存
/// </summary>
Z
}
}

View File

@@ -139,21 +139,21 @@ namespace WMS.Web.Repositories
//1.获取物料集合和组织集合和供应商的集合 //1.获取物料集合和组织集合和供应商的集合
var materials = new List<ErpMaterialDto>(); var materials = new List<ErpMaterialDto>();
var materials_result = await _erpService.BillQueryForMaterial(); //var materials_result = await _erpService.BillQueryForMaterial();
if (materials_result.IsSuccess) //if (materials_result.IsSuccess)
materials = materials_result.Data.ToList(); // materials = materials_result.Data.ToList();
//组织集合 //组织集合
var orgs = new List<ErpOrgDto>(); var orgs = new List<ErpOrgDto>();
var orgs_result = await _erpService.BillQueryForOrg(); //var orgs_result = await _erpService.BillQueryForOrg();
if (orgs_result.IsSuccess) //if (orgs_result.IsSuccess)
orgs = orgs_result.Data.ToList(); // orgs = orgs_result.Data.ToList();
//供应商集合 //供应商集合
var suppliers = new List<ErpSupplierDto>(); var suppliers = new List<ErpSupplierDto>();
var suppliers_result = await _erpService.BillQueryForSupplier(); //var suppliers_result = await _erpService.BillQueryForSupplier();
if (suppliers_result.IsSuccess) //if (suppliers_result.IsSuccess)
suppliers = suppliers_result.Data.ToList(); // suppliers = suppliers_result.Data.ToList();
var entity = await _context.InStockTask.Include(x => x.Details).Where(x => x.Id == id).FirstOrDefaultAsync(); var entity = await _context.InStockTask.Include(x => x.Details).Where(x => x.Id == id).FirstOrDefaultAsync();
@@ -238,7 +238,7 @@ namespace WMS.Web.Repositories
if (current_box != null) if (current_box != null)
{ {
var current_boxDet = current_box.Details.Where(d => d.MaterialNumber == x.MaterialNumber).FirstOrDefault(); var current_boxDet = current_box.Details.Where(d => d.MaterialNumber == x.MaterialNumber).FirstOrDefault();
if (x.MethodForInt == (int)InventoryInOutMethod.Product && current_boxDet.Qty != 0) if (current_boxDet!=null && x.MethodForInt == (int)InventoryInOutMethod.Product && current_boxDet.Qty != 0)
x.Qty = current_boxDet.Qty; x.Qty = current_boxDet.Qty;
} }
}); });