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);
+ }
+ }
}
}