change - 添加包材入库任务生成逻辑

master
WenJY 1 day ago
parent fa1bb010be
commit 75fffb4a1d

@ -27,10 +27,11 @@ 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.Domain.Dto.ValidateMaterial;
using Sln.Wcs.Business.Util;
namespace Sln.Wcs.Business;
public interface IBusiness
public abstract class BaseBusiness:EntityWrapper
{
/// <summary>
@ -38,25 +39,26 @@ public interface IBusiness
/// </summary>
/// <param name="validateMaterialDto"></param>
/// <returns></returns>
ValidateMaterialResultDto ValidateMaterial(ValidateMaterialDto validateMaterialDto);
public abstract ValidateMaterialResultDto ValidateMaterial(ValidateMaterialDto validateMaterialDto);
/// <summary>
/// 创建任务
/// </summary>
/// <param name="taskDto"></param>
CreateTaskResultDto CreateTask(CreateTaskDto createTaskDto );
public abstract CreateTaskResultDto CreateTask(CreateTaskDto createTaskDto );
/// <summary>
/// 筛选目标库位
/// </summary>
/// <param name="filterLocationDto"></param>
/// <returns></returns>
FilterLocationResultDto FilterLocation(FilterLocationDto filterLocationDto);
public abstract FilterLocationResultDto FilterLocation(FilterLocationDto filterLocationDto);
/// <summary>
/// 保存任务
/// </summary>
/// <param name="saveTaskDto"></param>
/// <returns></returns>
SaveTaskResultDto SaveTask(SaveTaskDto saveTaskDto);
public abstract SaveTaskResultDto SaveTask(SaveTaskDto saveTaskDto);
}

@ -23,6 +23,8 @@
#endregion << 版 本 注 释 >>
using Sln.Wcs.Business.Domain.Enum;
namespace Sln.Wcs.Business.Domain.Dto.CreateTask;
public class CreateTaskDto
@ -45,5 +47,25 @@ public class CreateTaskDto
/// <summary>
/// 数量
/// </summary>
public string amount {get;set;}
public int amount {get;set;}
/// <summary>
/// 起点
/// </summary>
public string startPoint { get; set; }
/// <summary>
/// 终点
/// </summary>
public string endPoint { get; set; }
/// <summary>
/// 任务类型:1-入库;2-出库;
/// </summary>
public TaskTypeEnum taskType { get; set; }
/// <summary>
/// 任务类别1-包材;2-成品;3-托盘
/// </summary>
public TaskCategoryEnum taskCategory { get; set; }
}

@ -23,9 +23,25 @@
#endregion << 版 本 注 释 >>
using Sln.Wcs.Model.Domain;
namespace Sln.Wcs.Business.Domain.Dto.SaveTask;
public class SaveTaskDto
{
/// <summary>
/// 任务编号
/// </summary>
public string taskCode { get; set; }
/// <summary>
/// 任务队列
/// </summary>
public LiveTaskQueue taskQueue { get; set; }
/// <summary>
/// 任务明细
/// </summary>
public List<LiveTaskDetail> taskDetails { get; set; }
}

@ -8,4 +8,5 @@ public enum BusinessStatusEnum
= 99,
=100,
SDK=101,
=102,
}

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

@ -0,0 +1,14 @@
namespace Sln.Wcs.Business.Domain.Enum;
public enum TaskTypeEnum
{
/// <summary>
/// 入库
/// </summary>
InStore = 1,
/// <summary>
/// 出库
/// </summary>
OutStore = 2,
}

@ -31,4 +31,5 @@ public class SaveTaskResultModel
/// 结果
/// </summary>
public bool isRes { get; set; }
}

@ -23,32 +23,113 @@
#endregion << 版 本 注 释 >>
using System.Linq.Expressions;
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.Domain.Dto.ValidateMaterial;
using Sln.Wcs.Business.Domain.Enum;
using Sln.Wcs.Business.Domain.Model.CreateTask;
using Sln.Wcs.Business.Domain.Model.SaveTask;
using Sln.Wcs.Model.Domain;
using Sln.Wcs.Repository.service;
namespace Sln.Wcs.Business.InStore;
public class MaterialInStore:IBusiness
/// <summary>
/// 包材入库
/// </summary>
public class MaterialInStore:BaseBusiness
{
public ValidateMaterialResultDto ValidateMaterial(ValidateMaterialDto validateMaterialDto)
private readonly IBasePathInfoService _basePathInfoService;
private readonly ILiveTaskQueueService _liveTaskQueueService;
public MaterialInStore(IBasePathInfoService basePathInfoService, ILiveTaskQueueService liveTaskQueueService)
{
_basePathInfoService = basePathInfoService;
_liveTaskQueueService = liveTaskQueueService;
}
public override ValidateMaterialResultDto ValidateMaterial(ValidateMaterialDto validateMaterialDto)
{
throw new NotImplementedException();
}
public CreateTaskResultDto CreateTask(CreateTaskDto createTaskDto)
/// <summary>
/// 创建任务
/// </summary>
/// <param name="createTaskDto"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public override CreateTaskResultDto CreateTask(CreateTaskDto createTaskDto)
{
CreateTaskResultDto resultDto = new CreateTaskResultDto();
try
{
createTaskDto.taskType = TaskTypeEnum.InStore;
createTaskDto.taskCategory = TaskCategoryEnum.Material;
//获取包材入库路径
Expression<Func<BasePathInfo, bool>> exp = x=>x.startPoint == createTaskDto.startPoint && x.endPoint == createTaskDto.endPoint && x.pathType == (int)createTaskDto.taskType && x.pathCategory == (int)createTaskDto.taskCategory;
BasePathInfo pathInfo = _basePathInfoService.GetBasePathInfo(exp).FirstOrDefault() ?? throw new InvalidOperationException($"包材入库输送路径为 NULL");
#region 路径转为任务
string taskCode = "2026050700001"; //需根据现场实际定义生成规则
List<LiveTaskDetail> taskDetails = pathInfo.pathDetails.Select( item => base.LiveTaskDetailWrapper(taskCode,createTaskDto,item)).ToList();
var taskQueue = base.LiveTaskQueueWrapper(taskCode, createTaskDto, pathInfo);
taskQueue.taskSteps = taskDetails.Count;
taskQueue.taskDetails = taskDetails;
#endregion
resultDto.code = BusinessStatusEnum.;
resultDto.msg = $"包材入库任务创建成功:{taskCode};关联路径:{pathInfo.pathName}";
resultDto.data = new CreateTaskResultModel()
{
taskCode = taskCode,
taskQueue = taskQueue,
taskDetails = taskDetails,
};
}
catch (Exception e)
{
resultDto.code = BusinessStatusEnum.;
resultDto.msg = e.Message;
}
return resultDto;
}
public override FilterLocationResultDto FilterLocation(FilterLocationDto filterLocationDto)
{
throw new NotImplementedException();
}
public FilterLocationResultDto FilterLocation(FilterLocationDto filterLocationDto)
/// <summary>
/// 保存任务
/// </summary>
/// <param name="saveTaskDto"></param>
/// <returns></returns>
public override SaveTaskResultDto SaveTask(SaveTaskDto saveTaskDto)
{
throw new NotImplementedException();
}
SaveTaskResultDto resultDto = new SaveTaskResultDto();
try
{
var inRes = _liveTaskQueueService.InsertTaskQueue(saveTaskDto.taskQueue);
resultDto.code = BusinessStatusEnum.;
resultDto.msg = "执行完成";
resultDto.data = new SaveTaskResultModel()
{
isRes = inRes
};
}
catch (Exception e)
{
resultDto.code = BusinessStatusEnum.;
resultDto.msg = e.Message;
}
public SaveTaskResultDto SaveTask(SaveTaskDto saveTaskDto)
{
throw new NotImplementedException();
return resultDto;
}
}

@ -23,9 +23,32 @@
#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.Domain.Dto.ValidateMaterial;
namespace Sln.Wcs.Business.InStore;
public class PalletInStore
public class PalletInStore:BaseBusiness
{
public override ValidateMaterialResultDto ValidateMaterial(ValidateMaterialDto validateMaterialDto)
{
throw new NotImplementedException();
}
public override CreateTaskResultDto CreateTask(CreateTaskDto createTaskDto)
{
throw new NotImplementedException();
}
public override FilterLocationResultDto FilterLocation(FilterLocationDto filterLocationDto)
{
throw new NotImplementedException();
}
public override SaveTaskResultDto SaveTask(SaveTaskDto saveTaskDto)
{
throw new NotImplementedException();
}
}

@ -9,6 +9,8 @@
<ItemGroup>
<ProjectReference Include="..\Sln.Wcs.Common\Sln.Wcs.Common.csproj" />
<ProjectReference Include="..\Sln.Wcs.Model\Sln.Wcs.Model.csproj" />
<ProjectReference Include="..\Sln.Wcs.Repository\Sln.Wcs.Repository.csproj" />
<ProjectReference Include="..\Sln.Wcs.Serilog\Sln.Wcs.Serilog.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,123 @@
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2026 WenJY
* CLR4.0.30319.42000
* Mr.Wen's MacBook Pro
* Sln.Wcs.Business.Util
* 6942BA6E-D8FC-4847-BBF6-5977C3A999D6
*
* WenJY
*
* 2026-05-07 18:07:25
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using System.Reflection;
using Sln.Wcs.Business.Domain.Enum;
using Sln.Wcs.Model.Domain;
namespace Sln.Wcs.Business.Util;
public class EntityWrapper
{
/// <summary>
/// 反射辅助方法
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
private (string materialCode, string palletBarcode, string materialBarcode, int materialCount,int taskType,int taskCategory) ExtractTaskFields(object source)
{
if (source == null) throw new ArgumentNullException(nameof(source));
var type = source.GetType();
object GetPropertyValue(string propName)
{
var prop = type.GetProperty(propName, BindingFlags.Public | BindingFlags.Instance);
if (prop != null && prop.CanRead) return prop.GetValue(source);
var field = type.GetField(propName, BindingFlags.Public | BindingFlags.Instance);
return field?.GetValue(source);
}
string GetString(string propName) => GetPropertyValue(propName)?.ToString() ?? string.Empty;
int GetInt(string propName)
{
var val = GetPropertyValue(propName);
return val != null ? Convert.ToInt32(val) : 0;
}
return (
materialCode: GetString("materialCode"),
palletBarcode: GetString("palletBarcode"),
materialBarcode: GetString("materialBarcode"),
materialCount: GetInt("amount"),
taskType: GetInt("taskType"),
taskCategory: GetInt("taskCategory")
);
}
/// <summary>
/// 任务明细包装
/// </summary>
/// <param name="taskCode"></param>
/// <param name="source"></param>
/// <param name="pathDetails"></param>
/// <returns></returns>
public LiveTaskDetail LiveTaskDetailWrapper(string taskCode,object source, BasePathDetails pathDetails)
{
var fields = ExtractTaskFields(source);
return new LiveTaskDetail
{
taskCode = taskCode,
materialCode = fields.materialCode,
palletBarcode = fields.palletBarcode,
materialBarcode = fields.materialBarcode,
materialCount = fields.materialCount,
startPoint = pathDetails.startPoint,
endPoint = pathDetails.endPoint,
deviceType = pathDetails.deviceType,
pathCode = $"{pathDetails.pathCode}_{pathDetails.objId}",
taskType = fields.taskType,
taskCategory = fields.taskCategory
};
}
/// <summary>
/// 任务队列包装
/// </summary>
/// <param name="taskCode"></param>
/// <param name="source"></param>
/// <param name="pathInfo"></param>
/// <returns></returns>
public LiveTaskQueue LiveTaskQueueWrapper(string taskCode, object source, BasePathInfo pathInfo)
{
var fields = ExtractTaskFields(source);
return new LiveTaskQueue()
{
taskCode = taskCode,
materialCode = fields.materialCode,
palletBarcode = fields.palletBarcode,
materialBarcode = fields.materialBarcode,
materialCount = fields.materialCount,
startPoint = pathInfo.startPoint,
endPoint = pathInfo.endPoint,
pathCode = pathInfo.pathCode,
taskType = fields.taskType,
taskCategory = fields.taskCategory
};
}
}

@ -0,0 +1,168 @@
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2026 WenJY
* CLR4.0.30319.42000
* Mr.Wen's MacBook Pro
* Sln.Wcs.Common
* 0D6CF267-193F-4A82-897F-C7920B81FB27
*
* WenJY
*
* 2026-05-07 15:27:58
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using System.Linq.Expressions;
namespace Sln.Wcs.Common;
public static class ExpressionExtensions
{
/// <summary>
/// 创建一个值恒为 <c>true</c> 的表达式。
/// </summary>
/// <typeparam name="T">表达式方法类型</typeparam>
/// <returns>一个值恒为 <c>true</c> 的表达式。</returns>
public static Expression<Func<T, bool>> True<T>() { return p => true; }
/// <summary>
/// 创建一个值恒为 <c>false</c> 的表达式。
/// </summary>
/// <typeparam name="T">表达式方法类型</typeparam>
/// <returns>一个值恒为 <c>false</c> 的表达式。</returns>
public static Expression<Func<T, bool>> False<T>() { return f => false; }
/// <summary>
/// 使用 Expression.OrElse 的方式拼接两个 System.Linq.Expression。
/// </summary>
/// <typeparam name="T">表达式方法类型</typeparam>
/// <param name="left">左边的 System.Linq.Expression 。</param>
/// <param name="right">右边的 System.Linq.Expression。</param>
/// <returns>拼接完成的 System.Linq.Expression。</returns>
public static Expression<T> Or<T>(this Expression<T> left, Expression<T> right)
{
return MakeBinary(left, right, Expression.OrElse);
}
/// <summary>
/// 使用 Expression.AndAlso 的方式拼接两个 System.Linq.Expression。
/// </summary>
/// <typeparam name="T">表达式方法类型</typeparam>
/// <param name="left">左边的 System.Linq.Expression 。</param>
/// <param name="right">右边的 System.Linq.Expression。</param>
/// <returns>拼接完成的 System.Linq.Expression。</returns>
public static Expression<T> And<T>(this Expression<T> left, Expression<T> right)
{
return MakeBinary(left, right, Expression.AndAlso);
}
/// <summary>
/// 使用自定义的方式拼接两个 System.Linq.Expression。
/// </summary>
/// <typeparam name="T">表达式方法类型</typeparam>
/// <param name="left">左边的 System.Linq.Expression 。</param>
/// <param name="right">右边的 System.Linq.Expression。</param>
/// <param name="func"> </param>
/// <returns>拼接完成的 System.Linq.Expression。</returns>
private static Expression<T> MakeBinary<T>(this Expression<T> left, Expression<T> right, Func<Expression, Expression, Expression> func)
{
return MakeBinary((LambdaExpression)left, right, func) as Expression<T>;
}
/// <summary>
/// 拼接两个 <paramref>
/// <name>System.Linq.Expression</name>
/// </paramref> ,两个 <paramref>
/// <name>System.Linq.Expression</name>
/// </paramref> 的参数必须完全相同。
/// </summary>
/// <param name="left">左边的 <paramref>
/// <name>System.Linq.Expression</name>
/// </paramref> </param>
/// <param name="right">右边的 <paramref>
/// <name>System.Linq.Expression</name>
/// </paramref> </param>
/// <param name="func">表达式拼接的具体逻辑</param>
/// <returns>拼接完成的 <paramref>
/// <name>System.Linq.Expression</name>
/// </paramref> </returns>
private static LambdaExpression MakeBinary(this LambdaExpression left, LambdaExpression right, Func<Expression, Expression, Expression> func)
{
var data = Combinate(right.Parameters, left.Parameters).ToArray();
right = ParameterReplace.Replace(right, data) as LambdaExpression;
return Expression.Lambda(func(left.Body, right.Body), left.Parameters.ToArray());
}
/// <summary>
/// 合并参数
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="left"></param>
/// <param name="right"></param>
/// <returns></returns>
private static IEnumerable<KeyValuePair<T, T>> Combinate<T>(IEnumerable<T> left, IEnumerable<T> right)
{
var a = left.GetEnumerator();
var b = right.GetEnumerator();
while (a.MoveNext() && b.MoveNext())
yield return new KeyValuePair<T, T>(a.Current, b.Current);
}
}
internal sealed class ParameterReplace : ExpressionVisitor
{
public static Expression Replace(Expression e, IEnumerable<KeyValuePair<ParameterExpression, ParameterExpression>> paramList)
{
var item = new ParameterReplace(paramList);
return item.Visit(e);
}
private readonly Dictionary<ParameterExpression, ParameterExpression> _parameters;
public ParameterReplace(IEnumerable<KeyValuePair<ParameterExpression, ParameterExpression>> paramList)
{
_parameters = paramList.ToDictionary(p => p.Key, p => p.Value, new ParameterEquality());
}
protected override Expression VisitParameter(ParameterExpression p)
{
ParameterExpression result;
if (_parameters.TryGetValue(p, out result))
return result;
return base.VisitParameter(p);
}
#region class: ParameterEquality
private class ParameterEquality : IEqualityComparer<ParameterExpression>
{
public bool Equals(ParameterExpression x, ParameterExpression y)
{
if (x == null || y == null)
return false;
return x.Type == y.Type;
}
public int GetHashCode(ParameterExpression obj)
{
if (obj == null)
return 0;
return obj.Type.GetHashCode();
}
}
#endregion
}

@ -50,6 +50,14 @@ namespace Sln.Wcs.Model.Domain
/// </summary>
[SugarColumn(ColumnName = "path_code")]
public string pathCode { get; set; }
/// <summary>
/// Desc:路径名称
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "path_name")]
public string pathName { get; set; }
/// <summary>
/// Desc:起点
@ -66,6 +74,14 @@ namespace Sln.Wcs.Model.Domain
/// </summary>
[SugarColumn(ColumnName = "end_point")]
public string endPoint { get; set; }
/// <summary>
/// Desc:设备类型0-输送线1-AGV2-提升机
/// Default:0
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "device_type")]
public int? deviceType { get; set; }
/// <summary>
/// Desc:是否标识1-是0-否

@ -58,6 +58,38 @@ namespace Sln.Wcs.Model.Domain
/// </summary>
[SugarColumn(ColumnName = "path_name")]
public string pathName { get; set; }
/// <summary>
/// Desc:路径类型:1-入库;2-出库;
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "path_type")]
public int? pathType { get; set; }
/// <summary>
/// Desc:路径类别1-包材;2-成品;3-托盘
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "path_category")]
public int? pathCategory { get; set; }
/// <summary>
/// Desc:起点
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "start_point")]
public string startPoint { get; set; }
/// <summary>
/// Desc:终点
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "end_point")]
public string endPoint { get; set; }
/// <summary>
/// Desc:是否标识1-是0-否
@ -111,6 +143,7 @@ namespace Sln.Wcs.Model.Domain
/// 明细集合
/// </summary>
[SugarColumn(IsIgnore = true)]
[Navigate(NavigateType.OneToMany, nameof(BasePathDetails.pathCode), nameof(pathCode))]
public List<BasePathDetails> pathDetails { get; set; }
}
}

@ -48,6 +48,14 @@ public class LiveTaskDetail
/// </summary>
[SugarColumn(ColumnName = "task_code")]
public string taskCode { get; set; }
/// <summary>
/// Desc:路径编号
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "path_code")]
public string pathCode { get; set; }
/// <summary>
/// Desc:物料编号
@ -113,6 +121,14 @@ public class LiveTaskDetail
[SugarColumn(ColumnName = "end_point")]
public string endPoint { get; set; }
/// <summary>
/// Desc:设备类型0-输送线1-AGV2-提升机
/// Default:0
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "device_type")]
public int? deviceType { get; set; }
/// <summary>
/// Desc:是否校验物料1-是;0-否
/// Default:

@ -112,6 +112,14 @@ public class LiveTaskQueue
/// </summary>
[SugarColumn(ColumnName = "end_point")]
public string endPoint { get; set; }
/// <summary>
/// Desc:路径编号
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "path_code")]
public string pathCode { get; set; }
/// <summary>
/// Desc:任务状态1-待执行;2-执行中;3-已完成;

@ -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,11 @@ namespace Sln.Wcs.Repository.service
{
public interface IBasePathInfoService:IBaseService<BasePathInfo>
{
/// <summary>
/// 获取路径信息
/// </summary>
/// <param name="whereExpression"></param>
/// <returns></returns>
List<BasePathInfo> GetBasePathInfo(Expression<Func<BasePathInfo, bool>> exp);
}
}

@ -30,5 +30,5 @@ namespace Sln.Wcs.Repository.service;
public interface ILiveTaskQueueService:IBaseService<LiveTaskQueue>
{
bool InsertTaskQueue(LiveTaskQueue taskQueue);
}

@ -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 << 版 本 注 释 >>
/*--------------------------------------------------------------------
@ -32,8 +34,24 @@ namespace Sln.Wcs.Repository.service.Impl
{
public class BasePathInfoServiceImpl : BaseServiceImpl<BasePathInfo>, IBasePathInfoService
{
public BasePathInfoServiceImpl(Repository<BasePathInfo> rep) : base(rep)
{
}
public List<BasePathInfo> GetBasePathInfo(Expression<Func<BasePathInfo, bool>> exp)
{
try
{
return _rep.Context.Queryable<BasePathInfo>()
.Includes(x => x.pathDetails.Where(p => p.isFlag == 1).ToList())
.Where(exp)
.ToList();
}
catch (Exception ex)
{
throw new InvalidOperationException($"通过导航查询方式获取设备信息及下属参数执行异常:{ex.Message}");
}
}
}
}

@ -30,7 +30,30 @@ namespace Sln.Wcs.Repository.service.Impl;
public class LiveTaskQueueServiceImpl: BaseServiceImpl<LiveTaskQueue>, ILiveTaskQueueService
{
public LiveTaskQueueServiceImpl(Repository<LiveTaskQueue> rep) : base(rep)
private ILiveTaskDetailService liveTaskDetailService;
public LiveTaskQueueServiceImpl(Repository<LiveTaskQueue> rep, ILiveTaskDetailService liveTaskDetailService) : base(rep)
{
this.liveTaskDetailService = liveTaskDetailService;
}
public bool InsertTaskQueue(LiveTaskQueue taskQueue)
{
bool res = false;
try
{
_rep.AsTenant().BeginTran();
res = _rep.Insert(taskQueue);
res = liveTaskDetailService.Insert(taskQueue.taskDetails);
_rep.AsTenant().CommitTran();
}
catch (Exception e)
{
_rep.AsTenant().RollbackTran();
throw new InvalidOperationException($"保存任务队列异常:{e.Message}");
}
return res;
}
}

@ -79,14 +79,14 @@ namespace Sln.Wcs.Repository.service.@base
try
{
// _rep.AsTenant().BeginTran();
var info = _rep.CopyNew().InsertRange(lisT);
// _rep.AsTenant().CommitTran();
//_rep.AsTenant().BeginTran();
var info = _rep.InsertRange(lisT);
//_rep.AsTenant().CommitTran();
return true;
}
catch (Exception ex)
{
// _rep.AsTenant().RollbackTran();
//_rep.AsTenant().RollbackTran();
throw new InvalidOperationException($"批量添加实体集合异常:{ex.Message}");
}
}

@ -4,11 +4,16 @@ 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;
@ -35,6 +40,26 @@ namespace Sln.Wcs
var log = serviceProvider.GetService<SerilogHelper>();
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)
@ -52,6 +77,7 @@ namespace Sln.Wcs
Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.HoistApi.dll")),
Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.HoistSdk.dll")),
Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.Plc.dll")),
Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.Business.dll")),
};
services.Scan(scan => scan.FromAssemblies(assemblies)

@ -26,6 +26,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Sln.Wcs.Business\Sln.Wcs.Business.csproj" />
<ProjectReference Include="..\Sln.Wcs.Cache\Sln.Wcs.Cache.csproj" />
<ProjectReference Include="..\Sln.Wcs.HikRoBotApi\Sln.Wcs.HikRoBotApi.csproj" />
<ProjectReference Include="..\Sln.Wcs.HikRoBotSdk\Sln.Wcs.HikRoBotSdk.csproj" />

Loading…
Cancel
Save