diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankInventoryController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankInventoryController.cs index 764390ea..bdf1f045 100644 --- a/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankInventoryController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankInventoryController.cs @@ -148,6 +148,53 @@ namespace ZR.Admin.WebApi.Controllers return SUCCESS(response); } + /// + /// PDA毛坯入库 + /// + /// + [HttpPost("PDABlankWarehousing")] + [AllowAnonymous] + [Log(Title = "PDA毛坯入库", BusinessType = BusinessType.UPDATE)] + public IActionResult PDABlankWarehousing([FromBody] BlankInventoryWarehousingDto parm) + { + try + { + var modal = parm.Adapt().ToCreate(HttpContext); + + int successNum = _WmBlankInventoryService.PDABlankWarehousing(modal); + + return ToResponse(new ApiResult(200, "入库成功,已入库:" + successNum + "条毛坯记录!", "入库成功")); + } + catch (Exception ex) + { + return ToResponse(new ApiResult(500, ex.Message, "入库失败")); + } + } + + /// + /// PDA毛坯标签解析 + /// + /// + [HttpGet("PDABlankResolutionPackage")] + [AllowAnonymous] + [Log(Title = "PDA毛坯入库", BusinessType = BusinessType.UPDATE)] + public IActionResult PDABlankResolutionPackage(string code) + { + try + { + if (string.IsNullOrEmpty(code)) { + return ToResponse(new ApiResult(500, "传入标签为空", "传入标签为空")); + } + var response = _WmBlankInventoryService.ResolutionPackage(code); + + return SUCCESS(response); + } + catch (Exception ex) + { + return ToResponse(new ApiResult(500, ex.Message, "入库失败")); + } + } + } } \ No newline at end of file diff --git a/ZR.Model/MES/wms/Dto/ResultionPackageCodeDto.cs b/ZR.Model/MES/wms/Dto/ResultionPackageCodeDto.cs index 822128cd..8a1976c1 100644 --- a/ZR.Model/MES/wms/Dto/ResultionPackageCodeDto.cs +++ b/ZR.Model/MES/wms/Dto/ResultionPackageCodeDto.cs @@ -19,6 +19,10 @@ /// 零件号 /// public string PartNumner { get; set; } + /// + /// 毛坯号 + /// + public string BlankNumber { get; set; } /// /// 工单号 diff --git a/ZR.Model/MES/wms/Dto/WmBlankInventoryDto.cs b/ZR.Model/MES/wms/Dto/WmBlankInventoryDto.cs index c050b566..c2d822b8 100644 --- a/ZR.Model/MES/wms/Dto/WmBlankInventoryDto.cs +++ b/ZR.Model/MES/wms/Dto/WmBlankInventoryDto.cs @@ -25,23 +25,27 @@ namespace ZR.Model.MES.wms.Dto public string BlankNum { get; set; } /// - /// 单位 + /// 单位 /// public string Unit { get; set; } + /// - /// 颜色 + /// 颜色 /// public string Color { get; set; } + /// - /// 规格 + /// 规格 /// public string Specification { get; set; } + /// - /// 描述 + /// 描述 /// public string Description { get; set; } + /// - /// 版本号 + /// 版本号 /// public string Version { get; set; } @@ -81,4 +85,23 @@ namespace ZR.Model.MES.wms.Dto public DateTime? UpdatedTime { get; set; } } -} \ No newline at end of file + + /// + /// 毛坯库存入库 + /// + public class BlankInventoryWarehousingDto + { + public List PackageList { get; set; } = new List(); + + // 1-返工件 对应数据库type=2 0-非返工件 对应数据库type=1 + public int IsBack { get; set; } = 1; + + public string CreatedBy { get; set; } + + public DateTime? CreatedTime { get; set; } + + public string UpdatedBy { get; set; } + + public DateTime? UpdatedTime { get; set; } + } +} diff --git a/ZR.Service/Utils/MaterialUtils.cs b/ZR.Service/Utils/MaterialUtils.cs index 63489e8e..b84e8934 100644 --- a/ZR.Service/Utils/MaterialUtils.cs +++ b/ZR.Service/Utils/MaterialUtils.cs @@ -64,6 +64,18 @@ namespace ZR.Service.Utils { return ResolutionPackagecode3(code); } + // 毛坯标签 + if (code.Contains('/')) + { + // 初步进行解析检测,增加解析成功率 + string[] splitstr = code.Split('/'); + if (splitstr.Length < 1) + { + return null; + } + return ResolutionPackagecode4(code); + } + // 成品标签 if (code.Contains('^')) { // 初步进行解析检测,增加解析成功率 @@ -302,5 +314,70 @@ namespace ZR.Service.Utils throw new Exception("解析失败" + e.Message); } } + + /// + /// 4-解析毛坯标签码 + /// + /// + /// + private ResultionPackageCodeDto ResolutionPackagecode4(string packagecode) + { + ResultionPackageCodeDto resultionPackageCode = new ResultionPackageCodeDto(); + try + { + resultionPackageCode.originalCode = packagecode; + // 解析外箱标签码 + string[] splitstr = packagecode.Split('/'); + // 解析批次号 + resultionPackageCode.PatchCode = splitstr[1]; + // 解析零件号 + string partnumber = splitstr[0]; + // 零件号 + resultionPackageCode.PartNumner = partnumber; + // 毛坯号 + string _blankNumber = splitstr[5]; + // 去掉毛坯号中带横杠的后缀(如-M2) + if (!string.IsNullOrEmpty(_blankNumber) && _blankNumber.Contains('-')) + { + _blankNumber = _blankNumber.Split('-')[0]; + } + + resultionPackageCode.BlankNumber = _blankNumber; + // 解析工单号 工单号会带个W,需要去掉 + string workoderidid = ""; + resultionPackageCode.WorkoderID = ""; + // 解析生产时间 工单号生产时间提取 + resultionPackageCode.ProductionTime = splitstr[1]; + // 解析箱子中产品数量 + string product_num = splitstr[4]; + resultionPackageCode.Quantity = int.Parse(product_num); + // 解析产品描述 partnumber 从物料列表抓取数据 + WmMaterial material = Context + .Queryable() + .Where(it => it.Partnumber == partnumber) + .First(); + if (material == null) + { + resultionPackageCode.ProductionDescribe = "物料记录未录入此零件号信息!"; + return resultionPackageCode; + } + string des1 = material.Description; + string des2 = material.ProductName; + if (!string.IsNullOrEmpty(des1)) + { + resultionPackageCode.ProductionDescribe = des1; + } + else if (!string.IsNullOrEmpty(des2)) + { + resultionPackageCode.ProductionDescribe = des2; + } + return resultionPackageCode; + } + catch (Exception ex) + { + logger.Error($"外箱标签码,解析失败 {ex.Message}"); + return null; + } + } } } diff --git a/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs b/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs index 305f01e3..47f1bf57 100644 --- a/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs +++ b/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs @@ -29,5 +29,17 @@ namespace ZR.Service.mes.wms.IService /// /// public int GetPartNumber(); + + /// + /// PDA-扫码毛坯入库 + /// + /// + public int PDABlankWarehousing(BlankInventoryWarehousingDto warehousingDto); + + /// + /// PDA-毛坯标签解析 + /// + /// + public ResultionPackageCodeDto ResolutionPackage(string code); } } diff --git a/ZR.Service/mes/wms/WmBlankInventoryService.cs b/ZR.Service/mes/wms/WmBlankInventoryService.cs index f087e524..56c8efdc 100644 --- a/ZR.Service/mes/wms/WmBlankInventoryService.cs +++ b/ZR.Service/mes/wms/WmBlankInventoryService.cs @@ -1,12 +1,14 @@ -using Infrastructure.Attribute; -using SqlSugar; using System; using System.Linq; +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Authentication; +using SqlSugar; using ZR.Model; using ZR.Model.MES.wms; using ZR.Model.MES.wms.Dto; using ZR.Repository; using ZR.Service.mes.wms.IService; +using ZR.Service.Utils; namespace ZR.Service.mes.wms { @@ -29,7 +31,15 @@ namespace ZR.Service.mes.wms List blankNums = Context .Queryable() .Where(it => it.Type == 2) - .Where(it => it.Status == 1).WhereIF(!string.IsNullOrEmpty(parm.Description), it => it.Description.Contains(parm.Description) || it.ProductName.Contains(parm.Description)).Select(o => o.BlankNum).ToList(); + .Where(it => it.Status == 1) + .WhereIF( + !string.IsNullOrEmpty(parm.Description), + it => + it.Description.Contains(parm.Description) + || it.ProductName.Contains(parm.Description) + ) + .Select(o => o.BlankNum) + .ToList(); var predicate = Expressionable .Create() @@ -41,18 +51,15 @@ namespace ZR.Service.mes.wms !string.IsNullOrEmpty(parm.Description), it => blankNums.Contains(it.BlankNum) ) - .AndIF(parm.Status > -1, it => it.Status == parm.Status) + .AndIF(parm.Status > -1, it => it.Status == parm.Status) .AndIF(parm.Type > 0, it => it.Type == parm.Type); var response = Queryable() .Where(predicate.ToExpression()) - .OrderByDescending(it => it.UpdatedTime) .ToPage(parm); if (response.Result.Count > 0) { - - foreach (WmBlankInventoryDto item in response.Result) { WmMaterial material = Context @@ -262,5 +269,98 @@ namespace ZR.Service.mes.wms .Where(it => it.Status == 1) .Sum(it => it.Quantity) ?? 0; } + + /// + /// PDA扫码入库 + /// + /// + /// + /// + public int PDABlankWarehousing(BlankInventoryWarehousingDto warehousingDto) + { + try + { + DateTime nowTime = DateTime.Now; + int result = 0; + List updateWmBlankInventories = new(); + List addWmBlankRecourds = new(); + // 检查是否返工件 + int BackType = warehousingDto.IsBack == 0 ? 1 : 2; + List packageList = warehousingDto.PackageList; + if (packageList.Count == 0) + { + throw new Exception("无箱标签传入"); + } + foreach (ResultionPackageCodeDto packageInfo in packageList) + { + // 库存变动 + WmBlankInventory wmBlankInventory = Context + .Queryable() + .Where(it => it.Type == BackType) + .Where(it => it.Status == 1) + .Where(it => it.BlankNum == packageInfo.BlankNumber) + .First(); + if (wmBlankInventory == null) + { + throw new Exception("毛坯库中暂无此毛坯"); + } + wmBlankInventory.Quantity += packageInfo.Quantity; + wmBlankInventory.UpdatedTime = nowTime; + wmBlankInventory.UpdatedBy = warehousingDto.CreatedBy; + updateWmBlankInventories.Add(wmBlankInventory); + // 记录添加 + WmBlankRecord wmBlankRecord = + new() + { + Id = SnowFlakeSingle.Instance.NextId().ToString(), + FkBlankInventoryId = wmBlankInventory.Id, + BlankNum = wmBlankInventory.BlankNum, + ChangeQuantity = packageInfo.Quantity, + // 1-入库 2-出库 3=盘点 + Type = 1, + Status = 1, + ActionTime = nowTime, + Remark = $"PDA毛坯入库,批次号:{packageInfo.PatchCode}", + CreatedBy = warehousingDto.CreatedBy, + CreatedTime = nowTime + }; + addWmBlankRecourds.Add(wmBlankRecord); + } + Context.Ado.BeginTran(); + result = Context.Updateable(updateWmBlankInventories).ExecuteCommand(); + if (result > 0) + { + //添加库存记录 + Context.Insertable(addWmBlankRecourds).ExecuteCommand(); + } + Context.Ado.CommitTran(); + return result; + } + catch (Exception ex) + { + Context.Ado.RollbackTran(); + throw new Exception(ex.Message); + } + } + + /// + /// PDA 标签解析 + /// + /// + /// + /// + public ResultionPackageCodeDto ResolutionPackage(string code) + { + try + { + MaterialUtils materialToos = new(); + ResultionPackageCodeDto packageCodeDto = materialToos.ResolutionPackage(code); + return packageCodeDto; + } + catch (Exception ex) + { + throw new Exception("毛坯标签解析异常:" + ex.Message); + } + } } }