diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 2068eb1a..73fdfcc5 100644 Binary files a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 and b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 differ diff --git a/src/WMS.Web.Api/Controllers/InStockController.cs b/src/WMS.Web.Api/Controllers/InStockController.cs index a6ab6873..00728770 100644 --- a/src/WMS.Web.Api/Controllers/InStockController.cs +++ b/src/WMS.Web.Api/Controllers/InStockController.cs @@ -165,5 +165,21 @@ namespace WMS.Web.Api.Controllers return await _inStockService.Sync(dto, loginInfo); } + + /// + /// 标记同步成功 + /// + /// + /// + [HttpPost] + [Route("Sync")] + public async Task SyncSuccess([FromBody] List dto) + { + var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + if (loginInfo == null || loginInfo.UserInfo == null) + return Result.ReFailure(ResultCodes.Token_Invalid_Error); + + return await _inStockService.SyncSuccess(dto, loginInfo); + } } } diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 9b7a6940..44b32b1b 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -209,6 +209,13 @@ + + + 标记同步成功 + + + + 入库任务单-接口 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index ab41b3c9..a5153e18 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -2903,6 +2903,31 @@ 保存入库单-请求对象 + + + 入库单标记同步金蝶成功 + + + + + 单据ID + + + + + 来源单号 + + + + + 物料编码 + + + + + 金蝶入库单号 + + 入库单查询请求对象 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 5a0243a8..eec3c560 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -823,6 +823,15 @@ 重传 + + + 同步成功 + + + + + + wms入库单明细 @@ -3658,6 +3667,14 @@ + + + 标记同步成功 + + + + + 收货 @@ -5412,6 +5429,15 @@ + + + 标记同步成功 + + + + + + 任务单的箱收货记录服务 diff --git a/src/WMS.Web.Core/Dto/InStock/SyncSuccessRequest.cs b/src/WMS.Web.Core/Dto/InStock/SyncSuccessRequest.cs new file mode 100644 index 00000000..1fda7c3b --- /dev/null +++ b/src/WMS.Web.Core/Dto/InStock/SyncSuccessRequest.cs @@ -0,0 +1,30 @@ +using Npoi.Mapper.Attributes; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.InStock +{ + /// + /// 入库单标记同步金蝶成功 + /// + public class SyncSuccessRequest + { + /// + /// 单据ID + /// + public int Id { get; set; } + /// + /// 来源单号 + /// + public string SourceBillNo { get; set; } + /// + /// 物料编码 + /// + public string MaterialNumber { get; set; } + /// + /// 金蝶入库单号 + /// + public string ErpBillNo { get; set; } + } +} diff --git a/src/WMS.Web.Domain/Entitys/InStock.cs b/src/WMS.Web.Domain/Entitys/InStock.cs index 29b7c39a..450e0e8d 100644 --- a/src/WMS.Web.Domain/Entitys/InStock.cs +++ b/src/WMS.Web.Domain/Entitys/InStock.cs @@ -4,6 +4,7 @@ using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using WMS.Web.Core; +using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Values; namespace WMS.Web.Domain.Entitys @@ -20,11 +21,11 @@ namespace WMS.Web.Domain.Entitys /// ID /// public override int Id { get; set; } - + /// /// 单据编号 /// - public string BillNo { get; set; } + public string BillNo { get; set; } /// /// 入库类型 /// @@ -98,7 +99,7 @@ namespace WMS.Web.Domain.Entitys this.CreateTime = DateTime.Now; if (this.Type == InstockType.Purchase) { - this.SuccessSync = SyncStatus.SyncIng; + this.SuccessSync = SyncStatus.SyncIng; this.ErpDetails.ForEach(f => f.SuccessSync = SyncStatus.SyncIng); } else//非采购订单,这里就没有记录erpdetails的数据了 @@ -151,8 +152,8 @@ namespace WMS.Web.Domain.Entitys /// public void SyncSuccess(int erpDetailId, int operateId, string erpBillNo) { - var erpd = this.ErpDetails.Where(s=>s.ErpDetailId==erpDetailId).ToList(); - erpd.ForEach(det => + var erpd = this.ErpDetails.Where(s => s.ErpDetailId == erpDetailId).ToList(); + erpd.ForEach(det => { det.SuccessSync = SyncStatus.Success; det.ErpSyncBillNo = erpBillNo; @@ -189,7 +190,7 @@ namespace WMS.Web.Domain.Entitys this.OperateId = operateId; this.SyncTime = DateTime.Now; } - + /// /// 全部失败 /// @@ -212,7 +213,7 @@ namespace WMS.Web.Domain.Entitys if (this.SuccessSync != SyncStatus.Fail) return; this.SuccessSync = SyncStatus.SyncIng; var erpDetails = this.ErpDetails - .Where(w => w.SuccessSync == SyncStatus.Fail || w.SuccessSync==SyncStatus.SubmitFail || w.SuccessSync == SyncStatus.CheckFail) + .Where(w => w.SuccessSync == SyncStatus.Fail || w.SuccessSync == SyncStatus.SubmitFail || w.SuccessSync == SyncStatus.CheckFail) .ToList(); foreach (var e in erpDetails) { @@ -220,5 +221,27 @@ namespace WMS.Web.Domain.Entitys } this.Remark = ""; } + /// + /// 同步成功 + /// + /// + /// + /// + /// + public Result OperationSyncSuccess(string sourceBillNo, string materialNumber, string erpBillNo) + { + var erpDetail = this.ErpDetails.FirstOrDefault(f => f.SourceBillNo.Equals(sourceBillNo) && f.MaterialNumber.Equals(materialNumber)); + if (erpDetail == null) return Result.ReFailure(ResultCodes.NoDateError); + if (this.SuccessSync == SyncStatus.Success || erpDetail.SuccessSync == SyncStatus.Success) + return Result.ReFailure(ResultCodes.SyncSuccessError); + + erpDetail.ErpSyncBillNo = erpBillNo; + erpDetail.SuccessSync = SyncStatus.Success; + + if (this.ErpDetails.Where(w => w.SuccessSync == SyncStatus.Success).Count() == this.ErpDetails.Count()) + this.SuccessSync = SyncStatus.Success; + + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/IService/IInStockService.cs b/src/WMS.Web.Domain/IService/IInStockService.cs index d19350ef..e8565562 100644 --- a/src/WMS.Web.Domain/IService/IInStockService.cs +++ b/src/WMS.Web.Domain/IService/IInStockService.cs @@ -25,6 +25,13 @@ namespace WMS.Web.Domain.IService /// /// Task Sync(OperateRequest dto, LoginInDto loginInfo, bool isRepeatSync = true); + /// + /// 标记同步成功 + /// + /// + /// + /// + Task SyncSuccess(List dto, LoginInDto loginInfo); /// /// 收货 diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs index ba280431..3be8dd3a 100644 --- a/src/WMS.Web.Domain/Services/InStockService.cs +++ b/src/WMS.Web.Domain/Services/InStockService.cs @@ -1139,7 +1139,7 @@ namespace WMS.Web.Domain.Services list.SelectMany(s => s.Details) .Where(w => t_boxIds.Contains(w.BoxId)) .ForEach(f => f.UnBind = true); - + if (list.Count != 0) { var isSuccess = await _inStockRepositories.UpdateRange(list, isTransaction); @@ -1148,5 +1148,30 @@ namespace WMS.Web.Domain.Services } return Result.ReSuccess(); } + /// + /// 标记同步成功 + /// + /// + /// + /// + /// + public async Task SyncSuccess(List dto, LoginInDto loginInfo) + { + _logger.LogInformation($"标记同步成功:{JsonConvert.SerializeObject(dto)} 操作人:{loginInfo.UserInfo.StaffId},{loginInfo.UserInfo.Nickname}"); + + var ids = dto.Select(s => s.Id).ToList(); + var entityList = await _inStockRepositories.GetList(ids); + foreach (var d in dto) + { + var entity = entityList.FirstOrDefault(f => f.Id == d.Id); + if (entity == null) return Result.ReFailure(ResultCodes.NoDateError); + var res = entity.OperationSyncSuccess(d.SourceBillNo, d.MaterialNumber, d.ErpBillNo); + if (!res.IsSuccess) return res; + } + var isSuccess = await _inStockRepositories.UpdateRange(entityList, true); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs index 06a356cc..02548f64 100644 --- a/src/WMS.Web.Domain/Values/ResultCodes.cs +++ b/src/WMS.Web.Domain/Values/ResultCodes.cs @@ -97,5 +97,6 @@ namespace WMS.Web.Domain.Values public static ValueTuple SubscribeNotificationNoData = (700001, "订阅通知信息不存在"); public static ValueTuple GetBarCodeSerialNumberError = (800001, "获取序列码异常"); + public static ValueTuple SyncSuccessError = (800002, "单据已经同步成功"); } }