This commit is contained in:
tongfei
2024-03-22 16:54:27 +08:00
parent 17378dafb5
commit ae135dff4e
4 changed files with 90 additions and 91 deletions

View File

@@ -179,7 +179,7 @@ namespace WMS.Web.Domain.Entitys
/// <param name="syncStatus"></param>
public void SyncFail(string remark, int erpDetailId, int operateId, SyncStatus syncStatus)
{
var erpd = this.ErpDetails.Where(w=>w.ErpDetailId==erpDetailId).ToList();
var erpd = this.ErpDetails.Where(w => w.ErpDetailId == erpDetailId).ToList();
erpd.ForEach(det =>
{
det.SuccessSync = syncStatus;

View File

@@ -79,7 +79,7 @@ namespace WMS.Web.Domain.Services
/// <returns></returns>
public Task<Result> Sync(OperateRequest dto, LoginInDto loginInfo, bool isRepeatSync = true)
{
var list = _inStockRepositories.GetList(dto.Ids).GetAwaiter().GetResult();
var list = _inStockRepositories.GetList(dto.Ids).GetAwaiter().GetResult();
var isSuccess = true;
if (isRepeatSync)
{
@@ -149,7 +149,7 @@ namespace WMS.Web.Domain.Services
{
OperateRequest oRequest = new OperateRequest();
oRequest.Ids.Add(entity.Id);
await Sync(oRequest, loginInfo,false);
await Sync(oRequest, loginInfo, false);
}
return Result.ReSuccess();
}
@@ -162,7 +162,7 @@ namespace WMS.Web.Domain.Services
/// <returns></returns>
public async Task<Result> ShelfNoPurchase(NoPurchaseShelfRequest dto, LoginInDto loginInDto)
{
_logger.LogInformation($"非采购入库:{JsonConvert.SerializeObject(dto)} 操作人:{loginInDto.UserInfo.StaffId+loginInDto.UserInfo.Nickname}");
_logger.LogInformation($"非采购入库:{JsonConvert.SerializeObject(dto)} 操作人:{loginInDto.UserInfo.StaffId + loginInDto.UserInfo.Nickname}");
IDbContextTransaction _transaction = _basicsRepositories.GetTransaction();
bool isRollback = false;
bool isTransaction = false;
@@ -236,7 +236,7 @@ namespace WMS.Web.Domain.Services
box_task_detail.ErpDetailId = item.ErpDetailId;
box_task_detail.BoxMaterialQty = item.ReceiveQty;
box_task_detail.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, item.MaterialNumber);
box_task_detail.MaterialNumber = item.MaterialNumber;
box_task_detail.MaterialNumber = item.MaterialNumber;
box_task_detail.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, item.MaterialNumber);
result.Details.Add(box_task_detail);
}
@@ -272,7 +272,7 @@ namespace WMS.Web.Domain.Services
var taskIds = dto.Details.GroupBy(x => x.TaskId).Select(x => x.Key).ToList();
var tasks = await _inStockTaskRepositories.GetList(taskIds);
if (tasks == null || tasks.Count==0)
if (tasks == null || tasks.Count == 0)
return Result<InStock>.ReFailure(ResultCodes.SourceBillNoDateError);
// 组织集合
@@ -361,7 +361,7 @@ namespace WMS.Web.Domain.Services
//保存成功后:序列号跟踪流程添加
var serialNumber_result = await _serialNumberService.InStock(entity, loginInfo, isTransaction);
if (!serialNumber_result.IsSuccess)
return Result<InStock >.ReFailure(serialNumber_result);
return Result<InStock>.ReFailure(serialNumber_result);
//箱库存变动
var boxInventoryResult = await _boxInventoryService.GenerateInStockBox(entity, isTransaction);
@@ -384,7 +384,7 @@ namespace WMS.Web.Domain.Services
_logger.LogInformation($"非采购上架-保存:{JsonConvert.SerializeObject(dto)} 操作人:{loginInfo.UserInfo.StaffId}");
//非采购入库的时候:不能扫同样的箱,按箱入库时候
if (dto.Boxs != null && dto.Boxs.Count != 0 && dto.ShelfMethod==(int)ShelfMethod.Box)
if (dto.Boxs != null && dto.Boxs.Count != 0 && dto.ShelfMethod == (int)ShelfMethod.Box)
{
if (dto.Boxs.Select(x => x.BoxId).Distinct().Count() != dto.Boxs.Select(x => x.BoxId).Count())
return Result<InStock>.ReFailure(ResultCodes.BoxOutStockTaskBoxError);
@@ -402,7 +402,7 @@ namespace WMS.Web.Domain.Services
//1.1.2判断上架数量不能超过应入库数量
var dtoDetails = dto.Boxs.SelectMany(x => x.Details).ToList();
var dtoTotalDetails = dtoDetails.GroupBy(x => new { x.ErpDetailId,x.MaterialNumber }).Select(x => new { ErpDetailId = x.Key.ErpDetailId, MaterialNumber = x.Key.MaterialNumber, Qty = x.Sum(t => t.Qty) }).ToList();
var dtoTotalDetails = dtoDetails.GroupBy(x => new { x.ErpDetailId, x.MaterialNumber }).Select(x => new { ErpDetailId = x.Key.ErpDetailId, MaterialNumber = x.Key.MaterialNumber, Qty = x.Sum(t => t.Qty) }).ToList();
foreach (var item in task.Details)
{
var current_det = dtoTotalDetails.Where(x => x.ErpDetailId == item.ErpDetailId && x.MaterialNumber == item.MaterialNumber).FirstOrDefault();
@@ -617,7 +617,7 @@ namespace WMS.Web.Domain.Services
//1.1筛选出对应仓库的明细
var task_details = task.Details.Where(x => x.StockCode == dto.StockCode && x.AccruedQty>0).ToList();
var task_details = task.Details.Where(x => x.StockCode == dto.StockCode && x.AccruedQty > 0).ToList();
//2.找到箱对应的物料信息:多个箱
var boxs = await _boxRepositories.GetEntityListByNos(dto.BoxBillNos);
@@ -627,7 +627,7 @@ namespace WMS.Web.Domain.Services
//3.判断箱里面对应的物料是否存在;不存在就报错
foreach (var item in boxs)
{
if(item.Details==null || item.Details.Count==0)
if (item.Details == null || item.Details.Count == 0)
return Result<ContrastMaterialsResponse>.ReFailure(ResultCodes.BoxMateriaNoData);
}
@@ -707,50 +707,40 @@ namespace WMS.Web.Domain.Services
var sc_erpService = scope.ServiceProvider.GetRequiredService<IErpService>();
//找到金蝶最新的采购订单数据
var erp_purchase_result =await sc_erpService.BillQueryForPurchaseInStock(entity.ErpDetails.GroupBy(x=>x.SourceBillNo).Select(x=>x.Key).ToList());
var erp_purchase_result = await sc_erpService.BillQueryForPurchaseInStock(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();
var isHave = erp_purchase_result.Data.Where(x => x.ErpDetailId == item.ErpDetailId && x.MaterialNumber == item.MaterialNumber).Any();
if (isHave)
erpDetails.Add(item);
}
try
foreach (var s in erpDetails)
{
foreach (var s in erpDetails)
var erp_details = entity.ErpDetails
.Where(w => w.SourceBillNo.Equals(s)).Select(s => s.ErpDetailId).ToList();
var erpDto = new ErpPushDto()
{
var erp_details = entity.ErpDetails
.Where(w => w.SourceBillNo.Equals(s)).Select(s => s.ErpDetailId).ToList();
var erpDto = new ErpPushDto()
{
RuleId = "PUR_PurchaseOrder-STK_InStock",//转换规则内码 采购订单下推采购入库单
FormId = FormIdParam.PUR_PurchaseOrder.ToString(),
TargetFormId = FormIdParam.STK_InStock.ToString(),
DetailsId = s.ErpDetailId.ToString(),
IsDraftWhenSaveFail = true
};
//下推金蝶
var res = await this.Push(erpDto, s, entity.BillNo, sc_erpService);
if (res.result.IsSuccess)
entity.SyncSuccess(s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo);
else
entity.SyncFail(res.result.Message, s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus);
}
//最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱
var isSuccess = await sc_InStockRepositories.Update(entity, true);
if (entity == null) return Result.ReFailure(ResultCodes.DateWriteError);
return Result.ReSuccess();
RuleId = "PUR_PurchaseOrder-STK_InStock",//转换规则内码 采购订单下推采购入库单
FormId = FormIdParam.PUR_PurchaseOrder.ToString(),
TargetFormId = FormIdParam.STK_InStock.ToString(),
DetailsId = s.ErpDetailId.ToString(),
IsDraftWhenSaveFail = true
};
//下推金蝶
var res = await this.Push(erpDto, s, entity.BillNo, sc_erpService);
if (res.result.IsSuccess)
entity.SyncSuccess(s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo);
else
entity.SyncFail(res.result.Message, s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus);
}
catch (Exception ex)
{
_logger.LogInformation($"采购下推-同步:错误:{JsonConvert.SerializeObject(entity)} 操作人:{loginInfo.UserInfo.StaffId}");
return Result.ReFailure(ResultCodes.ErpSynsError);
}
//最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱
var isSuccess = await sc_InStockRepositories.Update(entity, true);
if (entity == null) return Result.ReFailure(ResultCodes.DateWriteError);
return Result.ReSuccess();
}
/// <summary>
@@ -762,45 +752,54 @@ namespace WMS.Web.Domain.Services
/// <returns></returns>
private async Task<(Result result, SyncStatus syncStatus, string erpBillNo)> Push(ErpPushDto dto, InStockErpDetails erpDetail, string billNo, IErpService sc_erpService)
{
try
{
//下推动作
var res = await sc_erpService.Push(dto);
if (!res.IsSuccess)
{
_logger.LogInformation($"入库单->下推失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{res.Message}");
return (Result.ReFailure(res.Message, res.Status), SyncStatus.Fail, "");
}
string id = res.Data;
var resPurchaseInStock = await sc_erpService.BillQueryForPurchaseInStock(id);
var purchaseInStock = resPurchaseInStock.Data;
purchaseInStock.Details[0].Qty = erpDetail.Qty;
string formId = dto.TargetFormId.ToString();
_logger.LogInformation($"入库单->开始同步金蝶 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 数据: {JsonConvert.SerializeObject(dto)}");
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, id);
}
//提交
_logger.LogInformation($"入库单->保存成功 开始提交 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}");
ErpOperateDto o_dto = new ErpOperateDto(formId, res_s.Data);//res_s.Data
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());
}
_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, "");
}
//下推动作
var res = await sc_erpService.Push(dto);
if (!res.IsSuccess)
{
_logger.LogInformation($"入库单->下推失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{res.Message}");
return (Result.ReFailure(res.Message, res.Status), SyncStatus.Fail, "");
}
string id = res.Data;
var resPurchaseInStock = await sc_erpService.BillQueryForPurchaseInStock(id);
var purchaseInStock = resPurchaseInStock.Data;
purchaseInStock.Details[0].Qty = erpDetail.Qty;
string formId = dto.TargetFormId.ToString();
_logger.LogInformation($"入库单->开始同步金蝶 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 数据: {JsonConvert.SerializeObject(dto)}");
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, id);
}
//提交
_logger.LogInformation($"入库单->保存成功 开始提交 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}");
ErpOperateDto o_dto = new ErpOperateDto(formId, res_s.Data);//res_s.Data
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());
}
_logger.LogInformation($"入库单->同步金蝶成功->单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}");
return (Result.ReSuccess(), SyncStatus.Success, o_dto.Numbers.First());
}

View File

@@ -173,8 +173,8 @@ namespace WMS.Web.Domain.Services.Public
loginInfo.TokenInfo = token;
//var ops_login_time = token.Expired.AddDays(1) - DateTime.Now;//用于正式
_redisClientService.SetStringKey<LoginInDto>($"wms_login_{token.Token}", loginInfo, token.Expired.TimeOfDay);
var ops_login_time = token.Expired - DateTime.Now;//用于正式
_redisClientService.SetStringKey<LoginInDto>($"wms_login_{token.Token}", loginInfo, ops_login_time);
_logger.LogInformation($"登录信息:用户人员信息->{staffName}{r.UserInfo.StaffId}),公司名称->{r.UserInfo.CompanyName}"+",过期时间:"+token.Expired.ToString("yyyy-MM-dd HH:mm:ss"));

View File

@@ -34,6 +34,6 @@ namespace WMS.Web.Domain.Values
/// 同步中
/// </summary>
[EnumRemark("同步中")]
SyncIng = 4
SyncIng = 4,
}
}