Admin.NET/WCS.Application/Entity/WcsCheckTask.cs
@@ -15,11 +15,23 @@ public class WcsCheckTask : EntityBaseData { /// <summary> /// 任务号 /// </summary> [SugarColumn(ColumnName = "TaskNo", ColumnDescription = "任务号", Length = 20)] public string? TaskNo { get; set; } /// <summary> /// WMS下发单号 /// </summary> [SugarColumn(ColumnName = "OrderNo", ColumnDescription = "WMS下发单号", Length = 20)] public string? OrderNo { get; set; } /// <summary> /// 机器人类型 /// </summary> [SugarColumn(ColumnName = "RoboatType", ColumnDescription = "机器人类型", Length = 5)] public string? RoboatType { get; set; } /// <summary> /// 机器人编号 /// </summary> @@ -29,8 +41,8 @@ /// <summary> /// 分拣线编号 /// </summary> [SugarColumn(ColumnName = "LineNO", ColumnDescription = "分拣线编号", Length = 5)] public string? LineNO { get; set; } [SugarColumn(ColumnName = "LineNo", ColumnDescription = "分拣线编号", Length = 5)] public string? LineNo { get; set; } /// <summary> /// 码盘工位号 Admin.NET/WCS.Application/Entity/WcsTask.cs
@@ -113,7 +113,7 @@ /// 拣货方式 /// </summary> [SugarColumn(ColumnName = "UnstackingMode", ColumnDescription = "拣货方式", Length = 10)] public string? UnstackingMode { get; set; } public UnstackingModeEnum? UnstackingMode { get; set; } /// <summary> /// 取消时间 Admin.NET/WCS.Application/Enum/TaskEnum.cs
@@ -85,4 +85,22 @@ /// </summary> [Description("回传失败")] Fail = 1 } /// <summary> /// 拣货方式 /// </summary> [Description("拣货方式")] public enum UnstackingModeEnum { /// <summary> /// 机器拆托出 /// </summary> [Description("机器拆托出")] Machine = 0, /// <summary> /// 人工拣货出 /// </summary> [Description("人工拣货出")] Artificial = 1, } Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskInput.cs
@@ -169,7 +169,7 @@ /// <summary> /// 分拣线编号 /// </summary> public string? LineNO { get; set; } public string? LineNo { get; set; } /// <summary> /// 码盘工位号 Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
@@ -45,7 +45,7 @@ .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u => u.OrderNo.Contains(input.SearchKey) || u.RoboatNo.Contains(input.SearchKey) || u.LineNO.Contains(input.SearchKey) || u.LineNo.Contains(input.SearchKey) || u.Port.Contains(input.SearchKey) || u.LotNo.Contains(input.SearchKey) || u.SkuNo.Contains(input.SearchKey) @@ -57,7 +57,7 @@ ) .WhereIF(!string.IsNullOrWhiteSpace(input.OrderNo), u => u.OrderNo.Contains(input.OrderNo.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.RoboatNo), u => u.RoboatNo.Contains(input.RoboatNo.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.LineNO), u => u.LineNO.Contains(input.LineNO.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.LineNo), u => u.LineNo.Contains(input.LineNo.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.Port), u => u.Port.Contains(input.Port.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.LotNo), u => u.LotNo.Contains(input.LotNo.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.SkuNo), u => u.SkuNo.Contains(input.SkuNo.Trim())) @@ -196,6 +196,10 @@ checkTaskInfo.PZNo = skuInfo.PZNo; //更新分拣任务 await _wcsCheckTaskRep.AsUpdateable(checkTaskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); #region#给PLC写数据 #endregion } [HttpPost] @@ -203,18 +207,21 @@ [DisplayName("任务结批")] public async Task CloseTaskForPLC(BindTaskPLCInput input) { #region 请求PLC接口 #region 请求PLC接口(这个方法实际是预结批,给PLC发送预结批信息,然后PLC再给WCS发送结批信号再将分拣信息清空) #endregion //分拣任务信息 var checkTaskList = _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.LotNo == input.lotNo && w.Status == "1").ToList(); foreach (var item in checkTaskList) { item.OrderNo = ""; item.TaskNo = ""; item.LotNo = ""; item.SkuNo = ""; item.SkuName = ""; item.BoxType = ""; item.Qty = 0; item.PZNo = ""; item.Status = "0";//未绑定 } //更新分拣任务 Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs
@@ -9,6 +9,7 @@ { public long Id { get; set; } public string Text { get; set; } public string? TaskNo { get; set; } public string? OrderNo { get; set; } public string? LotNo { get; set; } public string? SkuNo { get; set; } @@ -18,6 +19,6 @@ /// 总箱数/计划箱数/预估箱数 /// </summary> public int? Qty { get; set; } public string? LineNO { get; set; } public string? LineNo { get; set; } public string? PZNo { get; set; } } Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
@@ -405,11 +405,12 @@ { Id=device.Id, Text=device.Text, TaskNo=task.TaskNo, OrderNo=task.OrderNo, LotNo=task.LotNo, SkuNo=task.SkuNo, SkuName=task.SkuName, LineNO=task.LineNO, LineNo=task.LineNo, Status =task.Status, PZNo=task.PZNo, Qty=task.Qty Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskInput.cs
@@ -102,7 +102,7 @@ /// <summary> /// 拣货方式 /// </summary> public virtual string? UnstackingMode { get; set; } public virtual UnstackingModeEnum? UnstackingMode { get; set; } /// <summary> /// 取消时间 Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs
@@ -1,7 +1,9 @@ using AngleSharp.Dom; using Elastic.Clients.Elasticsearch.Tasks; using Furion.DatabaseAccessor; using Microsoft.AspNetCore.SignalR; using WCS.Application.Entity; namespace WCS.Application; @@ -13,11 +15,15 @@ { private readonly SqlSugarRepository<WcsTask> _wcsTaskRep; private readonly IHubContext<TaskLogHub, ITaskLogHub> _taskLogHubContext; private readonly SqlSugarRepository<WcsCheckTask> _wcsCheckTaskRep; private readonly SqlSugarRepository<WcsMateialPzInfo> _wcsMateialPzInfoRep; public WcsTaskService(SqlSugarRepository<WcsTask> wcsTaskRep, IHubContext<TaskLogHub, ITaskLogHub> taskLogHubContext) public WcsTaskService(SqlSugarRepository<WcsTask> wcsTaskRep, IHubContext<TaskLogHub, ITaskLogHub> taskLogHubContext, SqlSugarRepository<WcsCheckTask> wcsCheckTaskRep, SqlSugarRepository<WcsMateialPzInfo> wcsMateialPzInfoRep) { _wcsTaskRep = wcsTaskRep; _taskLogHubContext = taskLogHubContext; _wcsCheckTaskRep = wcsCheckTaskRep; _wcsMateialPzInfoRep = wcsMateialPzInfoRep; } /// <summary> @@ -56,9 +62,48 @@ { throw Oops.Bah("任务号重复"); } if (input.UnstackingMode == UnstackingModeEnum.Machine) { if (string.IsNullOrEmpty(input.SkuNo) || string.IsNullOrEmpty(input.SkuName)) { throw Oops.Bah("机器人拣货,物料和批次信息不能为空"); } } var entity = input.Adapt<WcsTask>(); entity.Origin = "WCS"; await _wcsTaskRep.InsertAsync(entity); #region 绑定垛机 //物料品种信息 var skuInfo = await _wcsMateialPzInfoRep.Context.Queryable<WcsMateialPzInfo>().Where(w => w.SkuNo == input.SkuNo).FirstAsync(); if (skuInfo == null) { throw Oops.Oh("物料品种信息不存在"); } //分拣任务信息 var checkTaskInfo = await _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.Status == "0" && w.RoboatType == "0").OrderBy(o => o.LineNo).FirstAsync(); if (checkTaskInfo == null) { throw Oops.Oh("分拣任务信息不存在"); } if (checkTaskInfo.Status != "0") { throw Oops.Oh("该工位已绑定任务,请勿再次绑定"); } checkTaskInfo.OrderNo = ""; checkTaskInfo.TaskNo = entity.TaskNo; checkTaskInfo.LotNo = entity.LotNo; checkTaskInfo.SkuNo = entity.SkuNo; checkTaskInfo.SkuName = entity.SkuName; checkTaskInfo.BoxType = ""; checkTaskInfo.Qty = entity.Qty; checkTaskInfo.Status = "1";//已绑定 checkTaskInfo.PZNo = skuInfo.PZNo; //更新分拣任务 await _wcsCheckTaskRep.AsUpdateable(checkTaskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); #endregion return entity.Id; } @@ -155,6 +200,25 @@ await _wcsTaskRep.Context.Insertable(modTaskMonitor).ExecuteCommandAsync(); //await _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); //await _taskLogHubContext.Clients.All.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); #region //分拣任务信息 var checkTaskList = _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.TaskNo == modTask.TaskNo && w.Status == "1").ToList(); foreach (var item in checkTaskList) { item.OrderNo = ""; item.TaskNo = ""; item.LotNo = ""; item.SkuNo = ""; item.SkuName = ""; item.BoxType = ""; item.Qty = 0; item.PZNo = ""; item.Status = "0";//未绑定 } //更新分拣任务 await _wcsCheckTaskRep.AsUpdateable(checkTaskList).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); #endregion } else { Web/src/views/device/sortPallet/index.vue
@@ -27,9 +27,9 @@ <el-form-item label="WMS明细单号"> <el-input v-model="deviceInfo.orderNo" readonly></el-input> </el-form-item> <!-- <el-form-item label="任务号"> <el-input v-model=""></el-input> </el-form-item> --> <el-form-item label="任务号"> <el-input v-model="deviceInfo.taskNo"></el-input> </el-form-item> <el-form-item label="批次号"> <el-input v-model="deviceInfo.lotNo" readonly></el-input> </el-form-item> @@ -40,7 +40,7 @@ <el-input v-model="deviceInfo.skuName" readonly></el-input> </el-form-item> <el-form-item label="分拣线编号"> <el-input v-model="deviceInfo.lineNO" readonly></el-input> <el-input v-model="deviceInfo.lineNo" readonly></el-input> </el-form-item> <el-form-item label="绑定状态"> <el-input :value="deviceInfo.status === '0' ? '未绑定' : '已绑定'" readonly></el-input> Web/src/views/device/wcsOderTask/component/editDialog.vue
@@ -115,7 +115,7 @@ </template> </el-dialog> <!-- 绑定任务弹框 --> <!-- 选择物料弹框 --> <el-dialog v-model="bindDialogVisible" title="选择数据"> <el-table :data="bindBoxData" Web/src/views/wcs/wcsTask/component/editDialog.vue
@@ -64,6 +64,37 @@ </el-form-item> </el-col> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="拣货方式" prop="unstackingMode"> <el-select clearable v-model="ruleForm.unstackingMode" placeholder="请选择拣货方式"> <el-option v-for="(item,index) in dl('UnstackingModeEnum')" :key="index" :value="Number(item.value)" :label="`${item.name} (${item.code}) [${item.value}]`"></el-option> </el-select> </el-form-item> </el-col> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="物料编码" prop="skuNo"> <el-input v-model="ruleForm.skuNo" placeholder="请输入物料编码" maxlength="20" show-word-limit clearable /> </el-form-item> </el-col> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="物料名称" prop="skuName"> <el-input v-model="ruleForm.skuName" placeholder="请输入物料名称" maxlength="50" show-word-limit clearable/> </el-form-item> </el-col> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="批次号" prop="lotNo"> <el-input v-model="ruleForm.lotNo" placeholder="请输入批次号" maxlength="50" show-word-limit clearable /> </el-form-item> </el-col> </el-row> </el-form> <template #footer>