DESKTOP-9BNTV8O
2025-03-11 3b87f36219202b4cec47840bd9f56fdbe53e7d04
Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
@@ -8,6 +8,7 @@
using AngleSharp.Dom;
using DocumentFormat.OpenXml.Vml.Office;
using Elastic.Clients.Elasticsearch.Tasks;
using IoTClient;
using Microsoft.AspNetCore.Http;
using WCS.Application.Entity;
namespace WCS.Application;
@@ -162,22 +163,25 @@
        {
            throw Oops.Oh("设备工位信息不存在");
        }
        //任务信息
        var taskInfo = await _wcsOderTaskRep.GetByIdAsync(input.oderTaskId);
        if (taskInfo == null)
        {
            throw Oops.Oh("任务信息不存在");
        }
        if (taskInfo.Status > TaskStatusEnum.Doing)
        if (taskInfo.Status != TaskStatusEnum.Wait)
        {
            throw Oops.Oh("任务状态异常");
        }
        taskInfo.Status = TaskStatusEnum.Doing;//正在执行
        //物料品种信息
        var skuInfo = await _wcsMateialPzInfoRep.Context.Queryable<WcsMateialPzInfo>().Where(w => w.SkuNo == taskInfo.SkuNo).FirstAsync();
        if (skuInfo == null)
        {
            throw Oops.Oh("物料品种信息不存在");
        }
        //分拣任务信息
        //码垛绑定信息
        var checkTaskInfo = await _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.Port == deviceInfo.StationNum).FirstAsync();
        if (checkTaskInfo == null)
        {
@@ -196,7 +200,7 @@
        checkTaskInfo.Status = "1";//已绑定
        checkTaskInfo.PZNo = skuInfo.PZNo;        
        #region#给PLC写入抓箱品种号
        #region#给PLC写入抓箱品种号、批次号、通道状态
        var modPlc = await _wcsDeviceRep.Context.Queryable<WcsPlc>().FirstAsync(s => s.Id == deviceInfo.PlcId);
        if (modPlc == null)
        {
@@ -205,11 +209,17 @@
        PLCUtil modUtil = new PLCUtil(modPlc);
        if (modUtil.Connected)
        {
            var ret = modUtil.SetPlcDBValue(checkTaskInfo.PosType, checkTaskInfo.DbNumber, checkTaskInfo.PlcPos, checkTaskInfo.PZNo);
            if (ret.IsSucceed)
            var listResult = new List<Result>();
            listResult.Add(modUtil.SetPlcDBValue(checkTaskInfo.PosType, checkTaskInfo.DbNumber, checkTaskInfo.PlcPos, checkTaskInfo.PZNo));//品种号
            listResult.Add(modUtil.SetPlcDBValue(checkTaskInfo.PosTypeLot, checkTaskInfo.DbNumber, checkTaskInfo.PosLot, checkTaskInfo.LotNo));//批次号
            listResult.Add(modUtil.SetPlcDBValue(checkTaskInfo.PosTypeStatus, checkTaskInfo.DbNumber, checkTaskInfo.PosStatus, "1"));//绑定状态 0:未绑定 1:已绑定
            if (listResult.All(s => s.IsSucceed))
            {
                //写入流程字成功后更新分拣任务
                //写入流程字成功后更新码垛绑定信息
                await _wcsCheckTaskRep.AsUpdateable(checkTaskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
                //写入流程字成功后更新任务状态
                await _wcsOderTaskRep.AsUpdateable(taskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
            }
            else
            {
@@ -233,16 +243,24 @@
    [DisplayName("任务结批")]
    public async Task CloseTaskForPLC(CloseTaskPLCInput input)
    {
        //分拣任务信息
        //绑定信息
        var checkTaskList = _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.LotNo == input.lotNo && w.Status == "1").ToList();
        if (checkTaskList.Count <= 0)
        {
            throw Oops.Bah("找不到该批次分拣任务信息");
        }
        //任务信息
        var taskInfo = _wcsOderTaskRep.Context.Queryable<WcsOderTask>().First(w => w.OrderNo == checkTaskList[0].OrderNo);
        if (taskInfo != null)
        {
            taskInfo.Status = TaskStatusEnum.Complete;//已结束
            //更新任务状态
            await _wcsOderTaskRep.AsUpdateable(taskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
        }
        foreach (var item in checkTaskList)
        {
            #region#给PLC写入结批批次号
            var deviceInfo = await _wcsDeviceRep.Context.Queryable<WcsDevice>().FirstAsync(w => w.StationNum == item.Port);
            var deviceInfo = await _wcsDeviceRep.Context.Queryable<WcsDevice>().FirstAsync(w => w.StationNum == item.Port && w.DeviceType== DeviceTypeEnum.Show);
            if (deviceInfo == null)
            {
                throw Oops.Bah($"找不到工位号:{item.Port} 的码垛工位信息");
@@ -250,13 +268,17 @@
            var modPlc = await _wcsDeviceRep.Context.Queryable<WcsPlc>().FirstAsync(s => s.Id == deviceInfo.PlcId);
            if (modPlc == null)
            {
                throw Oops.Bah($"找不到工位号:{item.Port} 的设备信息");
                throw Oops.Bah($"找不到PLC信息");
            }
            PLCUtil modUtil = new PLCUtil(modPlc);
            if (modUtil.Connected)
            {
                var ret = modUtil.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PosLot, "1");
                if (ret.IsSucceed)
                var listResult = new List<Result>();
                listResult.Add(modUtil.SetPlcDBValue(item.PosType, item.DbNumber, item.PlcPos, "0"));//品种号
                listResult.Add(modUtil.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PosLot, ""));//批次号
                listResult.Add(modUtil.SetPlcDBValue(item.PosTypeStatus, item.DbNumber, item.PosStatus, "0"));//绑定状态 0:未绑定 1:已绑定
                if (listResult.All(s => s.IsSucceed))
                {
                    //写入流程字成功后更新分拣任务
                    item.OrderNo = "";
@@ -266,7 +288,9 @@
                    item.SkuName = "";
                    item.BoxType = "";
                    item.Qty = 0;
                    item.BoxCount = 0;
                    item.PZNo = "";
                    //item.PalletNo = "";
                    item.Status = "0";//未绑定 
                    //更新分拣任务