diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankInventoryController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankInventoryController.cs index 4cdd6589..87a2527d 100644 --- a/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankInventoryController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankInventoryController.cs @@ -120,13 +120,13 @@ namespace ZR.Admin.WebApi.Controllers [HttpPost("synchronousMaterial")] [ActionPermissionFilter(Permission = "business:wmblankinventory:add")] [Log(Title = "物料清单数据同步", BusinessType = BusinessType.INSERT)] - public IActionResult SynchronousMaterial([FromBody] WmBlankInventoryDto parm) + public IActionResult SynchronousMaterial([FromBody] WmBlankInventorySynchronousDto parm) { var modal = parm.Adapt().ToCreate(HttpContext); - var response = _WmBlankInventoryService.AddWmBlankInventory(modal); + int successNum = _WmBlankInventoryService.SynchronousMaterial(modal); - return SUCCESS(response); + return ToResponse(new ApiResult(200, "同步成功,已添加:"+ successNum + "条记录!", "同步成功")); } diff --git a/ZR.Model/MES/wms/Dto/WmBlankInventoryDto.cs b/ZR.Model/MES/wms/Dto/WmBlankInventoryDto.cs index 47b69532..59aa346f 100644 --- a/ZR.Model/MES/wms/Dto/WmBlankInventoryDto.cs +++ b/ZR.Model/MES/wms/Dto/WmBlankInventoryDto.cs @@ -5,7 +5,7 @@ namespace ZR.Model.MES.wms.Dto /// /// 毛坯库存表查询对象 /// - public class WmBlankInventoryQueryDto : PagerInfo + public class WmBlankInventoryQueryDto : PagerInfo { public string BlankNum { get; set; } public int? Type { get; set; } @@ -66,8 +66,19 @@ namespace ZR.Model.MES.wms.Dto public string UpdatedBy { get; set; } public DateTime? UpdatedTime { get; set; } + } + /// + /// 毛坯库存同步对象 + /// + public class WmBlankInventorySynchronousDto + { + public string CreatedBy { get; set; } + public DateTime? CreatedTime { get; set; } + public string UpdatedBy { get; set; } + + public DateTime? UpdatedTime { get; set; } } } \ No newline at end of file diff --git a/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs b/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs index bec77ab2..b1602124 100644 --- a/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs +++ b/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs @@ -19,6 +19,11 @@ namespace ZR.Service.mes.wms.IService WmBlankInventory AddWmBlankInventory(WmBlankInventory parm); int UpdateWmBlankInventory(WmBlankInventory parm); - + /// + /// 数据与物料清单同步 + /// + /// + /// + int SynchronousMaterial(WmBlankInventory parm); } } diff --git a/ZR.Service/mes/wms/WmBlankInventoryService.cs b/ZR.Service/mes/wms/WmBlankInventoryService.cs index 356d0007..71f13c48 100644 --- a/ZR.Service/mes/wms/WmBlankInventoryService.cs +++ b/ZR.Service/mes/wms/WmBlankInventoryService.cs @@ -9,6 +9,7 @@ using ZR.Repository; using System.Linq; using ZR.Service.mes.wms.IService; using ZR.Model.MES.wms.Dto; +using Microsoft.AspNetCore.Http.HttpResults; namespace ZR.Service.mes.wms { @@ -33,7 +34,7 @@ namespace ZR.Service.mes.wms var response = Queryable() .Where(predicate.ToExpression()) - .OrderByDescending(it=>it.UpdatedTime) + .OrderByDescending(it => it.UpdatedTime) .ToPage(parm); if (response.Result.Count > 0) { @@ -82,10 +83,11 @@ namespace ZR.Service.mes.wms { bool hasRecord = Context.Queryable() .Where(it => it.BlankNum == model.BlankNum) + .Where(it => it.Type == model.Type) .Any(); - if(hasRecord) + if (hasRecord) { - throw new Exception("毛坯仓库已有相同毛坯号记录"); + throw new Exception("毛坯仓库已有相同类别的毛坯号记录"); } model.Id = SnowFlakeSingle.Instance.NextId().ToString(); return Context.Insertable(model).ExecuteReturnEntity(); @@ -117,5 +119,91 @@ namespace ZR.Service.mes.wms return Update(model, true); } + public int SynchronousMaterial(WmBlankInventory parm) + { + try + { + int num = 0; + List materials = Context.Queryable() + .Where(it => it.Remarks == "毛坯") + .Where(it => !string.IsNullOrEmpty(it.BlankNum)) + .OrderBy(it => it.BlankNum) + .ToList(); + var uniqueBlankNums = materials.Select(m => m.BlankNum).Distinct().ToList(); + var wmBlankInventories = Context.Queryable() + .Where(it => uniqueBlankNums.Contains(it.BlankNum)) + .ToList() + .GroupBy(it => it.BlankNum) + .ToDictionary(g => g.Key, g => g.FirstOrDefault()); + foreach (WmMaterial item in materials) + { + int result = 0; + if (!wmBlankInventories.TryGetValue(item.BlankNum, out WmBlankInventory wmBlank)) + { + // 没有找到匹配的BlankNum,添加两种类型的库存 + result += AddBlankInventory(item.BlankNum, 1, parm.CreatedBy, parm.CreatedTime); + result += AddBlankInventory(item.BlankNum, 2, parm.CreatedBy, parm.CreatedTime); + } + else + { + // 找到了匹配的BlankNum,根据Type添加库存 + if (wmBlank.Type == 1) + { + result = AddBlankInventory(item.BlankNum, 2, parm.CreatedBy, parm.CreatedTime); + } + else + { + result = AddBlankInventory(item.BlankNum, 1, parm.CreatedBy, parm.CreatedTime); + } + } + if(result > 0) + { + num++; + } + } + return num; + } + catch (Exception ex) + { + throw new Exception("同步异常:" + ex.Message); + } + + } + /// + /// 自动添加毛坯库存记录 + /// + /// + /// + /// + public int AddBlankInventory(string blankNum, int type, string createBy = "", DateTime? createTime = null) + { + bool hasRecord = Context.Queryable() + .Where(it => it.BlankNum == blankNum) + .Where(it => it.Type == type) + .Any(); + if (hasRecord) + { + return 0; + } + WmBlankInventory wmBlank = new() + { + Id = SnowFlakeSingle.Instance.NextId().ToString(), + FkPaintId = string.Empty, + BlankNum = blankNum, + Quantity = 0, + MaxNum = 0, + MinNum = 0, + WarnNum = 0, + Type = type, + Status = 1, + Remark = string.Empty, + CreatedBy = createBy, + CreatedTime = createTime, + UpdatedBy = createBy, + UpdatedTime = createTime, + }; + + return Context.Insertable(wmBlank).ExecuteCommand(); + } } } \ No newline at end of file