change - 筛选库位逻辑实现、修改项目实体参数:去除创建更新信息字段

master
WenJY 2 months ago
parent 75fffb4a1d
commit 660ca866ab

@ -0,0 +1,19 @@
namespace Sln.Wcs.Business.Domain.Enum;
public enum StoreTypeEnum
{
/// <summary>
/// 包材
/// </summary>
Material = 1,
/// <summary>
/// 成品
/// </summary>
Product = 2,
/// <summary>
/// 托盘
/// </summary>
Pallet = 3,
}

@ -29,6 +29,11 @@ namespace Sln.Wcs.Business.Domain.Model.FilterLocation;
public class FilterLocationResultModel
{
/// <summary>
/// 目标仓库
/// </summary>
public BaseStoreInfo storeInfo { get; set; }
/// <summary>
/// 目标库位
/// </summary>

@ -30,6 +30,7 @@ using Sln.Wcs.Business.Domain.Dto.SaveTask;
using Sln.Wcs.Business.Domain.Dto.ValidateMaterial;
using Sln.Wcs.Business.Domain.Enum;
using Sln.Wcs.Business.Domain.Model.CreateTask;
using Sln.Wcs.Business.Domain.Model.FilterLocation;
using Sln.Wcs.Business.Domain.Model.SaveTask;
using Sln.Wcs.Model.Domain;
using Sln.Wcs.Repository.service;
@ -43,11 +44,13 @@ public class MaterialInStore:BaseBusiness
{
private readonly IBasePathInfoService _basePathInfoService;
private readonly ILiveTaskQueueService _liveTaskQueueService;
private readonly IBaseStoreInfoService _baseStoreInfoService;
public MaterialInStore(IBasePathInfoService basePathInfoService, ILiveTaskQueueService liveTaskQueueService)
public MaterialInStore(IBasePathInfoService basePathInfoService, ILiveTaskQueueService liveTaskQueueService, IBaseStoreInfoService baseStoreInfoService)
{
_basePathInfoService = basePathInfoService;
_liveTaskQueueService = liveTaskQueueService;
_baseStoreInfoService = baseStoreInfoService;
}
public override ValidateMaterialResultDto ValidateMaterial(ValidateMaterialDto validateMaterialDto)
@ -66,6 +69,25 @@ public class MaterialInStore:BaseBusiness
CreateTaskResultDto resultDto = new CreateTaskResultDto();
try
{
#region CreateTaskDto 参数校验
if (string.IsNullOrEmpty(createTaskDto.materialCode))
{
throw new InvalidOperationException($"物料编号不允许为 NULL");
}
if (string.IsNullOrEmpty(createTaskDto.palletBarcode))
{
throw new InvalidOperationException($"托盘条码不允许为 NULL");
}
if (string.IsNullOrEmpty(createTaskDto.startPoint) || string.IsNullOrEmpty(createTaskDto.endPoint))
{
throw new InvalidOperationException($"起始位置、终点位置不允许为 NULL");
}
#endregion
createTaskDto.taskType = TaskTypeEnum.InStore;
createTaskDto.taskCategory = TaskCategoryEnum.Material;
//获取包材入库路径
@ -100,9 +122,55 @@ public class MaterialInStore:BaseBusiness
return resultDto;
}
/// <summary>
/// 筛选库位
/// </summary>
/// <param name="filterLocationDto"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public override FilterLocationResultDto FilterLocation(FilterLocationDto filterLocationDto)
{
throw new NotImplementedException();
FilterLocationResultDto resultDto = new FilterLocationResultDto();
try
{
#region 参数校验
if (string.IsNullOrEmpty(filterLocationDto.materialCode))
{
throw new InvalidOperationException($"物料编号不允许为 NULL");
}
#endregion
Expression<Func<BaseStoreInfo,bool>> storeWhere = x => x.storeType == (int)StoreTypeEnum.Material;
Expression<Func<BaseLocationInfo,bool>> locationWhere = x=>x.materialCode==filterLocationDto.materialCode && x.locationStatus == 0 && x.isFlag == 1;
List<BaseStoreInfo> storeInfos = _baseStoreInfoService.GetBasePathInfo(storeWhere,locationWhere);
//先对仓库进行排序
BaseStoreInfo? storeInfo = storeInfos.Where(s => s.locationInfos.Count > 0).OrderBy(x=>x.storeCode).FirstOrDefault() ?? throw new ArgumentNullException($"未获取到可用仓库");
BaseLocationInfo? locationInfo = storeInfo.locationInfos.OrderBy(x => x.locationRows).ThenBy(x=>x.locationColumns).ThenBy(x=>x.locationLayers).FirstOrDefault() ?? throw new ArgumentNullException($"目标仓库:{storeInfo.storeName}中未获取到可用库位");
resultDto.code = BusinessStatusEnum.;
resultDto.msg = "执行完成";
resultDto.data = new FilterLocationResultModel()
{
storeInfo = storeInfo,
locationInfos = storeInfo.locationInfos,
locationInfo = locationInfo,
};
}
catch (Exception e)
{
resultDto.code = BusinessStatusEnum.;
resultDto.msg = e.Message;
}
return resultDto;
}
/// <summary>

@ -103,36 +103,4 @@ public class BaseDeviceHost
/// </summary>
[SugarColumn(ColumnName = "remark")]
public string remark { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string createdBy { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? createdTime { get; set; }
/// <summary>
/// Desc:更新人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string updatedBy { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public DateTime? updatedTime { get; set; }
}

@ -99,38 +99,6 @@ namespace Sln.Wcs.Model.Domain
[SugarColumn(ColumnName = "remark")]
public string remark { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string createdBy { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? createdTime { get; set; }
/// <summary>
/// Desc:更新人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string updatedBy { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public DateTime? updatedTime { get; set; }
/// <summary>
/// 序号(用于列表显示,不参与数据库操作)
/// </summary>

@ -112,37 +112,4 @@ public class BaseDeviceParam
[SugarColumn(ColumnName = "remark")]
public string remark { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string createdBy { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? createdTime { get; set; }
/// <summary>
/// Desc:更新人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string updatedBy { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public DateTime? updatedTime { get; set; }
}

@ -155,38 +155,6 @@ namespace Sln.Wcs.Model.Domain
[SugarColumn(ColumnName = "remark")]
public string remark { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string createdBy { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? createdTime { get; set; }
/// <summary>
/// Desc:更新人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string updatedBy { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public DateTime? updatedTime { get; set; }
/// <summary>
/// 序号(用于列表显示,不参与数据库操作)
/// </summary>

@ -107,38 +107,6 @@ namespace Sln.Wcs.Model.Domain
[SugarColumn(ColumnName = "remark")]
public string remark { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string createdBy { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? createdTime { get; set; }
/// <summary>
/// Desc:更新人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string updatedBy { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public DateTime? updatedTime { get; set; }
/// <summary>
/// 序号(用于列表显示,不参与数据库操作)
/// </summary>

@ -98,37 +98,5 @@ namespace Sln.Wcs.Model.Domain
/// </summary>
[SugarColumn(ColumnName = "remark")]
public string remark { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string createdBy { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? createdTime { get; set; }
/// <summary>
/// Desc:更新人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string updatedBy { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public DateTime? updatedTime { get; set; }
}
}

@ -106,38 +106,6 @@ namespace Sln.Wcs.Model.Domain
/// </summary>
[SugarColumn(ColumnName = "remark")]
public string remark { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string createdBy { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? createdTime { get; set; }
/// <summary>
/// Desc:更新人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string updatedBy { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public DateTime? updatedTime { get; set; }
/// <summary>
/// 明细集合

@ -58,6 +58,14 @@ namespace Sln.Wcs.Model.Domain
/// </summary>
[SugarColumn(ColumnName = "store_name")]
public string storeName { get; set; }
/// <summary>
/// Desc:仓库类型1-包材;2-成品;3-托盘
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "store_type")]
public int? storeType { get; set; }
/// <summary>
/// Desc:是否表示1-是0-否
@ -75,42 +83,17 @@ namespace Sln.Wcs.Model.Domain
[SugarColumn(ColumnName = "remark")]
public string remark { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string createdBy { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? createdTime { get; set; }
/// <summary>
/// Desc:更新人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string updatedBy { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public DateTime? updatedTime { get; set; }
/// <summary>
/// 序号(用于列表显示,不参与数据库操作)
/// </summary>
[SugarColumn(IsIgnore = true)]
public int RowIndex { get; set; }
/// <summary>
/// 库位集合
/// </summary>
[SugarColumn(IsIgnore = true)]
[Navigate(NavigateType.OneToMany, nameof(BaseLocationInfo.storeCode), nameof(storeCode))]
public List<BaseLocationInfo> locationInfos { get; set; }
}
}

@ -160,36 +160,4 @@ public class LiveTaskDetail
/// </summary>
[SugarColumn(ColumnName = "remark")]
public string remark { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string createdBy { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? createdTime { get; set; }
/// <summary>
/// Desc:更新人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string updatedBy { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public DateTime? updatedTime { get; set; }
}

@ -152,38 +152,6 @@ public class LiveTaskQueue
/// </summary>
[SugarColumn(ColumnName = "remark")]
public string remark { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_by")]
public string createdBy { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "created_time")]
public DateTime? createdTime { get; set; }
/// <summary>
/// Desc:更新人
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_by")]
public string updatedBy { get; set; }
/// <summary>
/// Desc:更新时间
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "updated_time")]
public DateTime? updatedTime { get; set; }
/// <summary>
/// 明细集合

@ -3,6 +3,7 @@ using Sln.Wcs.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
@ -10,5 +11,12 @@ namespace Sln.Wcs.Repository.service
{
public interface IBaseStoreInfoService:IBaseService<BaseStoreInfo>
{
/// <summary>
/// 获取仓库信息:关联下属库位
/// </summary>
/// <param name="storeWhere"></param>
/// <param name="locationWhere"></param>
/// <returns></returns>
List<BaseStoreInfo> GetBasePathInfo(Expression<Func<BaseStoreInfo, bool>> storeWhere,Expression<Func<BaseLocationInfo, bool>> locationWhere);
}
}

@ -3,8 +3,10 @@ using Sln.Wcs.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
@ -34,6 +36,42 @@ namespace Sln.Wcs.Repository.service.Impl
{
public BaseStoreInfoServiceImpl(Repository<BaseStoreInfo> rep) : base(rep)
{
}
public List<BaseStoreInfo> GetBasePathInfo(Expression<Func<BaseStoreInfo, bool>> storeWhere,Expression<Func<BaseLocationInfo, bool>> locationWhere)
{
try
{
// var result = _rep.Context.Queryable<BaseStoreInfo>()
// .Includes(x => x.locationInfos.Where(p => p.isFlag == 1).ToList())
// .Where(storeWhere)
// .ToList();
var res = _rep.Context.Queryable<BaseStoreInfo>()
.Includes(x => x.locationInfos) // 先加载所有
.Where(storeWhere)
.ToList()
.Select(store => new BaseStoreInfo
{
objId = store.objId,
storeCode = store.storeCode,
storeName = store.storeName,
storeType = store.storeType,
isFlag = store.isFlag,
remark = store.remark,
locationInfos = store.locationInfos.AsQueryable()
.Where(locationWhere) // 应用 locationWhere
.Where(p => p.isFlag == 1)
.ToList()
}).ToList();
return res;
}
catch (Exception ex)
{
throw new InvalidOperationException($"通过导航查询方式获取设备信息及下属参数执行异常:{ex.Message}");
}
}
}
}

@ -0,0 +1,68 @@
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2026 WenJY
* CLR4.0.30319.42000
* Mr.Wen's MacBook Pro
* Sln.Wcs
* 45EEA80E-9828-4E99-B3CF-F88DF38F4C55
*
* WenJY
*
* 2026-05-08 14:59:38
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using Sln.Wcs.Business.Domain.Dto.CreateTask;
using Sln.Wcs.Business.Domain.Dto.FilterLocation;
using Sln.Wcs.Business.Domain.Dto.SaveTask;
using Sln.Wcs.Business.InStore;
namespace Sln.Wcs;
public class MaterialInStoreTest
{
private readonly MaterialInStore _service;
public MaterialInStoreTest(MaterialInStore service)
{
_service = service;
}
public void Run()
{
var locationInfo = _service.FilterLocation(new FilterLocationDto()
{
materialCode = "20260507000001",
palletBarcode = "20260507000001"
});
var info = _service.CreateTask(new CreateTaskDto()
{
materialCode = "20260507000001",
materialBarcode = "20260507000001",
palletBarcode = "20260507000001",
amount = 1,
startPoint = "13#_L1_01",
endPoint = "15#_L3_03",
});
var res = _service.SaveTask(new SaveTaskDto()
{
taskCode = info.data.taskCode,
taskQueue = info.data.taskQueue,
taskDetails = info.data.taskDetails,
});
}
}

@ -3,22 +3,9 @@ using Com.Ctrip.Framework.Apollo;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using NeoSmart.Caching.Sqlite;
using Newtonsoft.Json;
using Sln.Wcs.Business;
using Sln.Wcs.Business.Domain.Dto.CreateTask;
using Sln.Wcs.Business.Domain.Dto.SaveTask;
using Sln.Wcs.Business.InStore;
using Sln.Wcs.HikRoBotSdk;
using Sln.Wcs.HoistApi.Domain.Dto.HoistControl;
using Sln.Wcs.HoistApi.Domain.Enum;
using Sln.Wcs.HoistApi.Service;
using Sln.Wcs.Model.Configs;
using Sln.Wcs.Model.Domain;
using Sln.Wcs.Repository;
using Sln.Wcs.Repository.service;
using Sln.Wcs.Serilog;
using Sln.Wcs.Plc;
using Sln.Wcs.Plc.Service;
using ZiggyCreatures.Caching.Fusion;
using ZiggyCreatures.Caching.Fusion.Serialization.NewtonsoftJson;
@ -41,25 +28,6 @@ namespace Sln.Wcs
log.Info($"系统启动成功,日志存放位置:{config["logPath"]}");
var bus = serviceProvider.GetService<MaterialInStore>();
var info = bus.CreateTask(new CreateTaskDto()
{
materialCode = "Material2",
materialBarcode = "Material2",
palletBarcode = "Material2",
amount = 1,
startPoint = "13#_L1_01",
endPoint = "15#_L3_03",
});
var res = bus.SaveTask(new SaveTaskDto()
{
taskCode = info.data.taskCode,
taskQueue = info.data.taskQueue,
taskDetails = info.data.taskDetails,
});
}
private static void ConfigureServices(IServiceCollection services)

Loading…
Cancel
Save