huangxiaoqiang
2025-06-11 8c8532db8fc7fa76b7fe4c254a36d67c6af24ace
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/RequestInTaskAsync.cs
@@ -1,21 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using Masuit.Tools;
using SqlSugar;
using WIDESEA_Core.Const;
using WIDESEA_Core.DB.Models;
using WIDESEA_DTO.MOM;
using WIDESEA_DTO.WMS;
using WIDESEA_DTO;
using WIDESEA_Model.Models;
using WIDESEA_Repository;
using WIDESEAWCS_BasicInfoRepository;
using Masuit.Tools;
using WIDESEA_StorageTaskRepository;
//using WIDESEAWCS_Model.Models;
namespace WIDESEA_StorageTaskServices;
public partial class Dt_TaskService : ServiceBase<Dt_Task, IDt_TaskRepository>, IDt_TaskService
{
@@ -50,36 +42,75 @@
    private async Task<WebResponseContent> ProcessOCVB(DtBoxingInfo boxing, Dt_AreaInfo area, RequestTaskDto input)
    {
        WebResponseContent content = new WebResponseContent();
        // 判断需不需要去包装,不需要就去常温三
        var stationManagers = _stationManagerRepository.QueryData(x => x.stationPLC == "1018" && x.stationArea == "Cache");
        var station = stationManagers.Select(x => x.stationChildCode).ToList();
        try
        {
            // 判断需不需要去包装,不需要就去常温三
            var stationManagers = _stationManagerRepository.QueryData(x => x.stationPLC == "1018" && x.stationArea == "Cache" && x.productLine == input.ProductionLine);
        // 获取WCSip地址相关配置
        var wcsIpAddrss = GetWCSIpAddress();
        if (wcsIpAddrss == null)
        {
            throw new InvalidOperationException("WCS IP 未配置");
        }
            var STATION = _stationManagerRepository.QueryFirst(x => x.stationChildCode == input.Position);
        var abc = HttpHelper.PostAsync(wcsIpAddrss, station.ToJsonString()).Result;
        content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
        if (content.Data.ObjToInt() > 0)
        {
            // 送至包装
            List<string> strings = stationManagers.Where(x => x.stationType == 0).Select(x => x.Roadway).ToList();
            return await CreateNewTask(input, strings, 3);
        }
        else
        {
            var config = _configService.GetByConfigKey("SYS_InStacker", "CW3InStacker");
            var strings = config.ConfigValue.Split(',').ToList();
            // 入库送至常温3
            var resultContent = await CreateNewTask(input, strings);
            if (resultContent.Status)
            //var station = stationManagers.Select(x => x.stationChildCode).ToList();
            //// 获取WCSip地址相关配置
            var wcsIpAddrss = GetWCSIpAddress();
            //if (wcsIpAddrss == null)
            //{
            //    throw new InvalidOperationException("WCS IP 未配置");
            //}
            //var abc = HttpHelper.PostAsync(wcsIpAddrss, station.ToJsonString()).Result;
            //content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
            //var num = content.Data.ObjToInt();
            //如果当前库内存在比当前时间的对应产线的料 则入库至常温3
            DtStockInfo stockInfo = _stockInfoRepository.QueryFirst(x => x.AreaCode == "CWSC3" && x.IsFull == true && x.ProductionLine == STATION.productLine && x.OutboundTime < DateTime.Now);
            if (stockInfo != null)
            {
                await _boxingInfoRepository.AddDataNavAsync(boxing);
                var config = _configService.GetByConfigKey("SYS_InStacker", "CW3InStacker");
                var strings = config.ConfigValue.Split(',').ToList();
                // 入库送至常温3
                var resultContent = await CreateNewTask(input, input.ProductionLine, boxing.ProcessCode, strings);
                if (resultContent.Status)
                {
                    await _boxingInfoRepository.AddDataNavAsync(boxing);
                }
                return resultContent;
            }
            return resultContent;
            // TODO 判断在途数量
            var needBarcode = await SqlSugarHelper.DbWCS.Queryable<dt_needBarcode>().FirstAsync(x => x.productLine == STATION.productLine && x.fromArea == "CW");
            var needCount =  BaseDal.QueryData(x => x.TargetAddress == needBarcode.toArea).Count();
            //var count = BaseDal.QueryData(x => x.TargetAddress == stationManagers[0].Roadway).Count;
            if (needCount < needBarcode.cacheNum)
            {
                // 送至包装
                List<string> strings = stationManagers.Where(x => x.stationType == 0 && x.productLine == input.ProductionLine).Select(x => x.Roadway).ToList();
                var x = await SqlSugarHelper.DbWCS.Updateable<dt_needBarcode>()
                    .SetColumns(x => x.inLineNum == x.inLineNum + 1)
                    .Where(x => x.id == needBarcode.id).ExecuteCommandHasChangeAsync();
                ConsoleHelper.WriteSuccessLine($"在途数量添加{(x ? "成功" : "失败")}数量+1,当前工序{boxing.ProcessCode},产线{input.ProductionLine}");
                LogFactory.GetLog("OCVB").InfoFormat(true, $"在途数量添加{(x ? "成功" : "失败")}数量+1,当前工序{boxing.ProcessCode},产线{input.ProductionLine}", "无参数");
                return await CreateNewTask(input, input.ProductionLine, boxing.ProcessCode, strings, 3);
            }
            else
            {
                var config = _configService.GetByConfigKey("SYS_InStacker", "CW3InStacker");
                var strings = config.ConfigValue.Split(',').ToList();
                // 入库送至常温3
                var resultContent = await CreateNewTask(input, input.ProductionLine, boxing.ProcessCode, strings);
                if (resultContent.Status)
                {
                    await _boxingInfoRepository.AddDataNavAsync(boxing);
                }
                return resultContent;
            }
        }
        catch (Exception ex)
        {
            ConsoleHelper.WriteErrorLine(ex.Message);
            LogFactory.GetLog("OCVB").InfoFormat(true, $",异常信息:{ex.Message},{ex.StackTrace}", "无参数");
            return content.Error(ex.Message);
        }
    }
@@ -107,9 +138,13 @@
        if (!content.Status) return content.Error("工艺申请失败");
        var resultProcessApply = JsonConvert.DeserializeObject<ResultProcessApply>(content.Data.ToString());
        if (!resultProcessApply.Success) return content.Error("工艺申请失败");
        if (!resultProcessApply.Success)
        {
            return await HandleErrorCells(input, area);
            //return content.Error("工艺申请失败");
        }
        var number = resultProcessApply.ProcessInfo.Where(x => x.ProcessCode == boxing.ProcessCode).FirstOrDefault().Number.ToInt32();
        var number = resultProcessApply.ProcessInfo.Where(x => x.ProcessCode.Contains(boxing.ProcessCode)).FirstOrDefault().Number.ToInt32();
        foreach (var item in resultProcessApply.ProcessInfo)
        {
            if (item.Number.ToInt32() == number + 1)
@@ -124,9 +159,22 @@
        {
            throw new Exception("未找到入库站台配置");
        }
        //List<string> strings;
        //if (areaIn == "GWSC1")
        //{
        //    strings = new List<string>
        //    {
        //        (boxing.ProductionLine != null && boxing.ProductionLine == "ZJ-7") ? "GWSC1" : "GWSC2"
        //    };
        //}
        //else
        //{
        //    strings = stationManagers.Roadway.Split(',').ToList();
        //}
        List<string> strings = stationManagers.Roadway.Split(',').ToList();
        var resultContent = await CreateNewTask(input, strings);
        var resultContent = await CreateNewTask(input, result.ProductionLine, boxing.ProcessCode, strings);
        if (resultContent.Status)
        {
            var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing);
@@ -140,14 +188,19 @@
        {
            case "CH01":
                return "CH001";
            case "JZ01":
                return "JZ001";
            case "GW01":
                return "GWSC1";
            case "CW01":
                return "CWSC1";
            case "CW02":
                return "CWSC2";
            default:
                return string.Empty;
        }
@@ -168,21 +221,22 @@
    /// <summary>
    /// 电芯NG送至NG口
    /// </summary>
    private async Task<WebResponseContent> HandleErrorCells(RequestTaskDto input, Dt_AreaInfo area, List<SerialNoDto> serialNosError)
    private async Task<WebResponseContent> HandleErrorCells(RequestTaskDto input, Dt_AreaInfo area, List<SerialNoDto> serialNosError = null)
    {
        WebResponseContent content = new WebResponseContent();
        // TODO 创建任务送至NG排出口
        var stationManagers = _stationManagerRepository.QueryData(x => x.stationType == 1 && x.stationChildCode == input.Position && x.stationArea == area.AreaCode).FirstOrDefault();
        if (stationManagers == null)
        if (stationManagers == null)
        {
            throw new Exception("未找到NG入库站台配置");
        }
        List<string> NGStation = stationManagers.Roadway.Split(',').ToList();
        if (NGStation.Count <= 0)
        {
            NGStation = stationManagers.stationNGChildCode.Split(',').ToList();
        }
        content = await CreateNewTask(input, NGStation, 2);
        //List<string> NGStation = stationManagers.Roadway.Split(',').ToList();
        //if (NGStation.Count <= 0)
        //{
        //    NGStation = stationManagers.stationNGChildCode.Split(',').ToList();
        //}
        List<string> NGStation = stationManagers.stationNGChildCode.Split(',').ToList();
        content = await CreateNewTask(input, input.ProductionLine, "", NGStation, 2);
        return content.Error("存在异常电芯");
    }
@@ -212,7 +266,8 @@
            TargetAddress = task.Roadway,
            TaskState = task.TaskState.Value,
            Id = 0,
            TaskType = task.TaskType
            TaskType = task.TaskType,
            ProductionLine = task.ProductionLine,
        };
        return new WebResponseContent().OK(data: taskDTO);
    }
@@ -240,4 +295,4 @@
    {
        return await _areaInfoRepository.QueryFirstAsync(x => x.Spare1.Contains(position));
    }
}
}