入库功能

This commit is contained in:
qianhao.xu 2024-03-15 17:55:50 +08:00
parent 9b9aedfa37
commit 2099805a6b
11 changed files with 331 additions and 95 deletions

View File

@ -31,9 +31,10 @@ namespace ZR.Admin.WebApi.Controllers.mes.wms
/// </summary>
/// <returns></returns>
[HttpGet("is_production_location")]
[Log(Title = "判断是否为库位码")]
public IActionResult IsProductionLocation(string production_location_code = "")
{
if(string.IsNullOrEmpty(production_location_code))
if (string.IsNullOrEmpty(production_location_code))
{
return ToResponse(new ApiResult(200, "传入为空", false));
@ -49,6 +50,7 @@ namespace ZR.Admin.WebApi.Controllers.mes.wms
/// </summary>
/// <returns></returns>
[HttpGet("is_production_package")]
[Log(Title = "判断是否为成品库箱子码")]
public IActionResult IsProductionPackage(string package_code = "")
{
if (string.IsNullOrEmpty(package_code))
@ -76,6 +78,7 @@ namespace ZR.Admin.WebApi.Controllers.mes.wms
/// </summary>
/// <returns></returns>
[HttpGet("is_full_package")]
[Log(Title = "判断是否为满箱")]
public IActionResult IsFullPackage(string package_code = "")
{
@ -85,9 +88,16 @@ namespace ZR.Admin.WebApi.Controllers.mes.wms
}
bool state = this.wm_entryWarehousing_productService.isFullPackage(package_code);
string msg = state ? "满箱" : "不满箱";
string msg = null;
if (state)
{
msg = "满箱";
}else
{
msg = "零头箱";
}
return ToResponse(new ApiResult(200, msg, true));
return ToResponse(new ApiResult(200, msg, state));
}
/// <summary>
/// 4.入库
@ -95,24 +105,25 @@ namespace ZR.Admin.WebApi.Controllers.mes.wms
/// <param name="wmgoodsDto"></param>
/// <returns></returns>
[HttpPost("into_product_warehouse")]
public IActionResult IntoProductwarehouse([FromBody] WmgoodsDto wmgoodsDto)
[Log(Title = "入库")]
public IActionResult IntoProductwarehouse([FromBody] WmgoodsDto wmgoodsDto)
{
if(wmgoodsDto == null)
if (wmgoodsDto == null)
{
return ToResponse(new ApiResult(200, "传入为空", false));
}
string msg = "";
bool data = false;
string createName=HttpContext.GetName();
string createName = HttpContext.GetName();
int status=this.wm_entryWarehousing_productService.IntoProductwarehouse(wmgoodsDto, createName);
if(status == 0)
int status = this.wm_entryWarehousing_productService.IntoProductwarehouse(wmgoodsDto, createName);
if (status == 0)
{
msg = "数据插入异常";
data = false;
}
else if(status == 1)
else if (status == 1)
{
msg = "success";
data = true;
@ -126,18 +137,66 @@ namespace ZR.Admin.WebApi.Controllers.mes.wms
/// <param name="locationcode"></param>
/// <returns></returns>
[HttpGet("packagelist")]
[Log(Title = "获取库位已经存在箱子")]
public IActionResult Getpackagelist(string locationcode)
{
if(string.IsNullOrEmpty(locationcode))
if (string.IsNullOrEmpty(locationcode))
{
return ToResponse(new ApiResult(200, "传入为空", false));
}
string msg = null;
List<WmGoodsNowProduction> productionList= this.wm_entryWarehousing_productService.Getpackagelist(locationcode);
List<WmGoodsNowProduction> productionList = this.wm_entryWarehousing_productService.Getpackagelist(locationcode);
return ToResponse(new ApiResult(200, msg, productionList));
}
/// <summary>
/// 解析外标签码
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
[HttpGet("resolution_package")]
public IActionResult ResolutionPackage(string code = "")
{
if (string.IsNullOrEmpty(code))
{
return ToResponse(new ApiResult(200, "传入为空", false));
}
ResultionPackageCodeDto data = this.wm_entryWarehousing_productService.ResolutionPackage(code);
return ToResponse(new ApiResult(200, "success", data));
}
/// <summary>
/// 7 判断箱子是否存在成品库仓库里
/// </summary>
/// <param name="PatchCode"></param>
/// <returns></returns>
[HttpGet("is_existed_warehouse")]
public IActionResult IsExistedWarehouse(string originalCode = "")
{
if (string.IsNullOrEmpty(originalCode))
{
return ToResponse(new ApiResult(200, "传入为空", false));
}
string msg = null;
bool data = this.wm_entryWarehousing_productService.IsExistedWarehouse(originalCode);
if (data)
{
msg = "存在";
}
else
{
msg = "不存在";
}
return ToResponse(new ApiResult(200, msg, data));
}
}
}

View File

@ -41,8 +41,6 @@
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="7.0.6" />
<PackageReference Include="UAParser" Version="3.1.47" />
<PackageReference Include="IPTools.China" Version="1.6.0" />
<PackageReference Include="NLog" Version="5.2.0" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.0" />
<PackageReference Include="Mapster" Version="7.3.0" />
<PackageReference Include="SkiaSharp.NativeAssets.Linux" Version="2.88.3" />
</ItemGroup>

View File

@ -11,9 +11,12 @@
{
//
"Conn": "Data Source=47.116.122.230;Port=3307;User ID=root;Password=123456;Initial Catalog=ZrAdmin;",
"Conn": "Data Source=127.0.0.01;User ID=root;Password=123456;Initial Catalog=ZrAdmin;",
//
//"Conn": "Data Source=47.116.122.230;Port=3307;User ID=root;Password=123456;Initial Catalog=ZrAdmin;",
//
//"Conn": "Data Source=192.168.0.36;Port=3306;User ID=root;Password=123456;Initial Catalog=ZrAdmin;",
//"Conn": "Data Source=192.168.0.36;Port=3306;User ID=root;Password=123456;Initial Catalog=ZrAdmin;",
"Type": 0, // MySql = 0, SqlServer = 1, Oracle = 3PgSql = 4,
"ConfigId": "0", //
"IsAutoCloseConnection": true

View File

@ -11,7 +11,7 @@
{
//"Conn": "Data Source=147.116.122.230;User ID=root;Password=123456;Initial Catalog=ZrAdmin;",
//"Conn": "Data Source=47.116.122.230;Port=3307;User ID=root;Password=123456;Initial Catalog=ZrAdmin;",
"Conn": "Data Source=192.168.0.36;Port=3306;User ID=root;Password=123456;Initial Catalog=ZrAdmin;",
"Conn": "Data Source=192.168.60.251;Port=3306;User ID=root;Password=123456;Initial Catalog=ZrAdmin;",
"DbType": 0, // MySql = 0, SqlServer = 1, Oracle = 3PgSql = 4
"ConfigId": "0", //
"IsAutoCloseConnection": true

View File

@ -11,6 +11,8 @@
<PackageReference Include="MailKit" Version="4.1.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="7.0.0" />
<PackageReference Include="MiniExcel" Version="1.31.0" />
<PackageReference Include="NLog" Version="5.2.0" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.0" />
</ItemGroup>
<ItemGroup>

View File

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ZR.Model.MES.wms.Dto
{
public class ResultionPackageCodeDto
{
/// <summary>
/// 原始码
/// </summary>
public string originalCode { get; set; }
/// <summary>
/// 批次号
/// </summary>
public string PatchCode { get; set; }
/// <summary>
/// 零件号
/// </summary>
public string PartNumner { get; set; }
/// <summary>
/// 工单号
/// </summary>
public string WorkoderID { get; set; }
/// <summary>
/// 数量
/// </summary>
public string Quantity { get; set; }
/// <summary>
/// 生产时间
/// </summary>
public string ProductionTime { get; set; }
/// <summary>
/// 产品描述
/// </summary>
public string ProductionDescribe { get; set; }
}
}

View File

@ -16,7 +16,7 @@ namespace ZR.Model.MES.wms.Dto
/// </summary>
public string location { set; get; }
/// <summary>
/// 箱子列表
/// 箱子列表(原始外箱标签码)
/// </summary>
public string[] packagelist { set; get; }
}

View File

@ -16,10 +16,23 @@ namespace ZR.Model.MES.wms
[SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
public string Id { get; set; }
/// <summary>
/// 箱子编号
/// 箱子编号 (MES)
///</summary>
[SugarColumn(ColumnName = "package_code")]
public string PackageCode { get; set; }
/// <summary>
/// 箱子编号 (批次号)
///</summary>
[SugarColumn(ColumnName = "package_code_client")]
public string PackageCodeClient { get; set; }
/// <summary>
/// 箱子编号 (批次号)
///</summary>
[SugarColumn(ColumnName = "package_code_original")]
public string PackageCodeOriginal { get; set; }
/// <summary>
/// 库位编号
///</summary>

View File

@ -7,6 +7,7 @@ using System.Threading.Tasks;
using ZR.Model.MES.qc.DTO;
using ZR.Model.MES.wms;
using ZR.Model.MES.wms.Dto;
using static Org.BouncyCastle.Crypto.Engines.SM2Engine;
namespace ZR.Service.mes.wms.IService
{
@ -29,6 +30,11 @@ namespace ZR.Service.mes.wms.IService
//获取库位已经存在的货物
public List<WmGoodsNowProduction> Getpackagelist(string location);
//解析外箱标签码
public ResultionPackageCodeDto ResolutionPackage(string code);
public bool IsExistedWarehouse(string originalCode);
}

View File

@ -1,6 +1,8 @@
using Infrastructure.Attribute;
using Aliyun.OSS;
using Infrastructure.Attribute;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Model.DBModel;
using SqlSugar;
using System;
using System.Collections.Generic;
@ -13,28 +15,48 @@ using ZR.Model.MES.wms;
using ZR.Model.MES.wms.Dto;
using ZR.Service.mes.qc.IService;
using ZR.Service.mes.wms.IService;
using static Org.BouncyCastle.Crypto.Engines.SM2Engine;
namespace ZR.Service.mes.wms
{
[AppService(ServiceType = typeof(IWMentryWarehousing_productService), ServiceLifetime = LifeTime.Transient)]
public class WMentryWarehousing_productService : BaseService<WmInfo>, IWMentryWarehousing_productService
{
private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
//货物入库
public int IntoProductwarehouse(WmgoodsDto wmgoods, string createName)
{
List<WmGoodsNowProduction> preparegoodsList = new List<WmGoodsNowProduction>();
if (wmgoods.packagelist != null && wmgoods.packagelist.Count() > 0)
{
for (int i = 0; i < wmgoods.packagelist.Count(); i++)
{
ResultionPackageCodeDto resultionPackage= ResolutionPackagecode(wmgoods.packagelist[i]);
WmGoodsNowProduction wmGood = new WmGoodsNowProduction();
wmGood.Id = SnowFlakeSingle.Instance.NextId().ToString();
string flow = resultionPackage.PatchCode.Split('_')[1];
int flow_num = 0;
try
{
flow_num = Convert.ToInt32(flow);
}catch(Exception ex)
{
flow_num = -1;
}
wmGood.PackageCode = Getpack_no(resultionPackage.WorkoderID, flow_num.ToString("000"));
wmGood.PackageCodeClient = resultionPackage.PatchCode;
wmGood.PackageCodeOriginal = resultionPackage.originalCode;
wmGood.PackageCode = Getpack_no(wmgoods.packagelist[i]);
wmGood.LocationCode = wmgoods.location;
string workorder_id = wmgoods.packagelist[i].Substring(3, 9);
string workorder_id = resultionPackage.WorkoderID;
wmGood.GoodsNumLogic = Context.Queryable<WmPackingrecord>()
@ -57,84 +79,21 @@ namespace ZR.Service.mes.wms
return result;
}
//判断箱子是否满
public bool isFullPackage(string production_packcode)
{
string workorder_id = production_packcode.Substring(3, 9);
string flow_id = production_packcode.Substring(13, 3);
bool isExist = Context.Queryable<WmPackingrecord>()
.Where(it => it.WorkOrderNum == workorder_id)
.Where(it => it.PackingCode.EndsWith(flow_id))
.Where(it => it.BFilled == true).Any();
return isExist;
}
/// <summary>
/// 判断是否为成品箱子码
/// 获取mes的箱子码
/// </summary>
/// <param name="production_packcode"></param>
/// <param name="workordorid">工单</param>
/// <param name="flow">序号</param>
/// <returns></returns>
public int isProductionPackage(string production_packcode)
{
Regex r = new Regex("CodeBNW\\d{9}_\\d{0,3}");
Regex r1 = new Regex("Code=BNW\\d{9}_\\d{0,3}");
//todo 不是箱子
if (!r.IsMatch(production_packcode)& !r1.IsMatch(production_packcode))
{
return 2;
}
// 匹配 CodeBNW\\d{9}_\\d{0,3}
if (r.IsMatch(production_packcode))
{
//string workorder_id = production_packcode.Substring(3, 9);
//string flow_id = production_packcode.Substring(13, 3).ToString("000");
}
if (r1.IsMatch(production_packcode))
{
}
string workorder_id = production_packcode.Substring(3, 9);
string flow_id = production_packcode.Substring(13, 3);
bool isExist = Context.Queryable<WmPackingrecord>()
.Where(it => it.WorkOrderNum == workorder_id)
.Where(it => it.PackingCode.EndsWith(flow_id))
.Any();
if (!isExist)
{
return 0;
}
return 1;
}
bool IWMentryWarehousing_productService.IsProductionLoacation(string production_location_code)
private string Getpack_no(string workordorid, string flow)
{
return Context.Queryable<WmInfo>().Where(it => it.WarehouseNum == 1)
.Where(it => it.Location.Equals(production_location_code)).Any();
}
/// <summary>
/// 获取箱子唯一识别号
/// </summary>
/// <param name="production_packcode"></param>
/// <returns></returns>
private string Getpack_no(string production_packcode)
{
string workorder_id = production_packcode.Substring(3, 9);
string flow_id = production_packcode.Substring(13, 3);
WmPackingrecord record = Context.Queryable<WmPackingrecord>()
.Where(it => it.WorkOrderNum == workorder_id)
.Where(it => it.PackingCode.EndsWith(flow_id))
.Where(it => it.WorkOrderNum == workordorid)
.Where(it => it.PackingCode.EndsWith(flow))
.First();
@ -146,11 +105,162 @@ namespace ZR.Service.mes.wms
return record.ProductCode;
}
//3 判断箱子是否满
public bool isFullPackage(string production_packcode)
{
ResultionPackageCodeDto Identity = ResolutionPackagecode(production_packcode);
if (Identity == null)
{
return false;
}
string packingCode = Identity.PatchCode.Split('_')[1];
bool isExist = Context.Queryable<WmPackingrecord>()
.Where(it => it.WorkOrderNum == Identity.WorkoderID)
.Where(it => it.PackingCode.EndsWith(packingCode))
.Where(it => it.BFilled == true)
.Any();
return isExist;
}
/// <summary>
/// 2 判断是否为成品箱子码
/// </summary>
/// <param name="production_packcode"></param>
/// <returns></returns>
public int isProductionPackage(string production_packcode)
{
Regex r = new Regex("Code=BNW\\d{9}_\\d{0,3}");
//todo 不是箱子
if (!r.IsMatch(production_packcode))
{
return 2;
}
ResultionPackageCodeDto Identity = ResolutionPackagecode(production_packcode);
if (Identity == null)
{
return 0;
}
string packingCode = Identity.PatchCode.Split('_')[1];
bool isExist = Context.Queryable<WmPackingrecord>()
.Where(it => it.WorkOrderNum == Identity.WorkoderID)
.Where(it => it.PackingCode.EndsWith(packingCode))
.Any();
if (!isExist)
{
return 0;
}
return 1;
}
//1 判断是否为库位码
bool IWMentryWarehousing_productService.IsProductionLoacation(string production_location_code)
{
return Context.Queryable<WmInfo>().Where(it => it.WarehouseNum == 1)
.Where(it => it.Location.Equals(production_location_code)).Any();
}
//获取库位已经存在的货物
public List<WmGoodsNowProduction> Getpackagelist(string location)
{
return Context.Queryable<WmGoodsNowProduction>().Where(it=>it.LocationCode==location).ToList();
return Context.Queryable<WmGoodsNowProduction>().Where(it => it.LocationCode == location).ToList();
}
/// <summary>
/// 解析外箱标签码
/// </summary>
/// <param name="packagecode"></param>
/// <returns></returns>
private ResultionPackageCodeDto ResolutionPackagecode(string packagecode)
{
ResultionPackageCodeDto resultionPackageCode = new ResultionPackageCodeDto();
try
{
resultionPackageCode.originalCode= packagecode;
// todo 解析外箱标签码
string[] splitstr = packagecode.Split('^');
resultionPackageCode.PatchCode = splitstr[0].Substring(5);
//todo 解析零件号
string partnumber = splitstr[1].Substring(11);
//int length = lingshi.Length - 2;
//string partnumber = lingshi.Substring(0, length);
resultionPackageCode.PartNumner = partnumber;
//todo 解析工单号
string workoderidid = splitstr[2].Substring(7);
resultionPackageCode.WorkoderID = workoderidid;
//todo 生产描述
resultionPackageCode.ProductionTime="20"+ workoderidid.Substring(0,6);
//todo 解析箱子中产品数量
string product_num = splitstr[3].Substring(4);
resultionPackageCode.Quantity = product_num;
//todo 产品描述 partnumber
ProWorklplan_v2 plan= Context.Queryable<ProWorklplan_v2>().Where(it => it.Partnumber == partnumber).First();
if(plan != null)
{
resultionPackageCode.ProductionDescribe = plan.ProductName;
}
else
{
resultionPackageCode.ProductionDescribe = "生产计划无此零件号";
}
}
catch (Exception ex)
{
logger.Error($"外箱标签码,解析失败 {ex.Message}");
}
return resultionPackageCode;
}
//解析外箱标签码
public ResultionPackageCodeDto ResolutionPackage(string code)
{
return ResolutionPackagecode(code);
}
/// <summary>
/// 判断箱子是否在成品库中
/// </summary>
/// <param name="PatchCode"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public bool IsExistedWarehouse(string originalCode)
{
ResultionPackageCodeDto resultionPackage= ResolutionPackagecode(originalCode);
return Context.Queryable<WmGoodsNowProduction>().Where(it => it.PackageCodeClient == resultionPackage.PatchCode).Any();
}
}
}

View File

@ -6,7 +6,6 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="7.0.0" />
<PackageReference Include="NLog" Version="5.2.0" />
<PackageReference Include="Quartz" Version="3.7.0" />
<PackageReference Include="Quartz.Serialization.Json" Version="3.7.0" />
</ItemGroup>