diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WMentryWarehousing_productController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WMentryWarehousing_productController.cs index 903eb65e..263f740d 100644 --- a/ZR.Admin.WebApi/Controllers/mes/wms/WMentryWarehousing_productController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/wms/WMentryWarehousing_productController.cs @@ -134,6 +134,44 @@ namespace ZR.Admin.WebApi.Controllers.mes.wms } + /// + /// 4.入库(不传U8) + /// + /// + /// + [HttpPost("IntoProductwarehouseNoU8")] + [Log(Title = "入库(不传U8)")] + public IActionResult IntoProductwarehouseNoU8([FromBody] WmgoodsDto wmgoodsDto) + { + try + { + if (wmgoodsDto == null) + { + return ToResponse(new ApiResult(200, "传入参数为空", false)); + } + string msg = ""; + + string createName = HttpContext.GetName(); + int num = this.wm_entryWarehousing_productService.IntoProductwarehouseNoU8(wmgoodsDto, createName); + if (num == 0) + { + msg = "入库数为0!"; + } + else if (num >= 1) + { + msg = "成功入库" + num + "箱"; + + + } + return ToResponse(new ApiResult(200, msg, num)); + } + catch (Exception e) + { + return ToResponse(new ApiResult(500, e.Message, e.Message)); + } + + } + /// /// 退货到成品库 diff --git a/ZR.Service/mes/wms/IService/IWMExitwarehouseService.cs b/ZR.Service/mes/wms/IService/IWMExitwarehouseService.cs index 5fddb998..f113fead 100644 --- a/ZR.Service/mes/wms/IService/IWMExitwarehouseService.cs +++ b/ZR.Service/mes/wms/IService/IWMExitwarehouseService.cs @@ -9,7 +9,7 @@ /// public bool ExitwarehouseCommmon(string original); /// - /// 判断箱子是否存在陈平库中 + /// 判断箱子是否存在成品库中 /// /// /// diff --git a/ZR.Service/mes/wms/IService/IWMentryWarehousing_productService.cs b/ZR.Service/mes/wms/IService/IWMentryWarehousing_productService.cs index 7194e734..e95ffc6b 100644 --- a/ZR.Service/mes/wms/IService/IWMentryWarehousing_productService.cs +++ b/ZR.Service/mes/wms/IService/IWMentryWarehousing_productService.cs @@ -30,5 +30,7 @@ namespace ZR.Service.mes.wms.IService // 货物退库(从成品库退货到产线) public int ReturnProductwarehouse(WmgoodsDto wmgoods, string createName); + + public int IntoProductwarehouseNoU8(WmgoodsDto wmgoods, string createName); } } diff --git a/ZR.Service/mes/wms/WMExitwarehouseService.cs b/ZR.Service/mes/wms/WMExitwarehouseService.cs index c0465c93..259751d2 100644 --- a/ZR.Service/mes/wms/WMExitwarehouseService.cs +++ b/ZR.Service/mes/wms/WMExitwarehouseService.cs @@ -12,7 +12,7 @@ namespace ZR.Service.mes.wms public class WMExitwarehouseService : BaseService, IWMExitwarehouseService { private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); - //普通入库 + // 直接退库 public bool ExitwarehouseCommmon(string original) { ResultionPackageCodeDto packageCode = ResolutionPackagecode(original); diff --git a/ZR.Service/mes/wms/WMentryWarehousing_productService.cs b/ZR.Service/mes/wms/WMentryWarehousing_productService.cs index 311c359f..516e8843 100644 --- a/ZR.Service/mes/wms/WMentryWarehousing_productService.cs +++ b/ZR.Service/mes/wms/WMentryWarehousing_productService.cs @@ -23,6 +23,7 @@ namespace ZR.Service.mes.wms { private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + // 统一入库操作 public int IntoProductwarehouse(WmgoodsDto wmgoods, string createName) { try @@ -659,5 +660,153 @@ namespace ZR.Service.mes.wms throw new Exception(e.Message); } } + + public int IntoProductwarehouseNoU8(WmgoodsDto wmgoods, string createName) + { + try + { + // 1. 前置参数校验(事务外执行,不占用连接) + if (wmgoods == null || wmgoods.packagelist == null || wmgoods.packagelist.Length == 0) + throw new Exception("无入库箱,请检查传入数据!"); + + string location = string.IsNullOrEmpty(wmgoods.location) ? "LS" : wmgoods.location; + string[] packageArray = wmgoods.packagelist; + + // 去重校验 + HashSet uniquePackages = new HashSet(packageArray); + if (uniquePackages.Count != packageArray.Length) + throw new Exception($"入库箱有重复,实际箱数:{uniquePackages.Count}"); + + // 2. 解析数据并准备入库列表(事务外执行) + List preparegoodsList = new List(); + HashSet partnumbers = new HashSet(); + List allPatchCodes = new List(); + List packageCodeRemark = new List(); + int totalPackage = 0; + int totalPartnumber = 0; + + foreach (var pkgCode in packageArray) + { + var resultionPackage = ResolutionPackage(pkgCode); + if (resultionPackage == null) + throw new Exception($"箱标签解析失败: {pkgCode}"); + + // 缓存常用属性 + string patchCode = resultionPackage.PatchCode; + int? quantity = resultionPackage.Quantity ?? 0; + + // 收集用于批量校验的箱号 + allPatchCodes.Add(patchCode); + packageCodeRemark.Add(patchCode); + + // 构建入库对象 + var wmGood = new WmGoodsNowProduction + { + Id = SnowFlakeSingle.Instance.NextId().ToString(), + PackageCodeClient = patchCode, + Partnumber = resultionPackage.PartNumner, + PackageCodeOriginal = resultionPackage.originalCode, + LocationCode = location, + GoodsNumLogic = quantity.Value, + GoodsNumAction = quantity.Value, + EntryWarehouseTime = DateTime.Now, + CreatedBy = createName, + CreatedTime = DateTime.Now + }; + + // 处理流水号(增加容错) + string[] patchParts = patchCode.Split('_'); + int flowNum = -1; + if (patchParts.Length >= 2) + int.TryParse(patchParts[1], out flowNum); + + wmGood.PackageCode = Getpack_no(resultionPackage.WorkoderID, flowNum.ToString("000")) ?? "Iminate"; + + // 统计数据 + preparegoodsList.Add(wmGood); + partnumbers.Add(wmGood.Partnumber); + totalPackage++; + totalPartnumber += quantity.Value; + } + + // 3. 批量校验已入库状态(单次查询,减少连接占用) + if (allPatchCodes.Any()) + { + var existingCodes = Context.Queryable() + .Where(it => allPatchCodes.Contains(it.PackageCodeClient)) + .Select(it => it.PackageCodeClient) + .ToList(); + + if (existingCodes.Any()) + throw new Exception($"箱号已入库: {string.Join(",", existingCodes)}"); + } + + // 4. 数据库操作(最小化事务范围) + Context.Ado.BeginTran(); + try + { + // 批量更新校验状态 + var packageCodes = preparegoodsList + .Where(p => !string.IsNullOrEmpty(p.PackageCode)) + .Select(p => p.PackageCode) + .ToList(); + + if (packageCodes.Any()) + { + Context.Updateable() + .SetColumns(it => it.Bitwm == 1) + .Where(it => packageCodes.Contains(it.Packcode)) + .ExecuteCommand(); + } + + // 批量插入入库记录 + int insertResult = Context.Insertable(preparegoodsList).ExecuteCommand(); + if (insertResult == 0) + throw new Exception("入库记录插入失败"); + + // 插入操作日志 + var record = new WmGoodsRecord + { + Id = SnowFlakeSingle.Instance.NextId().ToString(), + FkInventoryId = SnowFlakeSingle.Instance.NextId().ToString(), + Code = "IntoProductwarehouse", + Partnumber = partnumbers.FirstOrDefault() ?? "无零件号", + ChangeType = 1, + ChangePackage = totalPackage, + ChangeQuantity = totalPartnumber, + ActionTime = DateTime.Now, + Status = 1, + Remark = + "货物入库(不传U8)" + + "\n零件号:" + + string.Join(',', partnumbers) + + "\n总箱数:" + + totalPackage + + "\n总零件数:" + + totalPartnumber + + "\n涉及批次号:\n" + + string.Join(',', allPatchCodes), + CreatedBy = createName, + CreatedTime = DateTime.Now + }; + + if (Context.Insertable(record).ExecuteCommand() == 0) + throw new Exception("操作记录插入失败"); + + Context.Ado.CommitTran(); // 提交事务,释放连接 + } + catch + { + Context.Ado.RollbackTran(); // 回滚事务,释放连接 + throw; + } + + return preparegoodsList.Count; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } } } diff --git a/ZR.Service/mes/wms/WmOneTimeRecordService.cs b/ZR.Service/mes/wms/WmOneTimeRecordService.cs index 845ac6b3..4a01a7ce 100644 --- a/ZR.Service/mes/wms/WmOneTimeRecordService.cs +++ b/ZR.Service/mes/wms/WmOneTimeRecordService.cs @@ -505,6 +505,12 @@ namespace ZR.Service.mes.wms } foreach (var item in qcBackEndQualityStatistics2) { + int _changeQuantity = + item.PolishNumber.Value + item.DamoNumber.Value + item.BaofeiNumber.Value; + if (_changeQuantity == 0) + { + continue; + } // TODO 零件号二次处理 string partNumber = item.PartNumber; // 使用正则表达式匹配并移除特殊后缀 @@ -522,11 +528,10 @@ namespace ZR.Service.mes.wms Code = "自动", Partnumber = processedPartnumber, ChangeType = 2, - ChangeQuantity = - item.PolishNumber + item.DamoNumber + item.BaofeiNumber, + ChangeQuantity = _changeQuantity, ActionTime = item.StartTime, Status = 1, - Remark = "后道触摸屏-非直接出库-报表内损耗自动出库,来源:" + item.WorkOrder + Remark = "后道触摸屏-W04非直接出库-报表内损耗自动出库,来源:" + item.WorkOrder } ); }